0
配列依存性を持つOpenACCコードを書いています。内部ループの各反復は配列の同じ位置を更新できます。 OpenACCでOpenACCで配列結果を結合する
#pragma omp parallel private(i)
{
long unsigned int digit_local[d+11];
for(i=0;i<d+11;i++)
digit_local[i] = 0;
#pragma omp for
for (i = 1; i <= n; ++i) {
long unsigned int remainder = 1;
for (long unsigned int digit = 0; digit < d + 11 && remainder; ++digit) {
long unsigned int div = remainder/i;
long unsigned int mod = remainder % i;
digit_local[digit] += div;
remainder = mod * 10;
}
}
#pragma omp critical
for(long unsigned int digit = 0; digit < d+11; ++digit)
digits[digit] += digit_local[digit];
}
アレイとキーワードプライベート作品が、私はグローバルな配列を持つ民間の配列を結合する方法では考えている次のよう
long unsigned int digits[d + 11];
for (long unsigned int digit = 0; digit < d + 11; ++digit)
digits[digit] = 0;
for (long unsigned int i = 1; i <= n; ++i) {
long unsigned int remainder = 1;
for (long unsigned int digit = 0; digit < d + 11 && remainder; ++digit) {
long unsigned int div = remainder/i;
long unsigned int mod = remainder % i;
digits[digit] += div; // here
remainder = mod * 10;
}
}
OpenMPのバージョンが書いていた。ここではいくつかのコードです。
ありがとうございました。
こんにちはマット、あなたの答えをありがとう。このディレクティブを試してみましたが、パフォーマンスは向上していません(同じ位置にいくつかのアップデートがあります)。 –
アトミックが高価なので、スピードアップが見られないことは驚くことではありません。 –
お返事ありがとうございます! –