最初の投稿!
メジャー編集。
gccと-fopenmpを使用してコンパイルされた、ドット積を計算するためのこのプログラムがあります。問題は、作成するように指示した数のスレッドが作成されていないことです。あるコンピューターでは常に2つのスレッドを生成し、別のコンピューターでは4つのスレッドを生成します。これらの番号はどちらもそれらに与えられた番号ではありません。私は(静的、チャンクサイズ)スケジューリングを使用しています。これは、チャンクサイズを変更することで、作成するスレッドの数を選択できる間接的な方法です。すべてのコンピューターが同じ実行可能ファイルを使用しているため、ランタイムに私の指示をオーバーライドする何かがあるように感じます。また、プログラムに合計負荷に等しいチャンクサイズを指定すると、1つのスレッドが使用されますが、それでも以前と同じ数のスレッドが生成されることに気付きました。私は何が間違っているのですか?
#pragma omp parallel shared(vector1, vector2, loadsize, vectorsize, final_sum) private(i, threadsum, threadid)
{
threadsum = 0;
threadid = omp_get_thread_num();
#pragma omp for schedule(static, loadsize)
for (i = 0; i < vectorsize; i++){
threadsum += vector1[i] * vector2[i];}
printf("thread %d reached up to index %d with a sum of %d\n", threadid, (i-1), threadsum);
#pragma omp critical
final_sum += threadsum;
}
printf("final sum: %d", final_sum);
ありがとう、
ザック