これは私のコードです:
double res1[NNN];
#pragma omp parallel for collapse(3) schedule(dynamic)
for (int i=0; i<NNN; i++)
{
for (int j=0;j<NNN;j++)
{
for (int k=0;k<NNN;k++)
{
res1[i] = log(fabs(i*j*k));
}
}
}
std::cout<< res1[10] << std::endl;
私が使用する場合collapse(3)
、それは約50秒かかります。collapse(3)
たった6〜7秒なしで。「折りたたみ」を使用しない場合よりも「折りたたみ」を使用した場合の方がパフォーマンスが向上することを期待していたため、この動作には非常に戸惑っています。
私は何かが足りないのですか?
私はいくつかの実験を行い、さまざまな構成で遊んだ:
(NNN = 2500および24コア)
schedule(STATIC)
&&collapse(3)
->〜54秒schedule(STATIC)
&&collapse(2)
->〜8秒schedule(STATIC)
&&collapse(1)
->〜8秒
スケジュールも試してみましDYNAMIC
たが、かなりの時間(数分)かかります。
私の元の問題では、4つのDIM「for-loops」(4D配列)があります:51x23x51x23。
OpenMP / MPIを使用して実行時間を最小限に抑えるための最良の方法は何ですか?合計で約300個のCPUコアがあります。これらのコアにアレイを広げるための最良の方法は何ですか?配列の長さは柔軟です(なんらかの方法でCPUの数に合わせることができます)。
助言がありますか?