Как заставить N выполнений одной и той же программы работать на разных ядрах на 100% в Linux / macOS? - PullRequest
0 голосов
/ 08 ноября 2018

ВОПРОС

Как я могу запустить разные экземпляры одной и той же программы в разных ядрах на 100%?

КОНТЕКСТ

Я использую код C ++ 11 в iMac Pro (2017) с ОС High Sierra 10.13.6. Соответствующий исполняемый файл называется bayesian_estima.

Когда я запускаю один экземпляр этой программы, одно из ядер выполняет эту задачу на 100%, как вы можете видеть здесь:

enter image description here

Если я запускаю больше экземпляров, CPU% каждого из них падает. Но большинство ядер остаются без дела! Почему они не используются? Посмотрите, например, что происходит, когда запущены 3 процесса bayesian_estima:

enter image description here

Или когда я выполню 7:

enter image description here

В идеале на последнем рисунке мне бы хотелось, чтобы 7 ядер были полностью заняты, каждое из них выполняло один процесс 'bayesian_esvaluation'.

РЕДАКТИРОВАТЬ 1

Я перехожу к дополнительной информации, которая может помочь выявить проблему. Я скомпилировал свой код следующим образом:

g++ -std=c++11 -Wall -g bayesian_estimation.cpp -o bayesian_estimation -O2 -larmadillo

И все библиотеки и пакеты, которые я использовал, следующие:

#include <iostream>     // Standard input and output functions.
#include <iomanip>      // Manipulate stream input and output functions.
#include <armadillo>    // Load Armadillo library.
#include <sys/stat.h>   // To obtain information from files (e.g., S_ISDIR).
#include <dirent.h>     // Format of directory entries.
#include <vector>       // To deal with vectors.

1 Ответ

0 голосов
/ 08 ноября 2018

Я определил происхождение узкого места, которое @bolov упоминает в комментариях. Он возникает из-за использования arma_rng::set_seed_random() в коде для генерации случайных чисел с библиотекой Armadillo. Если я удалю эту строку кода, проблема исчезнет.

Вопрос, углубляющийся в эту проблему и содержащий воспроизводимый пример, выложен здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...