我知道您无法在 OpenMP for 循环上设置中断,但您能否建议一种可以从嵌套 for 循环中中断的替代方案。 找到某些结果后如何停止所有线程工作?
代码附在此处
#pragma omp parallel default(none) private( dict_len, success)
{
#pragma omp for collapse(5)
for(int i=0; i<dict_len; i++) {
for(int j=0; j<dict_len; j++) {
for(int k=0; k<dict_len; k++) {
for(int l=0; l<dict_len; l++) {
for(int m=0; m<dict_len; m++) {
unsigned char* result = X;
if (success == 1) {
#pragma omp critical
{
printf("%s\n", result);
}
#pragma omp cancel for
}
free(result);
printf("unsuccessful!\n");
#pragma omp cancellation point for
}
}
}
}
}
}
最佳答案
您的代码可以运行,但请注意以下几点:
dict_len
必须等于所有 OpenMP 工作线程。最好使用firstprivate
或shared
而不是private
来代替此变量。- 默认情况下,OpenMP 不会激活取消。您需要将
OMP_CANCELLATION
环境变量设置为 true 来指定它。
关于c - 如何在openmp嵌套for循环中实现break函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219825/