【发布时间】:2019-10-18 19:51:52
【问题描述】:
我正在开发一个程序,该程序使用多个线程计算一定数量的素数。现在我遇到了在上述素数之后退出线程的问题。
我试过#pragma omp cancel for,但我不能在有序子句中使用它。还有另一种“打破”循环的方法吗?
void get_primes(prime_type start, prime_type end) {
#pragma omp parallel for ordered schedule(dynamic) shared(prime_counter)
for (candidate = start; candidate <= end; candidate += 2) {
if (is_prime(candidate)) {
#pragma omp ordered
{
primes[prime_counter] = candidate;
prime_counter++;
if (prime_counter >= max_primes) {
#pragma omp cancel for
}
#pragma omp cancellation point for
}
}
}
}
当我找到所需数量的素数时,我想立即“打破”循环,如果我没记错的话,必须在有序子句内完成。
【问题讨论】:
-
for循环中可以有两个条件。candidate <= end && prime_counter < max_primes; -
@WeatherVane 不,这不是
omp for的有效循环形式。
标签: c openmp cancellation