Выполнение программы C ++ на многопроцессорной машине - PullRequest
3 голосов
/ 20 октября 2011

Я разработал программу на C ++ для исследовательских целей.На это уходит несколько дней.

Теперь я выполняю его на нашем лабораторном 8-ядерном сервере, чтобы быстро получить результаты, но я вижу, что машина назначает только один процессор моей программе, и он остается на 13% использования процессора (даже еслиустановить приоритет процесса на высоком уровне и сродство для 8 ядер).

(Это простая объектно-ориентированная программа без параллелизма или многопоточности)

Как получить истинную выгоду от мощного серверамашина?Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 20 октября 2011

Разделение вашего кода на куски, которые вы можете выполнять параллельно.

Вам нужно прочитать о параллелизме данных и параллелизме задачи .

Затем вы можете использовать OpenMP или MPI , чтобы разбить вашу программу.

3 голосов
/ 20 октября 2011

(Это простая объектно-ориентированная программа без какого-либо параллелизма или многопоточность)

Как я могу получить истинную выгоду от мощного серверного компьютера?

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

  • C ++ 0x темы
  • Повышение темы
  • OpenMP

Я лично считаю OpenMP игрушкой. Вы, вероятно, должны пойти с одним из двух других.

1 голос
/ 20 октября 2011

Вы должны явно использовать многопараллельность, разбивая свой код на несколько задач, которые могут выполняться независимо, а затем либо напрямую использовать потоковые примитивы, либо инфраструктуру параллелизации более высокого уровня, такую ​​как OpenMP .

0 голосов
/ 20 октября 2011

Если вы не хотите, чтобы ваша программа использовала многопоточные библиотеки или методы, вы можете попытаться разбить свою работу на несколько независимых блоков.Затем запустите несколько копий вашей программы ... каждая из которых будет назначена отдельному чанку, указанному с помощью получения различных параметров командной строки.

Что касается просто общего улучшения производительности программы ... существуют инструменты профилирования, которые могут помочь вам ускорить или найти узкие места в использовании памяти, ввод / вывод, ЦП:

https://stackoverflow.com/questions/tagged/c%2b%2b%20profiling

Не поможет разделить вашу работу по ядрам, но если вы сможете получить ускорение в 8 раз в алгоритме, который может помочь больше, чем многопоточность на 8 ядрах.Просто что-то еще, чтобы рассмотреть.

...