我有一个非常ᴄᴘᴜ密集(50万次调用和超过100亿次循环阶段)的循环,如:
for(int i=0;i<*string;i++){ if(!check_some_stuff(string+i)) { do_some_stuff(i,string-2); if(!string) break; do_yet_other_stuff(string); } }
由于#pragma omp parallel for odered
我认为不能使用break语句,因此我可以将其设置i
为非常大的值.
for(int i=0;i<*string;i++){ if(!check_some_stuff(string+i)) { do_some_stuff(i,string-2); if(!string) i=0x7FFFFFFB; do_yet_other_stuff(string); } }
没有openmp就完美无缺.但是当我添加时
#pragma omp parallel for ordered shared(string) for(int i=0;i<*string;i++){ if(!check_some_stuff(string+i)) { do_some_stuff(i,string-2); #pragma omp critical if(!string) i=0x7FFFFFFB; // it seems the assignment has no effect on the value of i. do_yet_other_stuff(*string); } }
值i
似乎没有改变,所以它变成了一个无限循环.