Я хотел бы использовать OpenMP для параллелизации некоторых моих функций в программе c++.
Я использую ubuntu 12.04, на Intel i5 с 4 ядрами. Но после следующих шагов я не вижу улучшения в производительности. Я мог видеть, что используется только одно ядро ЦП. (системный монитор в ubuntu)
Что я сделал..
добавлено #include <omp.h>
добавили эти две строки перед циклом for
omp_set_num_threads(4);
#pragma omp parallel for
в CMakeLists.txt,
Я добавил target_link_libraries (executable -fopenmp -lgomp ${PCL_LIBRARIES} )
Не могли бы вы помочь мне в параллелизме?
Спасибо!
Как упоминалось @Mikael Persson, я удалил -fopenmp из целевых библиотек ссылок и добавил find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif()
Это работает.
Ошибка r *** double free or corruption (!prev): 0x00007ff424006b20 ***
потому что в цикле for я пытался использовать push_back()
для загрузки стека, и индекс зависел от индекса for loop, Я думаю, что это и послужило причиной проблемы.
Я узнал еще одну вещь, которая может быть вложенной для циклов, и OMP может работать без ошибок, если их переменные независимы и дают достоверные результаты