グローバル配列を乱数で埋めるための関数が 2 つあります。シリアル バージョンと、ラムバ式と TBB を使用したパラレル バージョンです。
void get_data(void)
{
int j = 0;
srand((unsigned) time(NULL));
cout << "Generating random numbers ...\n";
for (j = 0; j < DATASIZE; j++)
data[j] = (rand() % range) + range_min ;
}
void parallel_get_data(void)
{
int j = 0;
srand((unsigned) time(NULL));
parallel_for(0, DATASIZE, 1, [=](int i)
{ data[i] = (rand() % range) + range_min ; });
}
プログラムは Intel Xeon クラスターを実行していますが、残念ながら、並列バージョンははるかに低速です。配列を乱数で埋める代わりに、単純に実行するとdata[i] *= 2
、最大 50% の速度アップを測定できます。これはランダム関数と関係がありますか?それを回避する方法はありますか?