Member
Статус: Не в сети Регистрация: 06.09.2005 Откуда: Москва
DenisMak писал(а):
Bozz Bishop не понятно почему ибо использоваться будет всего 15*sizeof(double) байт памяти постоянно - грубо говоря не выходя из кеша первого уровня любого процессора pos = (pos + jump)%M; при M=15 никогда не даст результат больше 14
Да, описался, должно быть %N, сейчас исправлю Добавлено спустя 34 секунды
Код:
#include <cstdio> #include <vector> #include <ctime> #include <cmath> using namespace std; int main () { unsigned N = 13107200, M = 15, jump = 625681; unsigned pos = 0; vector<double> a; double *pA, x=2.0; clock_t start, finish; a.resize (N); pA = &a[0]; start = clock(); for (unsigned i = 0; i < M; i++) { pos = 0; for (unsigned j = 0; j < N; j++) { pA[pos] = x; x += sqrt (x); pos = (pos + jump)%N; } } finish = clock (); printf ("%d, seconds: %d\n", finish-start, (finish - start) / CLOCKS_PER_SEC); return 0; }
Добавлено спустя 2 часа, 36 минут, 37 секунд у меня, кстати, эта программа не грузит процессор на 100%, примерно только на 90.
откомпилирована с ключами -funroll-all-loops -ffast-math -mtune=athlon-xp (g++ -4.1)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения