【发布时间】:2015-10-29 20:27:44
【问题描述】:
我正在编写代码,并且正在尝试根据我提供的指南使用更多线程。它说:“并行性是使用 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
...
我试着根据这个改变工作线程的数量..
我一直在查看手册,试图找到解决方案。我发现 schedule 用于定义循环的迭代如何在线程之间划分。因此,当循环迭代被分成 chunks 时使用“动态”,其大小由我决定。由于在这行代码中,大小设置为“1”,我尝试将其更改为更大的数字,但结果没有改变,仍然只使用了 1 个线程。
所以我尝试将其设置为“静态”,但仍然没有改善。
我尝试了“AUTO”选项,这样调度会话将由编译器决定......仍然没有解决方案。
我还发现 private(r) 意味着变量 r 对每个线程都是私有的并且不共享,但实际上并不会改变最终结果。
编译器是 cl.exe。我使用的是 Visual Studio 2013。 有什么办法增加线程数?
【问题讨论】:
-
是的,如何在 Visual Studio 中启用 OpenMP。在命令行中添加
/openmp或者点击项目配置中的开关。
标签: c++ multithreading openmp pragma