【发布时间】:2015-09-25 17:20:07
【问题描述】:
我正在尝试在 VirtualBox 上的 Linux 中的 QtCreator 中使用 OpenMP 并行化 C++ 程序的一部分。主机系统有 4 核 cpu。由于我最初尝试使用 openmp pragma 似乎没有奏效(使用 openmp 的代码与没有使用 openmp 的代码几乎相同),我回到 OpenMP wiki 并尝试运行这个简单的示例。
int main(void)
{
#pragma omp parallel
printf("Hello, world.\n");
return 0;
}
输出只是
'Hello, world'.
我也试过运行这段代码
int main () {
int thread_number;
#pragma omp parallel private(thread_number)
{
#pragma omp for schedule(static) nowait
for (int i = 0; i < 50; i++) {
thread_number = omp_get_thread_num();
cout << "Thread " << thread_number << " says " << i << endl;
}
}
return 0;
}
输出是:
Thread 0 says 0
Thread 0 says 1
Thread 0 says 2
.
.
.
.
Thread 0 says 49
所以看起来毕竟没有并行化发生。我已经设置了 QMAKE_CXXFLAGS+= -fopenmp .pro 文件中的 QMAKE_LFLAGS += -fopenmp。发生这种情况是因为我是从虚拟机运行它吗?如何在这里使多线程工作?我真的很感激任何建议/指针。谢谢你。
【问题讨论】:
-
只用
g++ -fopenmp omp.cpp && ./a.out编译该代码为我输出 4x Hello World,所以你的 virtualbox 出了问题,也许试试 qemu? -
多线程在虚拟机中运行良好,即使它们只模拟单个 CPU 内核。可能是
-fopenmp选项没有进入编译器选项,或者您正在使用不支持 OpenMP(尚)的 Clang。
标签: c++ multithreading qt openmp