gpt4 book ai didi

c - 如何打破 openmp for 循环?

转载 作者:太空狗 更新时间:2023-10-29 17:26:01 25 4
gpt4 key购买 nike

我有一个非常 ᴄᴘᴜ 密集型 (5000 万次调用和超过 1000 亿次循环阶段) for 循环,例如:

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的值似乎没有变化,所以变成了死循环。

最佳答案

这有帮助吗?

int abort = 0;
#pragma omp parallel for ordered shared(string, abort)
for(int i=0;i<*string;i++)
{
#pragma omp flush(abort)
if(!abort)
{
if(!check_some_stuff(string+i))
{
#pragma omp flush(abort)
if(!abort) do_some_stuff(i,string-2);
if(!string) abort = 1;
#pragma omp flush(abort)
if(!abort) do_yet_other_stuff(*string);
}
}
}

关于c - 如何打破 openmp for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34453935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com