そこで、マンデルブロ画像を生成するプログラムを書きました。次に、指定された数のスレッドを使用して高速化する方法で記述することにしました。これは私が思いついたものです:
void mandelbrot_all(std::vector<std::vector<int>>& pixels, int X, int Y, int threadCount) {
using namespace std;
vector<thread> threads;
int numThreads = threadCount;
for(int i=0; i<numThreads; i++) {
threads.push_back(thread (mandelbrot_range, std::ref(pixels), i*X/numThreads, 0, X*(i+1)/numThreads, Y, X));
}
for(int i=0; i<numThreads; i++) {
threads[i].join();
}
}
意図は、処理をチャンクに分割し、それぞれを個別に処理することでした。プログラムを実行すると、その実行のためにプログラムで使用されるスレッドの数として使用される数値を引数として取ります。残念ながら、スレッドの数に関係なく同様の時間が得られます。
私が見逃しているC ++でのスレッド化について何かありますか? スレッドを同時に機能させるために、何かまたは何らかのボイラープレートを追加する必要がありますか? それとも、スレッドを作成する方法がばかげているだけですか?
このコードをラズベリーパイとクアッドコアラップトップで実行してみましたが、同じ結果が得られました。
どんな助けでも大歓迎です。