打开mp节并刷新
OpenMP sections and flush
使用我的openMP部分中的flush命令,我能够避免访问违反错误。各节中使用的函数共享几个相同的参数。下面是伪代码:
int flag = 0;
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{
function1(...);
#pragma omp flush
flag = 1;
#pragma omp flush(flag)
}
#pragma omp section
{
#pragma omp flush(flag)
while (!flag) {
#pragma omp flush(flag)
}
#pragma omp flush
function2(...);
}
}
它工作得很好,但当我试图添加更多的部分,我有一个访问违反错误在我的程序运行。基本上,我将第三部分添加为第二部分,并将num_threads设置为3。
int flag = 0;
#pragma omp parallel sections num_threads(3)
{
#pragma omp section
{
function1(...);
#pragma omp flush
flag = 1;
#pragma omp flush(flag)
}
#pragma omp section
{
#pragma omp flush(flag)
while (!flag) {
#pragma omp flush(flag)
}
#pragma omp flush
function2(...);
}
#pragma omp section
{
#pragma omp flush(flag)
while (!flag) {
#pragma omp flush(flag)
}
#pragma omp flush
function3(...);
}
}
我已经找到解决问题的办法了。下面是正确的代码。
int flag = 0;
#pragma omp parallel sections num_threads(3)
{
#pragma omp section
{
function1(...);
#pragma omp flush
flag++;
#pragma omp flush(flag)
}
#pragma omp section
{
#pragma omp flush(flag)
while (flag != 1) {
#pragma omp flush(flag)
}
#pragma omp flush
function2(...);
}
#pragma omp section
{
#pragma omp flush(flag)
while (flag != 2) {
#pragma omp flush(flag)
}
#pragma omp flush
function3(...);
}
}
相关文章:
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- 如何在 Windows 中立即刷新文件夹图标
- 刷新来自Qpid质子连接的所有消息而不是等待?
- 如何让 cout 缓冲区在 ubuntu 上刷新
- 打开 MP 三用于减少的循环
- 显示DHT1306温度数据时如何正确刷新Adafruit 11 OLED?
- 混合开放MP/MPI代码中的多线程发送/接收时出错
- 为什么PNG图像的stdout有时会在printf中刷新图像的一半
- QML:收到C 信号从C 传递时刷新问题
- 托管语言是否锁定本机库的刷新和重新加载变量?
- 记录器何时应刷新
- 在 Linux 上编译一个 c++ 应用程序,并在 TI TIVA TM4C123GH6PM上刷新它
- 具有C++绑定和开放 MP 阻塞问题的零 MQ.为什么
- 如何刷新CPU缓存中的地址范围?
- 有没有办法刷新与程序相关的整个CPU缓存
- 打开mp节并刷新