>> а Вы краевые строчки и столбцы в результате не заполняете ;-) Начались в деревне танцы!!! :))) ОК! Вот с краевыми
double **a = new double*[10002]; for (int i = 0; i < 10001; i++) a[i] = new double[10002]; srand((unsigned)time(NULL)); for (int b = 0; b < 10; b++){ for (int i = 0 i < 10001; i++) a[0][i] = 1; a[i][0] = 1; a[10001][i] = 1; a[i][10001] = 1; for (int i = 1; i < 10001; i++) for (int j = 1 j < 10001; j++) a[i][j] = (double)rand() / RAND_MAX; for (int i = 1; i < 10001; i++) for (int j = 1; j < 10001; j++) a[i][j] = a[i - 1][j - 1] * a[i][j - 1] * a[i + 1][j - 1] * a[i - 1][j] * a[i + 1][j] * a[i - 1][j + 1] * a[i][j + 1] * a[i + 1][j + 1]; } Просто сделал окантовочку вокруг матрицы из единичек :)) Время если чо не поменялось :-р
>> я же не оптимизирую я тоже. если по-уму, то для начала обсчёта следующей строки (ну если мы перебираем по горизонтали например) достаточно чтобы предыдущая строка ушла вперёд всего на 2 столбца и можно начинать обсчитывать. Таким образом программа может распаралеливаться до нескольких тысяч трэдов. Ну а дальше грузим этой работой ГПУ и получаем результат. Вот тут от железа будет ОЧЕНЬ зависеть. С моей видюхой с пассивным охлаждением и 64 ядрами задача будет решаться менее чем за секунду, а на вашем компе, мгновенно. (конечно надо смотреть чё там в функции РАНД и какая энтропия нам нужна. мож и не стоит так морочиться и запилить чёнить простенькое).
В любом случае есть подход экстенсивный (добавить памяти, купить мощнее) а есть интенсивный (мальца мозгом шевельнуть). Я за второе, хотя я вообще не программер, а теплотехник по образованию и всегда работал по профессии.
no subject
Начались в деревне танцы!!! :))) ОК! Вот с краевыми
double **a = new double*[10002];
for (int i = 0; i < 10001; i++)
a[i] = new double[10002];
srand((unsigned)time(NULL));
for (int b = 0; b < 10; b++){
for (int i = 0 i < 10001; i++)
a[0][i] = 1; a[i][0] = 1; a[10001][i] = 1; a[i][10001] = 1;
for (int i = 1; i < 10001; i++)
for (int j = 1 j < 10001; j++)
a[i][j] = (double)rand() / RAND_MAX;
for (int i = 1; i < 10001; i++)
for (int j = 1; j < 10001; j++)
a[i][j] = a[i - 1][j - 1] * a[i][j - 1] * a[i + 1][j - 1] * a[i - 1][j] *
a[i + 1][j] * a[i - 1][j + 1] * a[i][j + 1] * a[i + 1][j + 1];
}
Просто сделал окантовочку вокруг матрицы из единичек :))
Время если чо не поменялось :-р
>> я же не оптимизирую
я тоже. если по-уму, то для начала обсчёта следующей строки (ну если мы перебираем по горизонтали например) достаточно чтобы предыдущая строка ушла вперёд всего на 2 столбца и можно начинать обсчитывать.
Таким образом программа может распаралеливаться до нескольких тысяч трэдов.
Ну а дальше грузим этой работой ГПУ и получаем результат. Вот тут от железа будет ОЧЕНЬ зависеть. С моей видюхой с пассивным охлаждением и 64 ядрами задача будет решаться менее чем за секунду, а на вашем компе, мгновенно. (конечно надо смотреть чё там в функции РАНД и какая энтропия нам нужна. мож и не стоит так морочиться и запилить чёнить простенькое).
В любом случае есть подход экстенсивный (добавить памяти, купить мощнее) а есть интенсивный (мальца мозгом шевельнуть). Я за второе, хотя я вообще не программер, а теплотехник по образованию и всегда работал по профессии.