Как использовать OpenMP в программе C ++

0

Я хотел бы использовать 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} )

Не могли бы вы помочь мне в параллелизме?

Спасибо!

  • 0
    Не каждый цикл может быть распараллелен. Покажи это.
  • 0
    Извините, я не понял, что вы имели в виду. Я ни разу не увидел, что в системном мониторе запущено несколько потоков. Мне интересно, есть какая-то конфигурация, которую я мог бы упустить.
Показать ещё 2 комментария
Теги:
multithreading
openmp

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню