Как отключить распараллеливание в Eigen - PullRequest
0 голосов
/ 06 января 2019

желающих написать свой собственный параллельный код или, по крайней мере, попробовать, быстрее ли распараллелить часть моего кода вручную, чем когда 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, поэтому я проигнорировал это предупреждение редактора, но, может быть, я не должен был?

Теперь я воспроизвел это поведение на гораздо меньшем примере.

Большое спасибо!

...