Как использовать OpenMP в программе C++
Я хотел бы использовать OpenMP для распараллеливания некоторых из моих функций в программе на C++.
Я использую Ubuntu 12.04, на Intel i5 с 4 ядрами. Но после выполнения определенных шагов я не вижу улучшения в производительности. Я мог видеть, что используется только одно ядро процессора. (системный монитор в Ubuntu)
Что я сделал..
добавленной #include <omp.h>
добавил эти две строки перед циклом
omp_set_num_threads(4);
#pragma omp parallel for
в CMakeLists.txt,
я добавил target_link_libraries (executable -fopenmp -lgomp ${PCL_LIBRARIES} )
Можете ли вы помочь мне в получении параллелизма?
Спасибо!
1 ответ
Как уже упоминалось @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 ***
возникало, потому что в цикле я пытался использовать push_back()
функция для загрузки стека и индекс зависел от индекса цикла for. Я думаю, что это было причиной проблемы.
Я узнал еще одну вещь, которую можно использовать для циклов, и OMP может работать без ошибок, если их переменные независимы и дают достоверные результаты.