我想在VirtualBox上的Linux中的QtCreator中使用OpenMP並行化一部分C++程序。主機系統有4個cpu。由於我最初嘗試使用openmp pragma似乎不起作用(使用openmp的代碼幾乎與沒有使用openmp的代碼幾乎相同),我回到了OpenMP wiki並試圖運行這個簡單的示例。VirtualBox中的Qt中的OpenMP只使用一個線程
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
所以看起來就像沒有並行發生一樣畢竟。我在.pro文件中設置了QMAKE_CXXFLAGS + = -fopenmp QMAKE_LFLAGS + = -fopenmp。發生這種情況是因爲我正在從虛擬機運行它嗎?我如何使多線程在這裏工作?我真的很感激任何建議/指針。謝謝。
用'g ++ -fopenmp omp.cpp &&。/ a.out'編譯代碼對我來說輸出4個Hello World,所以你的virtualbox有可疑的事情發生,也許試試qemu? – OneOfOne
即使虛擬機只模擬單個CPU內核,多線程也可以在虛擬機中正常工作。可能是'-fopenmp'選項沒有使它成爲編譯器選項,或者您正在使用不支持OpenMP(尚)的Clang。 –