gpt4 book ai didi

c++ - 打破 OpenMP 部分和任务

转载 作者:行者123 更新时间:2023-11-30 04:49:16 25 4
gpt4 key购买 nike

我希望能够运行两个永远运行的线程(一个线程计算一些复杂的计算,另一个计算时间并产生超时)。一旦超时线程达到要求的时间,我想停止这两个线程。我已经尝试过几种方法:首先将第一个线程作为任务运行并退出线程,然后使用部分(通过尝试运行#pragma omp cancel sections)。这是我目前所拥有的:

    #pragma omp parallel num_threads(8) shared(break_out)
{
while (!break_out){
#pragma omp sections
{
#pragma omp section
complex_calc();

#pragma omp section
{
//Timekeeping
while(true){
current_time = std::chrono::high_resolution_clock::now();
wall_clock = std::chrono::duration_cast<std::chrono::duration<double>> (current_time - start_time);
if (wall_clock.count() > 0.99 * TIME_LIMIT){
break_out = true;
#pragma omp cancel sections
break;
}
}
}
}
}
}
**Point X**

当超时发生时,代码能够跳出第二部分,但第一部分仍然运行。有什么办法可以在程序中回到'Point X'吗?

最佳答案

第二个sections 构造中的cancel 构造将正确终止第二个sections 构造。但它不会影响第一个,除非您在第一个 sections 构造中也添加一个 cancellation point 构造。

OpenMP 总是需要 cancel 结构的组合来触发 OpenMP 区域的取消和其他线程/任务中的 cancellation point 结构来使用react并取消它们地区。

关于c++ - 打破 OpenMP 部分和任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55482452/

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