желающих написать свой собственный параллельный код или, по крайней мере, попробовать, быстрее ли распараллелить часть моего кода вручную, чем когда Eigen использует свои собственные внутренние параллельные процедуры.
Я следовал этому руководству здесь и добавил вверху заголовочного файла следующую директиву (но также попробовал ее вверху main):
#define EIGEN_DONT_PARALLELIZE
Тем не менее, когда я прошу Эйгена напечатать количество потоков, которые он использовал, через Eigen::nbThreads
я последовательно получаю два. Я попытался вызвать проблему с помощью метода initParallel()
, который предназначен для пользовательских параллельных областей, но безрезультатно. Может быть, мне нужно разместить токен препроцессора где-нибудь еще? Я использую gcc 8.1, CLion с CMake. Я также пытался вызвать проблему с помощью setNbThreads(0).
Чтобы в конечном итоге включить OpenMP в свой собственный код, я следовал за включением OpenMP, как рекомендовано здесь , а также добавил это в мой CMakeLists.txt
: target_link_libraries(OpenMP::OpenMP_CXX).
Или, может быть, Эйген просто сообщает мне, сколько ядер в принципе доступно, что не похоже на то, что написано в документации.
РЕДАКТИРОВАТЬ: не уверен, если это важно, но CLion (редактор) жалуется MACRO EIGEN_DONT_PARALLELIZE
никогда не используется. Я посмотрел в Eigen / Core и увидел, что он используется только в форме условия для оператора if, поэтому я проигнорировал это предупреждение редактора, но, может быть, я не должен был?
Теперь я воспроизвел это поведение на гораздо меньшем примере.
Большое спасибо!