c - 如何使线程按顺序运行?(OpenMP)
问题描述
已经了解并行编程的工作原理,但是有没有办法可以打印线程的顺序?
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
#pragma omp parallel
{
printf("Hello World... from thread = %d\n",
omp_get_thread_num());
}
}
我的输出:
Hello World... from thread = 2
Hello World... from thread = 3
Hello World... from thread = 0
Hello World... from thread = 1
目标输出:
Hello World... from thread = 0
Hello World... from thread = 1
Hello World... from thread = 2
Hello World... from thread = 3
解决方案
正如评论中所建议的,您可以使用ordered
关键字按顺序获取输出。在实践中,您希望进行大量独立计算,然后仅按顺序打印(或复制或其他)结果。
不是这方面的专家,但这是我的做法(适用于 gcc 和 msvc):
#include <stdio.h>
#include <omp.h>
int blah(int argc, char* argv[]) {
// this may or may not be necessary..
omp_set_num_threads(omp_get_max_threads());
int i;
#pragma omp parallel
#pragma omp for ordered schedule(static, 1)
for(i = 0; i < omp_get_num_threads(); i++)
{
// This is where the heavy computations go
#pragma omp ordered
{
// synchronized and in order; keep this short
printf("Hello World... from thread = %d\n", omp_get_thread_num());
}
}
return 0;
}
不明白为什么你的问题被否决了。按顺序排列结果是一个有效的用例恕我直言。
推荐阅读
- angular - 将 Angular EventEmitter.emit() 作为回调传递
- python - 如何在特殊情况下省略自定义日志记录处理程序?
- visual-studio-code - 为在 WSL 中运行的 VS Code 设置不同的配色方案
- sql - 如何找到一个表与不同表的关系?
- javascript - javascript 的 getElementsByClassName 长度不能以角度工作
- flutter - 如何从集成测试中选择颤振时间选择器中的时间
- python-3.x - 在测试运行期间从 Chrome 捕获日志。Python
- node.js - 即使我安装了 cors 并且设置了标头,也会出现 CORS 错误
- php - 谷歌“安全浏览查找 API”返回空数组
- angular - 错误 TS2339:“任何”类型上不存在属性“flatMap”