arr
0 ~ 128Mb-1 の値を持つ SIZE=128Mbの配列があるとします。ここで、次のコードを想定します。
#pragma omp parallel num_threads(NUM_THREADS)
{
int me = omp_get_thread_num();
odds_local[me] = 0;
int count = 0;
#pragma omp for
for (int i = 0; i < SIZE; i++)
if (arr[i]%2 != 0)
count++;
odds_local[me] = count;
}
最後に、 の値を反復処理してodds_local[me]
最終結果を取得するループです。このため、Linux で時間を計測してユーザー時間を報告すると、1 スレッドと 2 スレッドの両方で 0.97 秒が得られます。つまり、スピードアップはまったくありません。
スピードアップを改善するために、このプログラムで改善すべき点はありますか? ありがとう。