Привязки ядра OpenMPI и OpenMP
Я прочитал статью [1] о запуске linpack на AMD. Стратегия выполнения, насколько я понимаю, состоит в том, чтобы иметь 1 ранг MPI на кеш L3 с 4 потоками каждый, поскольку кеш l3 предназначен для четырех физических ядер. Теперь, когда я прочитал статью, у меня есть три вопроса, на которые я не могу ответить с помощью Google:
1) Он тестирует систему с одним процессором. Я предполагаю, что в целом OpenMPI используется для развертывания linpack в кластере. Но есть ли какое-либо преимущество в производительности при использовании нескольких рангов MPI вместо одного ранга с большим количеством потоков? На машине с несколькими сокетами / с общей памятью это, по моему мнению, не должно иметь никакого значения.
2) Он запускает тест следующим образом:
export OMP_PROC_BIND=TRUE
export OMP_PLACES=cores
export OMP_NUM_THREADS=4
mpirun -np 8 --map-by l3cache --mca btl self,vader xhpl
Моя проблема в том, что настройка mpirun по умолчанию для привязки к ядрам. Насколько я понимаю, это означает, что каждый ранг привязан к одному ядру. Теперь, хотя потоки OMP также привязаны к ядрам, я не вижу, чтобы четыре потока на ранг выполнялись на четырех ядрах. Вместо этого, поскольку ранг (процесс) привязан к одному ядру, ранг состоит из четырех потоков OMP, которые используют одно и то же ядро, что не предназначено? У меня нет процессора, чтобы проверить мое предположение. Правильно ли я, что здесь отсутствует параметр --bind-to l3cache, чтобы позволить потокам OMP распределяться по всем ядрам, использующим кеш l3? Если нет, то почему?
3) Он утверждает, что при тестировании нужно отключить SMT. Почему? Я знаю, что аппаратные потоки не всегда могут повышать производительность, если общие исполнительные блоки, такие как FPU, перегружены, но почему они могут снизить производительность?
Большое спасибо за Вашу помощь.
С уважением, Максимилиан