我知道您不能在OpenMP for loop上设置中断,但是您可以建议一个从嵌套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
}
}
}
}
}
}
答案 0 :(得分:1)
您的代码有效,但请注意以下几点:
dict_len
必须等于所有OpenMP工作者。首选使用firstprivate
或shared
而不是private
来代替此变量。OMP_CANCELLATION
环境变量设置为true。