这是我的主要猎人的一部分。我想在条件满足并且 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*}
}
我试图通过循环来实现这一点,但我无法弄清楚。请问有人可以帮我修改吗?
这是我的主要猎人的一部分。我想在条件满足并且 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*}
}
我试图通过循环来实现这一点,但我无法弄清楚。请问有人可以帮我修改吗?
我相信唯一的方法是添加一个失败变量,但它不会给你任何性能提升;
#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