КЛАСТЕР |
Назначением теста MPITEST является выяснить эффективность реализации и выполнения некоторых базовых конструкций MPI в рамках тестируемого программно-аппаратного комплекса.
В начале опишем тестируемые конструкции MPI. Методика тестирования будет описана чуть ниже.
Условное название | Описание |
TIMING | время на один замер времени |
BARRIER | барьерная синхронизация всех процессов |
ALLREDUCE | суммирование N целочисленных переменных по всем узлам с рассылкой результата по всем узлам |
REDUCE | суммирование N целочисленных переменных по всем узлам, результат на одном узле |
BROADCAST | рассылка N целочисленных значений с одного узла по всем узлам |
GATHER | сбор N целочисленных значений со всех процессов на один головной процесс; в результате, головной процесс принимает N*(np-1) целочисленных значений |
ALLGATHER | Каждый процесс посылает всем остальным N целочисленных значений; в результате, каждый процесс посылает N, а принимает N*(np-1) целочисленных значений; эту операцию можно реализовать как GATHER (сбор). а потом BCAST (рассылка). |
ALL-TO-ALL | Каждый процесс посылает каждому по N целочисленных значений; в результате, каждый процесс посылает и принимает по N*(np-1) целочисленных значений |
ISEND & WAIT | Неблокирующая посылка N целочисленных значений от одного процесса другому с ожиданием завершения |
BLOCKING SEND | блокирующая пересылка N целочисленных значений от одного процесса другому целочисленных значений |
SENDRECV | операция посылки и получения N целочисленных значений |
SEND & RECV | посылка, а затем получение N целочисленных значений |
SIGNAL SENDING | посылка сигнала, т.е. сообщения нулевой длины, и получение ответного сигнала (получаемое время должно примерно равняться удвоенной латентности) |
Время DT на один замер времени вычисляется так:
t1 = MPI_Wtime();
t2 = MPI_Wtime();
DT = t2 - t1;
Время DB на операцию синхронизации вычисляется так:
MPI_Barrier(comm);
t1 = MPI_Wtime();
MPI_Barrier(comm);
t2 = MPI_Wtime();
DB = t2 - t1 - DT;
Все остальные замеры времени осуществляются по следующей схеме:
С целью минимизации погрешности эта процедура повторяется несколько раз. Величина t усредняется по всем итерациям.
Тест реализован в виде одного файла mpitest.c на языке Си.
Пример запуска:
mpirun -np 4 mpitest m1 M100 K10 T100 t100000 R2 otransfer.dat
В данном случае, mpitest будет запущен на 4 процессорах (-np 4). Тест будет оперировать с массивами данных размером в 1, затем в 10 и 100 целых чисел (m1 M100 K10). Для "продолжительных" операций тестовая процедура будет повторяться 100 раз (T100), для "коротких" - 100 тыс. раз (t100000), с целью более точного измерения. Весь тест целиком будет повторен 2 раза (R2). Результаты будут печататься в файл transfer.dat в текущей директории (otransfer.dat).