レイ トレーサー (学校のプロジェクト) を書いています。レンダリングされたイメージを水平方向のチャンク (y ライン) に分割し、各スレッドに独自のチャンクをレンダリングさせることで、マルチスレッドを実装しました。
2 つのスレッドで実行した場合 (なしまたは 1 つだけの場合)、パフォーマンスの向上は実行時間に関して約 20 ~ 30% にすぎません。
なぜもっと大幅な速度の向上が見られないのか、私は混乱しています。私はミューテックス/ロックを使用していません。FPUユニットが競合している可能性はありますか?
C を使用し、gcc および pthreads でコンパイルされ、osx および ubuntu (VM 内) でテストされ、Intel i5 cpu。また、私の計算はすべて double で行われます。私のホストOSはosxで、「バランスのとれた」省電力モードで実行されているのだろうか-vsハイパフォーマンス(Windowsで選択できるように)。
残念ながら、多くのコードを投稿することはできません。これは、学校の学問的誠実性のポリシーに反します。
これは、私がスレッドを起動する方法です:
//set up threads
int chunk_size = y_lines/NUM_THREADS;
for (int i=0; i < NUM_THREADS; i++) {
// setup thread_config[i]
pthread_create(&threads[i], NULL, &thread_do_render, (void *) &thread_config[i]);
}
/* start threads and wait for them to finish */
for (int i=0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}