1

グローバル配列を乱数で埋めるための関数が 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% の速度アップを測定できます。これはランダム関数と関係がありますか?それを回避する方法はありますか?

4

1 に答える 1