これは私のプライムハンターの一部です。条件が満たされ、bがfalseに設定された直後に、できるだけ早くomp並列を解除したいと思います。
#pragma omp parallel for
for( long l = 1; l <= n; l++ ) {
if (m % p[l] == 0) {
b = false;
*// Break omp parallel for*}
}
do loopでこれを達成しようとしましたが、理解できませんでした。誰かが私のためにこれを変更できますか?
これは私のプライムハンターの一部です。条件が満たされ、bがfalseに設定された直後に、できるだけ早くomp並列を解除したいと思います。
#pragma omp parallel for
for( long l = 1; l <= n; l++ ) {
if (m % p[l] == 0) {
b = false;
*// Break omp parallel for*}
}
do loopでこれを達成しようとしましたが、理解できませんでした。誰かが私のためにこれを変更できますか?
失敗変数を追加するのが唯一の方法だと思いますが、パフォーマンスを向上させることはできません。
#pragma omp parallel for
for( long l = 1; l <= n; l++ ) {
if (b) {
if (m % p[l] == 0) {
b = false;
}
}
}
ループが本当に長くなる場合は、ループをセグメントに分割する方がよいでしょう。
#pragma omp parallel for
for( long l = 1; l < n / 2; l++ ) {
if (m % p[l] == 0) {
b = false;
}
}
if (b) {
#pragma omp parallel for
for( long l = n / 2; l <= n; l++ ) {
if (m % p[l] == 0) {
b = false;
}
}
}
単にあなたが最善だと思う数にそれを分割してください。
break
手動スレッドを使用する(ただしingを許可する)より複雑な回答については、次の回答を参照してください: https ://stackoverflow.com/a/9813239/1180785