gpt4 book ai didi

c++ - Qt on VirtualBox 中的 OpenMP 仅使用一个线程

转载 作者:太空狗 更新时间:2023-10-29 23:04:57 27 4
gpt4 key购买 nike

我正在尝试在 VirtualBox 上的 Linux 中的 QtCreator 中使用 OpenMP 并行化部分 C++ 程序。主机系统有4core cpu。由于我最初尝试使用 openmp pragmas 似乎没有奏效(使用 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。发生这种情况是因为我从虚拟机运行它吗?我如何在这里使多线程工作?我真的很感激任何建议/指示。谢谢你。

最佳答案

您的问题是 VirtualBox 始终默认为具有一个内核的机器。转到设置/系统/处理器并将 CPU 的数量增加到硬件线程的数量(在您的情况下为 4 个,如果您有超线程则为 8 个)。如果你有超线程,VirtualBox 会警告你你选择的 CPU 多于物理 CPU。忽略警告。

我将 CPU 设置为 8 个。当我在 Windows 上的 GCC 中使用 OpenMP 时,我得到八个线程。

编辑:根据VirtualBox's manaual您应该将线程数设置为物理内核数,而不是超线程数。

You should not, however, configure virtual machines to use more CPU cores than you have available physically (real cores, no hyperthreads).

关于c++ - Qt on VirtualBox 中的 OpenMP 仅使用一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com