Как использовать 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 может работать без ошибок, если их переменные независимы и дают достоверные результаты.

Другие вопросы по тегам