У нас есть 12-ядерный MacPro для некоторых вычислений Монте-Карло.В процессорах Intel Xeon включена технология Hyper-Threading (HT), поэтому на самом деле должно быть 24 параллельно работающих процесса, чтобы они могли полностью использоваться.Однако наши вызовы более эффективны для работы на 12x100%, чем на 24x50%, поэтому мы попытались отключить Hyper-Threading через панель Processor
в системных настройках, чтобы повысить производительность.Можно также отключить HT с помощью
hwprefs -v cpu_ht=false
Затем мы запустили несколько тестов, и вот что у нас получилось:
- 12 параллельных задач выполняются в одно и то же время без / безHT к нашему разочарованию.
- 24 параллельных задач теряют 20%, если HT выключен (не -50%, как мы думали)
- Когда HT включен, переключение с 24 на 12 задач снижает эффективность на20% (также удивительно)
- Когда HT выключен, переключение с 24 на 12. ничего не меняет.
Кажется, что Hyper-Threading просто снижает производительность для наших вычислений инет способа избежать этого.Программа, которую мы используем для вызовов, написана на Фортране и скомпилирована с gfortran
.Есть ли способ сделать его более эффективным с этим аппаратным обеспечением?
Обновление: Наши вычисления по методу Монте-Карло (MCC) обычно выполняются поэтапно, чтобы избежать потери данных и из-запо другим причинам (не всегда возможно избежать таких шагов).В нашем случае каждый шаг состоит из множества симуляций с переменной продолжительностью.Поскольку каждый шаг разделен между несколькими параллельными задачами, они также имеют переменную продолжительность.По сути, все более быстрые задачи должны ждать, пока самое медленное не будет сделано.Этот факт заставляет нас делать большие шаги, которые заканчиваются с меньшим отклонением во времени из-за усреднения, поэтому процессоры не тратят свое время на ожидание.Это наша мотивация иметь 12 * 2,66 ГГц вместо 24 * 1,33 ГГц.Если бы было возможно отключить HT, то мы получили бы около + 10% производительности, переключившись с 24 задач с HT на 12 задач без HT.Однако тесты показывают, что мы теряем 20%.Поэтому я пришел к выводу, что расчет неэффективен на 30%.
Для тестов я использовал довольно большие шаги, однако обычно шаги короче, поэтому эффективность становится еще дальше.
Есть еще одинпричина - для некоторых наших расчетов требуется 3-5 ГБ памяти, поэтому вы, вероятно, видите, насколько экономичным было бы для нас 12 быстрых задач.Мы работаем над реализацией разделяемой памяти, но это будет долгосрочный проект.Поэтому нам нужно выяснить, как сделать существующее аппаратное / программное обеспечение максимально быстрым.