КЛАСТЕР |
Назначение теста TRANSFER состоит в том, чтобы измерять пиковые характеристики обмена данными между двумя узлами - латентность и пропускную способность.
Предположим, что на двух процессорах (узлах) вычислительной системы работают два процесса, между которыми с помощью сети (другой коммуникационной среды) пересылаются сообщения. В передаче информации, помимо аппаратных устройств, участвует и программное обеспечение, например протокольный стэк (встроенный в ОС) и реализация интерфейса передачи сообщений MPI. Какими характеристиками определяется эффективность передачи информации между процессами параллельного приложения?
Основными характеристиками быстродействия сети являются латентность (latency) и пропускная способность (bandwidth).
Под пропускной способностью R сети будем понимать количество информации, передаваемой между узлами сети в единицу времени (байт в секунду). Очевидно, что реальная пропускная способность снижается программным обеспечением за счет передачи разного рода служебной информации.
Латентностью (задержкой) называется время, затрачиваемое программным обеспечением и устройствами сети на подготовку к передаче информации по данному каналу. Полная латентность складывается из программной и аппаратной составляющих.
Различают следующие виды пропускной способности сети:
Значения пропускной способности будем выражать в мегабайтах в секунду (MB/sec), значения латентности - в микросекундах (usec = 10-6 sec).
Время T(L), необходимое на передачу сообщения длины L, можно определить следующим образом: T(L)=s+L/R, где s - латентность, а R - пропускная способность.
Для приложений с тонкой параллельной структурой (fine-grained parallelism), какими, как правило, являются вычислительные программы, крайне важны малые величины латентности; тогда как для приложений, использующих большие объемы пересылок (а это, как правило, коммерческие приложения БД), более важно максимальное увеличение пропускной способности.
Для измерения пропускной способности "точка-точка" используется следующая методика. Процесс с номером 0 посылает процессу с номером 1 сообщение длины L байт. Процесс 1, приняв сообщение от процесса 0, посылает ему ответное сообщение той же длины. Используются блокирующие (blocking) вызовы MPI (MPI_Send, MPI_Recv). Эти действия повторяются N раз с целью минимизировать погрешность за счет усреднения. Процесс 0 измеряет время T, затраченное на все эти обмены. Пропускная способность R определяется по формуле R=2NL/T.
Пропускная способность двунаправленных обменов определяется по той же формуле. В этом случае используются неблокирующие (non-blocking) вызовы MPI (MPI_Isend, MPI_Irecv). При этом производится измерение времени, затраченного процессом 0 на передачу сообщения процессу 1 и прием ответа от него, при условии, что процессы начинают передачу информации одновременно после точки синхронизации.
Латентность измеряется как время, необходимое на передачу сигнала, или сообщения нулевой длины. При этом, для снижения влияния погрешности и низкого разрешения системного таймера, важно повторить операцию посылки сигнала и получения ответа большое число N раз. Таким образом, если время на N итераций пересылки сообщений нулевой длины туда и обратно составило T сек., то латентность измеряется как s=T/(2N).
Тест реализован в виде нескольких файлов на языке Си. Основной модуль (оболочка теста) содержится в файле test_shell.c, необходимые определения и прототипы функций находятся в заголовочном файле transfer.h. а в файлах transf1.c,transf2.c, ... transf5.c содержатся тестовые процедуры с именем transfer_test_operation(), которые соответствуют различным способам организации обменов между двумя процессорами. Например, transf1.c содержит процедуру однонаправленных обменов с помощью блокирующих вызовов MPI_Send/MPI_Recv, transf2.c - процедуру двунаправленных обменов с использованием MPI_Sendrecv, transf3.c - процедуру двунаправленных обменов с использованием неблокирующих вызовов MPI_Isend/MPI_Irecv.
Перед измерением производительности в каждом случае производится однократный запуск тестовой процедуры для проверки корректности пересылок.
Правило для сборки теста с помощью утилиты make описано в файле Makefile. После успешной сборки создаются исполняемые файлы transf1, transf2, ... transf5.
Исполняемые файлы можно запускать как на 2-х, так и на большем количестве процессоров, в этом случае будет производиться последовательное тестирование производительности обменов между головным и всеми остальными процессорами.
Объяснение значений параметров теста:
Пример запуска:
mpirun -np 4 transf2 uK m1 M1024 K2 T10 f100 R2 otransfer.dat
Тест двунаправленных обменов с помощью MPI_Sendrecv будет запущен на 4 процессорах. В данном случае, в качестве единицы длины сообщения выбирается Кбайт (uK), длина сообщений увеличивается в геометрической прогрессии (K2) от 1 Кбайта (m1) до 1 Мбайта (M1024). По умолчанию, каждая тестовая процедура будет повторяться 10 раз (T10), но это количество будет увеличено, если общее время меньше, чем 0.1 сек (f100). Полностью тест будет повторен 2 раза (R2). Результаты будут записываться в файл transfer.dat в текущей директории (otransfer.dat).