OpenMP #pragma,只有一个线程在我的代码上工作
OpenMP #pragma, only one thread working on my code
我正在处理代码,我正在尝试根据提供的指南使用更多线程。它说:"并行性是使用 OpenMP #pragma 实现的,该将映像行动态分配给不同的线程,每个处理器或内核都有一个线程。这是在代码中:
#pragma omp parallel for schedule(dynamic, 1) // OpenMP
for (int y = 0; y<height; y++){ // Loop over image rows
fprintf(stderr, "rRendering (%d spp) %5.2f%%", samps, 100.*y / (height - 1));
for (unsigned short x = 0, rng[3] = { 0, 0, y*y*y }; x<width; x++) { // Loop cols
...
我试图根据这个改变工作线程的数量。
我一直在看手册,试图找到解决方案。我发现调度用于定义循环迭代如何在线程之间分配。因此,当循环迭代被分成大小由我决定的块时,使用"动态"。由于在这一行代码中,大小设置为"1",我试图将其更改为更大的数字,但结果没有改变,仍然只使用了 1 个线程。
所以我尝试将其设置为"静态",但仍然没有改进。
我尝试了"AUTO"选项,这样调度会话将由编译器决定......仍然没有解决方案。
我还发现 private(r( 意味着变量 r 对每个线程都是私有的并且不共享,但这实际上不会改变最终结果。
编译器是 cl.exe..我正在使用Visual Studio 2013。有什么方法可以增加线程数吗?
在 OpenMP 中,有几种方法可以定义要在并行区域中使用的线程数:
- 最主要的是环境变量
OMP_NUM_THREADS
。若要使用它,请在运行它之前在代码的环境中设置它。 - 该函数
omp_set_num_threads()
.若要使用它,请在到达并行区域之前调用它。 parallel
编译器指令的num_threads()
子句。
这些的相对优先级由标准定义,几乎归结为num_threads()
优先于omp_set_num_threads()
优先于OMP_NUM_THREADS
。如果这三者中均未使用,则行为是实现定义的。例如,这可以是只启动一个线程,或者启动与机器上的"核心"一样多的线程,或者其他什么......
也就是说,您确定在编译器级别启用了 OpenMP 支持吗?
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 0-1背包代码中的错误.我的代码中有什么错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 我的代码运行良好,但在游戏循环中中断
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 我的代码中的意外价值以及我如何修复它
- 为什么 rand 不在我的代码中生成随机数?
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 无法找出我的代码中的内存泄漏
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试创建一个菜单,但我的代码一直在循环