Я пытаюсь параллелизовать часть программы на C++ с помощью OpenMP в QtCreator в Linux на VirtualBox. Хост-система имеет процессор 4core. Поскольку мои первоначальные попытки использовать opengram pragmas, похоже, не работали (код с openmp занял почти то же самое время, что и без), я вернулся к вики OpenMP и попытался запустить этот простой пример.OpenMP в Qt на VirtualBox использует только один поток
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 QMAKE_LFLAGS + = -fopenmp в файле .pro. Это происходит потому, что я запускаю его с виртуальной машины? Как мне сделать многопоточную работу? Я был бы очень признателен за любые предложения/указатели. Спасибо.
Компиляция этого кода с помощью только 'g ++ -fopenmp omp.cpp &&./A.out' выводит 4x Hello World для меня, так что что-то подозрительное происходит с вашим виртуальным боксом, возможно, попробуйте qemu? – OneOfOne
Многопоточность отлично работает на виртуальных машинах, даже если они только эмулируют единое ядро процессора. Вероятно, опция '-fopenmp' не попадает в параметры компилятора или вы используете Clang, который не поддерживает OpenMP (пока). –