私は大きな配列を持っており、それを繰り返して作業を行うのに約50ミリ秒かかります。私が開発中のアプリは、tegra3 またはその他の高速 CPU で実行されます。pthread を使用して作業を 4 つのスレッドに分割しました。配列の幅を取得し、それをシステムで見つかった合計コア数で割って、各スレッドで配列の 4 分の 1 を反復処理しています。すべて問題ありませんが、仕事をするのに80msが必要です。マルチスレッドのアプローチがシングルスレッドよりも遅い理由は何ですか? CPU カウントを 1 に下げると、すべてが 50ms に戻ります。
for(int y = 0; y<height;y++)
{
for(int x = 0; x<width; x++)
{
int index = (y*width)+x;
int sourceIndex = source->getIndex(vertex_points[index].position[0]/ww, vertex_points[index].position[1]/hh);
vertex_points[index].position[0]+=source->x[sourceIndex]*ww;
vertex_points[index].position[1]+=source->y[sourceIndex]*hh;
}
};
上記のコードの最初の for ループを、CPU 数に基づいて 4 つの部分に分割しています。vertex_points は、位置を持つベクトルです。
だからそれは
for(int y=start;y<end;y++)
開始/終了はスレッドごとに異なります