Одним замечательным летним вечером, я в пылу спора имел глупость заметить, что можно написать быстро работающее решето Эратосфена на CUDA. N = 1000000000 (девять нулей) как цель. And the legend has begun…
Не буду опускаться в подробности алгоритма, о нем можно почитать, например, тут и сразу покажу код, которым я располагал на тот момент:
Однопоточный немного оптимизированный код, который работает на 14-15 секунд на Core i3 330M и затрачивает большое количество памяти. С него и начнем.
Не буду опускаться в подробности алгоритма, о нем можно почитать, например, тут и сразу покажу код, которым я располагал на тот момент:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double number = 1000000000;
bool* a = new bool[int(number/2)];
int i,j,result;
for (i=0; i<number/2; i++)
a[i] = true;
for (i=3; i<=floor(sqrt(number)); i+=2)
if (a[i/2])
for (j=i*i; j<=number; j+=i*2)
a[j/2]=false;
result = 0;
for (i=0; i<number/2; i++)
if (a[i]) result++;
cout << result << endl;
delete[] a;
return 0;
}
Однопоточный немного оптимизированный код, который работает на 14-15 секунд на Core i3 330M и затрачивает большое количество памяти. С него и начнем.