Пока я запускаю свой код на старой платформе Intel Xeon (X5650@2.67 ГГц), эффективность параллелизма кажется хорошей, что ускорение на 80-95% ускоряется при удвоенном использовании процессора. Однако, когда я запускаю тот же код на платформе AMD 2990WX, я не могу получить никакого ускорения при любом количестве потоков.
Я так растерялся, что моя новая платформа AMD демонстрирует столь плохую параллельную эффективность, и я с трудом могу понять, где неправильные настройки в моем коде.
У меня есть C-код, основанный на библиотеке PetSc для решения очень большого разреженного линейного уравнения, параллельная часть в моем коде обеспечивается PetSc, которая автоматически использует MPI (я просто подстраиваю задачи построения матрицы для каждого процесса и выполняю не добавлять никакие другие подпрограммы связи).
Система вычислительной платформы - Centos7, версия библиотеки MPI - MPICH3, версия PetSc - 3.11. BLAS на платформе XEON включен в MKL, а BLAS на платформе AMD включен в библиотеку BLIS.
Пока программа работает на платформе AMD, я использую top
, чтобы проверить работу процессора, и обнаружил, что загрузка ЦП фактически различается при разных настройках запуска:
для 32 процессов:
/usr/lib64/mpich/bin/mpiexec -n 32 ./${BIN_DIR}/main
для 64 процессов:
/usr/lib64/mpich/bin/mpiexec -n 64 ./${BIN_DIR}/main
на платформе XEON:
/public/software/Petsc/bin/petscmpiexec -n 64 -f mac8 ./${BIN_DIR}/main
с mac8
файлом:
ic1:8
ic2:8
ic3:8
ic4:8
ic5:8
ic6:8
ic7:8
ic8:8