ALGORITHMS FOR MPI ALL-TO-ALL EXCHANGE USING
SHARED MEMORY
A.A. Romanyuta, M.G. Kurnosov
Siberian State University of Telecommunications and Information Science,
630102, Novosibirsk, Russia
DOI: 10.24412/2073-0667-2024-3-72-81 EDX: ZIZPYY
Proposed algorithms for implementing MPI_Alltoall and MPI_Alltoallv collective operations using shared memory of multiprocessor servers and the Linux kernel CMA mechanism. The algorithms use either a queue system or CMA system calls for message exchange. The software implementation is based on the Open MPI library as a separate component coll/sharm. In experiments conducted on a server with x86-64 architecture, the MPI_Alltoall operation achieved the greatest time reduction by 1.48 times and MPI_Alltoallv by 1.37 times compared to implementations in the coll/tuned and coll/ucc components of the Open MPI library. Recommendations for using the algorithms for different message sizes are proposed.
Key words: Alltoall, MPI, collective communications, computer systems.
References
1. A Message-Passing Interface Standard Version 4.0. [El. Res.]: http://www.mpi-forum.org/ docs/mpi-4,0/mpi40-report .pdf. (Cited 25 May 2024).
2. Open Source High Performance Computing. [El. Res.]: http://www.open-mpi.org. (Cited 25 May 2024).
3. Cross Memory Attach. [El. Res.]: https://lwn.net/Articles/405284/. (Cited 25 May 2024).
4. Linux Cross-Memory Attach. [El. Res.]: https://github.com/hjelmn/xpmem. (Cited 25 May 2024).
5. Graham R. L., Shipman G. MPI Support for Multi-core Architectures: Optimized Shared Memory Collectives // Proc. of the 15th European PVM/MPI Users' Group Meeting, 2008. P. 130 140.
6. MVAPICH: MPI over InfiniBand, Omni-Path, Ethernet/iWARP, RoCE, and Slingshot. [El. Res.]: https : //mvapich. cse. ohio-state . edu/.
7. Unified Communication X. [El. Res.]: https://github.com/openucx/ucx. (Cited 25 May 2024).
8. Unified Collective Communication. [El. Res.]: https://github.com/openucx/ucc. (Cited 25 May 2024).
9. Romanyuta A. A., Kurnosov M. G. Shared memory based MPI Reduce and Beast algorithms // Numerical Methods and Programming. 24. 339 351. 10.26089/NumMet.v24r424. (Cited: 25 May 2024).
10. Intel (R) MPI Benchmarks. [El. Res.]: https://github.com/intel/mpi-benchmarks. (Cited 25 May 2024).
The work was supported by research project N 071-03-2024-008.
(q) A. A. Romanyuta, M. G. Kurnosov, 2024
АЛГОРИТМЫ ОПЕРАЦИЙ ALL-TO-ALL СТАНДАРТА MPI С ИСПОЛЬЗОВАНИЕМ РАЗДЕЛЯЕМОЙ ПАМЯТИ
A.A. Романюта, М.Г. Курносов
Сибирский государственный университет телекоммуникаций и информатики,
630102, Новосибирск, Россия
УДК 004
DOI: 10.24412/2073-0667-2024-3-72-81 EDN: ZIZPYY
Предложены а.;п'оритмы реализации коллективных операций стандарта MPI Alltoall и Alltoallv с использованием разделяемой памяти многопроцессорных серверов и механизма ядра Linux СМА. Алгоритмы используют для обмена сообщениями систему очередей или системные вызовы СМА. Программная реализация выполнена на базе библиотеки Open MPI в виде отдельнохх) компонента coll/sharm. При проведении экспериментов на сервере с архитектурой х86-64 для операции MPI_Alltoall получено наибольшее сокращение времени до 1.48 раз и MPI_Alltoallv в 1.37 раза но сравнению с реализацией в компонентах coll/tuned и coll/ucc библиотеки Open MPI. Предложены рекомендации но использованию а;п'оритмов для различных размеров сообщений.
Ключевые слова: Alltoall, MPI, коллективные операции, вычислительные системы.
Введение. Коммуникационные библиотеки, реализующие интерфейс межпроцессного обмена сообщениями, составляют основу инструментария для высокопроизводительных вычислений (НРС) и распределенного машинного обучения. Примерами таких библиотек являются: Open MPI |1-2| (NVIDIA НРС-Х, IBM Spectrum MPI), MPICH (MVAPICH, Intel MPI, Cray MPI), NVIDIA NCCL, Hnawei HCCL, Alibaba ACCL, Horovod, Facebook Gloo. Коммуникационные библиотеки реализуют типовые операции тина точка-точка (Send/Reev), RDM A (Pnt/Get/FetchAndOp), коллективные операции Allrednce, All-to-all, Allgather, Scatter, Gather. Учитывая, что все процессы нараллелыюй программы или их часть могут находиться на одном вычислительном узле (сервере), требуется реализация библиотекой коммуникационных операций как через системную намять узла, так и через коммуникационную сеть. Дня современных серверов характерна глубокая и неоднородная иерархия памяти: наличие нескольких уровней кош-памяти, присутствие в процессоре одного или нескольких интегрированных контроллеров памяти, которые формируют NUMA-узлы, организация межпроцессорного обмена через специализированную шину (Intel UltraPath, HiSilieon Hydra, AMD Infinity Fabric, NVIDIA NVLink, CCIX). Как следствие, время доступа процессорного ядра к блоку данных зависит от того, в физической странице памяти какого NUMA-v3.ua он размещен, в кешо какого процессорного ядра и т. д. Системная намять узла может быть неоднородной, например, оснащаться дополнительным пулом НВМ-намяти дня оптимизации передачи информации между процессами.
Работа выполнена в рамках Государственного задания № 071-03-2024-008 от 19.01.2024. (с) А. А. Романюта, М. Г. Курносов, 2024
Некоторые архитектуры и модели процессоров имеют в своем составе специализированные аппаратные ускорители копирования областей памяти (такие как Intel Data Streaming Accelerator, CBDMA), Они позволяют выгрузить на ускоритель операции копирования блоков памяти и позволить ядрам параллельно выполнять вычислительные операции.
Наиболее универсальным подходом к обеспечению информационных обменов в пределах одного вычислительного узла является создание разделяемого сегмента в системной памяти. Такой подход подразумевает двойное копирование для передачи сообщения — процесс-отправитель копирует фрагмент сообщения из своего адресного пространства в очередь разделяемого сегмента и уведомляет остальные процессы, после чего они копируют сообщение в буфер в своем адресном пространстве. Этот метод получил название Copv-In Copy-Out (CICO), Используя специфичные для ядра операционной системы механизмы, такие как Linux Cross Memory Attach (CMA) [3], или отдельные модули — KNEM, XPMEM [4], возможно сократить количество копирований до одного за счет прямого доступа к памяти других процессов,
В данной работе внимание сосредоточено на коллективной операции Alltoall стандарта MPI, которая используется в алгоритмах преобразования Фурье и параллельных алгоритмах линейной алгебры.
Рассматривается случай, когда все процессы MPI-коммуникатора расположены на одном вычислительном узле. Для организации межпроцессного взаимодействия процессы формируют сегмент разделяемой памяти, в котором располагаются система очередей и набор счетчиков и флагов для хранения состояния фрагментов очереди. Предлагаются алгоритмы, использующие для коллективного обмена систему очередей или системные вызовы СМА,
Далее приводится описание алгоритмов операций Alltoall, Alltoallv, Проведен экспериментальный анализ временных характеристик на вычислительном сервере с операционной системой GNU/Linux,
1. Постановка задачи. На сервере, в котором установлен один или несколько многоядерных процессоров, запущена MPI-программа, р процессов которой распределены по процессорным ядрам и образуют MPI-коммуникатор comm. Чтобы исключить влияние переноса операционной системой выполнения процессов между ядрами, библиотеки, реализующие стандарт MPI, привязывают процесс к ядру, на котором он был запущен.
Необходимо разработать алгоритмы операций MPI_Alltoall и MPI_Alltoallv, использующие память вычислительного узла для передачи информации. Ниже приведены прототипы функций:
MPI_Alltoall(sbuf [р], scount, sdtype, rbuf [р], rcount, rdtype, comm)
MPI_Alltoallv(sbuf [p], scounts[p], sdisplsEp], sdtype, rbuf[p], rcountsEp], rdisplsEp], rdtype, comm)
где sbuf — буфер отправки, scounts[p] — массив, содержащий количество элементов типа sdtype, которое требуется отправить каждому процессу, sdispls[p] — массив, содержащий значения смещения начала данных в буфере sbuf для каждого процесса в количестве элементов типа sdtype, rbuf — буфер приема, rcounts[p] — массив, содержащий количество элементов типа rdtype, которое необходимо принять от каждого процесса, rdispls[p] — массив, содержащий значения смещения начала данных в буфере rbuf для каждого процесса в количестве элементов типа sdtype, comm — группа процессов (MPI-коммуникатор), участвующих в операции обмена данными,
2. Обзор работ. Различные программные библиотеки, реализующие стандарт MPI, содержат в себе механизмы межпроцессного взаимодействия, в том числе с использова-
нием разделяемой памяти. Библиотека Open MPI содержит компонент coll/sm, который использует сегмент разделяемой памяти и формирует систему очередей в нем для выполнения коллективных операций. Компонент описан в работе [5], где предлагается использовать р циклических очередей из s фрагментов размера / байт, разделенных на w = 2 множества, где р — количество процессов. Для каждого процесса создается очередь (по умолчанию s = 8, f = 8192), а так же w блоков с управляющей информацией. При взаимодействии с очередью сообщений каждый процесс, используя управляющий блок множества, уведомляет все процессы о начале работы с множеством фрагментов (s/w фрагментов). При передаче сообщение разбивается на фрагменты по / байт и фрагмент копируется в следующий свободный буфер очереди процесса. После завершения копирования, процессы уведомляются о готовности данных путем записи в соответствующий ему управляющий блок размера скопированного фрагмента. Остальные процессы ожидают этого уведомления и копируют данные в свою локальную память. При заполнении буферов всех множеств процессы выполняют барьерную синхронизацию. Для уведомления процессов о завершении использования множества фрагментов очереди применяются атомарные операции.
Библиотека MVAPICH [6] для выполнения коллективных операций использует р циклических очередей из s фрагментов. Каждый фрагмент очереди содержит буфер для храпения фрагмента длины / байт, а также значение psn — порядковый помер коллективной операции, при выполнении которой слот был использован. Номер psn используется для уведомления процессов о готовности данных в слоте очереди. По умолчанию длина очереди s = 128 слотов размером / = 8192 байт. Реализация с использованием системы очередей поддерживает выполнение операций MPI_Bcast, MPI_Reduce, MPI_Allreduce, MPI_Barrier,
Библиотека Open UCX [7] реализует транспортный уровень для подсистемы дифференцированных обменов и содержит компонент UCC [8] выполнения коллективных операций, В Open MPI компонент coll/ucc предоставляет интерфейс взаимодействия с UCC, Отметим, что данным компонентом поддерживается большинство коллективных операций, за исключением MPI_Scan, MPI_Exscan и MPI_Alltoallw,
Основным недостатком реализаций на основе библиотек Open MPI и MVAPICH является ограниченная поддержка коллективных операций. Компонент coll/sm библиотеки Open MPI содержит алгоритмы операций MPI_Bcast, MPI_Reduce, MPI_Allreduce, MPI_Barrier, Возможность реализации коллективных операций "all-to-all" в рассмотренных библиотеках, как правило, ограничена структурой сегмента разделяемой памяти или необходимостью использования большого количества атомарных операций и сипхроииза-ций, что влияет на производительность алгоритмов.
Разрабатываемый авторами компонент coll/sharm [9] библиотеки Open MPI, в отличие от существующих, формирует сегмент разделяемой памяти, структура которого ориентирована на сокращение количества барьерных сипхроиизаций и атомарных операций при выполнении коллективных операций с использованием системы очередей.
Компонент не допускает одновременного выполнения нескольких коллективных операций, В отличие от компонента coll/sm, фрагменты одной очереди располагаются последовательно в памяти, и для уведомления процессов о завершении обмена не используются атомарные операции,
3. Описание алгоритмов. При создании MPI-коммуникатора компонентом coll/sharm формируется сегмент разделяемой памяти, который используется процессами для обмена информацией при обращении к операциям. Для этого процесс с номером О
при помощи POSIX-еовмеетимого системного вызова mmap выделяет память для размещения системы очередей. Остальные процессы присоединяют выделенный сегмент памяти к своему адресному пространству. Важно отметить, что компонент coll/sharm предназначен для работы с коммуникаторами, все процессы которых работают в пределах одного вычислительного узла,
3.1, Структура сегмента разделяемой памяти. При создании коммуникатора в выделенном сегменте разделяемой памяти компонентом coll/sharm размещаются р систем из р циклических очередей из s фрагментов по f байт. Для каждой очереди отводится массив c[p][s] из s блоков. Каждый блок c[p][s] содержит в себе р элементов для индивидуального уведомления процессов о состоянии конкретного фрагмента очереди. После инициализации разделяемой памяти, каждый процесс размещает в соответствующем блоке pids[p] свой Process ID для использования алгоритмами СМА,
Дополнительно в локальной памяти каждого процесса расположен массив указателей current_slot[p], элементы которого определяют номера фрагментов очереди каждого процесса для выполнения операций чтения/записи в очередь. После каждой операции с очередью, соответствующий ей счетчик увеличивается на единицу. Основное отличие от компонента coll/sm заключается в организации взаимодействия процессов с разделяемой очередью — операции чтения процессом производятся из произвольной очереди, тогда как запись осуществляется только в систему очередей с номером, равным номеру процесса в коммуникаторе. Это позволяет минимизировать затраты на выполнение атомарных операций, критических секций и сипхропизаций доступа на запись. Поддержка последовательного выполнения коллективных операций достигается за счет проверки того, что
[]
процессами — это гарантируется, когда каждый элемент массива с для соответствующего фрагмента очереди равен нулю. Необходимым условием для корректной работы компонента является синхронизация алгоритмами локальных счетчиков current_ slot. Актуальность синхронизации указателей current_ slot продиктована нерегулярным размером сообщений в операции MPI_Alltoallv.
Размеры всего сегмента и отдельных его блоков кратны размеру страницы памяти (а = 4КБ), Адреса блоков также выравнены по размеру страницы памяти. Суммарный размер сегмента можно определить по формуле p2s(f + а). Для р = 16, а = 4 КБ, s = 8, / = 8 КБ размер системы очередей равен 24 МБ, при р =32 размер составляет 92 МБ, Накладные расходы на хранение локальных указателей и счетчиков составляют 80 + 6р байт. При р = 16 накладные расходы составляют 176 байт,
3.2, Алгоритм операции Alltoall. При выполнении операции Alltoall каждый процесс отправляет seount элементов типа scltype из буфера sbuf и принимает reount элементов типа rdtype от всех процессов в буфер rbuf.
Одним из способов выполнения коллективной операции MPI_Alltoall является алгоритм попарных обменов (pairwise). При передаче каждого фрагмента вычисляются номера процессов sendto для отправки и recvfrom для приема. Передача каждого фрагмента через очередь в разделяемой памяти осуществляется р — 1 раз, В случае, когда sendto = recvfrom = rank, данные копируются между буферами напрямую без использования очереди. Передача сообщений производится путем копирования первых / байт в свободный фрагмент г очереди q[rank][sendto], Уведомление процесса-получателя осуществляется путем записи в управляющий блок очереди sendto системы rank c[i][sendto] количества байт, записанных во фрагмент очереди. После записи каждого фрагмента сообщения в очередь, процессы проверяют наличие уведомлений о готовности данных. При
получении уведомления от процесса recvfrom фрагменты копируются из разделяемой очереди в буфер rbuf. Количество переданных байт для каждого процесса хранится в массиве nsend[p]-, массив nrecv[p] содержит количество принятых байт. Цикл передачи и приема повторяется, пока сообщения всех процессов не будут обработаны (сумма элементов массива nsend[p] (sum(nsend)) меньше sendsize, и сумма элементов массива nrecv[p] меньше recvsize). Передача и прием сообщений реализованы с использованием функций упаковки и распаковки данных подсистемы OPAL (Open Portable Access Layer), что позволяет обеспечить поддержку пользовательских типов данных (MPI_Type_vector, MPI_Type_struct), Реализация алгоритма pairwise с использованием системы очередей приведена в псевдокоде 1,
Использование ('МЛ позволяет копировать данные из памяти других процессов, используя механизмы ядра Linux, Алгоритм с применением ('МЛ состоит из двух основных этапов:
1) Процессы обмениваются адресами на начало данных в буфере sbuf (all-to-all gather) через систему очередей,
2) Каждый процесс выполняет последовательное чтение сообщений из памяти других процессов, используя идентификаторы процессов, расположенные в сегменте разделяемой памяти при инициализации компонента.
Важно отметить, что алгоритмы, использующие системные вызовы ('МЛ. не поддерживают типы данных, не позволяющие расположить все элементы непрерывно в памяти процесса (MPI_Type_contiguous). Основным недостатком использования технологий ZeroCopy в алгоритмах коллективных обменов выступает необходимость обеспечения доступности буферов для каждого процесса. Это обеспечивается вызовом операции барьерной синхронизации после выполнения всех обменов.
Вычислительная сложность алгоритма линейно зависит от количества процессов р, размера сообщения m и размера фрагмента очереди f — 0(p\m/f]). Сложность по памяти определяется размером сегмента разделяемой памяти, который зависит от числа процессов р, длины очередей s и размера фрагментов очереди f — 0(p2sf),
3.3. Алгоритм операции Alltoallv. В алгоритме MPI_Alltoallv количества элементов
для приема-передачи scount и rcount варьируются для каждого процесса и представлены
[p ] [ p] [ p] [p ]
щения в буферах приема и отправки для каждого процесса. Основная сложность реализации алгоритма заключается во влиянии нерегулярного размера сообщений на количество фрагментов очереди, необходимых для передачи данных. Чтобы обеспечить синхронизацию указателей на текущий фрагмент очереди current_slot, процессы перед выполнением обмена сообщениями осуществляют передачу размеров передаваемых сообщений для каждого процесса scounts[p] • sizeof(sdtype) (all-to-all gather). Так, исходя из известного количества байт, передаваемых каждому процессу от процесса rank, возможно вычислить количество задействованных фрагментов каждой очереди системы очередей с номером rank и скорректировать локальные указатели системы очередей,
4. Организация экспериментов. Экспериментальная часть выполнялась на сервере со следующей конфигурацией:
— двухпроцессорный сервер Intel Xeon Skylake: 2 х Intel(R) Xeon(E) Gold 5218N (16 ядер, кэш-память LI 1 MB, L2 32 МБ, L3 44МБ), 2 NUMA узла;
— оперативная память: 384 ГБ;
— ядро linux 5,15,0-94-generie (ОС Ubuntu 22,04), gcc 11,4,0;
— MPI: Open MPI 5.0.2 (tag: v5.0.2, PML: UCX).
Алгоритм 1, Алгоритм pairwise операции MPI_Alltoall
sb = sbuf + sizeof (sdtype) • scount • rank rb = rbuf + sizeof (rdtype) • rcount • rank copy(rb, sb, scount • sizeof (sdtype)) / / Копирование sb в rb nrecv[rank] = nsend[rank] = scounts[rank] • sizeof (sdtype) while sum(nrecv) < recvsize and sum(nsend) < sendsize do for i = 1 ^ commsize do
sendto = (rank + i) % commsize
recvfrom = (rank + commsize — i) % commsize
if nsend[sendto] < sendsize then
sendbytes = min(f, sendsize — nsend[sendto]) к = current_ slot[rank][sendto] sb = sbuf + sizeof (sdtype) • scount • sendto if c[recvfrom][rank][k] == 0 then
copy(q[rank][sendto][k], sb + nsend[sendto], sendbytes) c[rank][sendto][k] = sendbytes current_slot[rank][sendto] = (k + 1) %o s nsend[sendto] = nsend[sendto] + sendbytes end if end if end for
if nrecv[recvfrom] < recvsize then
continue end if
к = current _slot[recvfrom\[rank\ if c[recvfrom][rank][k] > 0 then
rb = rbuf + sizeof (rdtype) • rcount • recvfrom
copy(rb + nrecv[recvfrom], q[recvfrom][rank][k], c[recvfrom][rank][k]) nrecv [recvfrom] = nrecv[recv from] + c[recvfrom][rank][k] current_slot[recvfrom][rank] = (k + 1) %o s end if end while
- OpenUCX: vl.15.0, OpenUCC: vl.2.0
В качестве теста производительности использовался пакет Intel MPI Benchmarks 2021 Update 3 (IMB-v2021,3) [10], Сравнение проводилось с компонентами coll/tuned и coll/ucc Open MPI, При запуске реализации компонента coll/tuned использовался алгоритм pairwise. Библиотека Open MPI собрана с поддержкой Open UCX [7], который используется в качестве PML (Point-to-point message layer). Компонент coll/ucc использует Open UCX и подсистему UCC [8], Параметры системы очередей компонента coll/sharm: s = 8 фрагментов по f = 8192 байт.
Параметры запуска теста 1MB:
IMB-MPI1 alltoall -off_cache 20,64 -iter 5000,250 -msglog 6:24 -sync 1 -imb_barrier 1 -root_shift 0 -time 600.0
За время выполнения функции в каждом процессе принимается среднее время одного ее запуска (среднее время одной итерации цикла измерений). Для сравнения производи-
тельности алгоритмов пакетом 1MB вычисляется максимальное время выполнения t_max среди процессов коммуникатора. Псевдокод измерения среднего времени пакетом 1MB представлен алгоритмом 2, В каждом эксперименте тест производительности запускался 5 раз, значение t_max усреднялось по результатам трех запусков, исключая минимальный и максимальный результаты.
Алгоритм 2, Алгоритм измерения времени выполнения коллективной операции пакетом 1MB
time = 0
MPI _ Barrier (comm) for г = 1 ^ nsamples do tl = MPI_Wtime()
Collective (parameter s,..., comm) t2 = MPI_Wtime() time += (t2 - tl) end for
time = time / nsamples
MPI_Allreduce(&i_ma:z, Ltime, 1, MPI_DOUBLE, MPI_MAX, comm)
На рисунке 1 показана зависимость времени выполнения различных реализаций алгоритма от размера передаваемого сообщения для операции MPI_Alltoall, При запуске р =16 процессов алгоритм с использованием СМА показал наименьшее время выполнения для размеров сообщений от 16 КБ до 2 МБ, Для запуска р =32 процессов этот же алгоритм показал наименьшее время выполнения для размеров сообщений от 8 КБ до
1 МБ по сравнению с алгоритмами компонентов coll/ucc и coll/tuned. Наилучшее время выполнения для CICO-алгоритма достигнуто при р = 16 и размере сообщения т = 512 Б, В сравнении с компонентом coll/tuned, алгоритм с использованием СМА показал сокращение времени выполнения в 1,6 раза (на 40 % меньше) при р = 16 и т =16 КБ, а по отношению к coll/ucc — в 1,48 раза (на 29 % меньше). Для р =32 процессов алгоритм с использованием СМА имел время выполнения в 1,73 раза меньше (на 42 % меньше), чем coll/tuned для размера сообщения т = 64 КБ, и в 1,4 раза меньше (на 20 % меньше) по сравнению с coll/ucc.
Реализация операции MPI_Alltoallv с использованием CICO-подхода, как показано на рисунке 2, при запуске р = 16 процессов показала наибольшее сокращение времени в 1,8 раза (на 46 % меньше) для сообщений, равных по размеру странице памяти (т = а = 4КБ) в сравнении с компонентом coll/tuned. Использование СМА позволило достичь наименьшего времени выполнения на размерах сообщения 16 КБ-4 МБ при р = 16 и 16 КБ-1 МБ при запуеке р = 32, Для размеров сообщения, где алгоритм СМА показал лучшее время работы, удалось сократить время выполнения в 1,6 раз в сравнении с coll/tuned и 1,37 раза относительно coll/ucc для р = 16, при р = 32 сокращение времени составило 1,6 раз и 1,23 соответственно.
По результатам проведенных экспериментов реализации на основе CICO-подхода потребовали больше времени для выполнения обменов в сравнении с coll/ucc. Относительно компонента coll/tuned результаты времени выполнения CICO-алгоритмов стремятся к минимальному при т = а = 4 КБ, Это обусловлено реализацией подсистемы памяти — алгоритмами ядра операционной системы для работы с памятью, а также параметрами контроллера памяти и межпроцессорной шины при использовании более одного процессора (при р = 32 задействованы оба процессора).
« 4"
S □ ° s
(D
а
м о
(D 3
о к к
се
m 2 о 2
со к
4 се
5 it00 о
ucc sharm cma
sharm flat
О о о о 9 о °
К
д д
д Д
f д д д д д
° ш □ □ □ □ °
Размер сообщения
□ □ 1
5
3о О о
о sharm flat
□ sharm cma a ucc
■-- tuned
ООО
О □ о
sharm cma
О О
__0.
Д А
А Д Д Д А А □ □□□□□
2
1-----
" Д л '
Размер сообщения б)
Рис. 1. Нормализованное время работы алгоритмов MPI_Alltoa.ll при запуске а) р = 16; б) р = 32 процессов. Время нормализовано относительно компонента соИ/Шпос!
4
[] □ □
е р
п 3 е о н н а т 2 о з и
ч
а
м1 р1
о
К
ООО
sharm cma
о0оооо6о
А А Д А А д □ □ □ □ п п
Размер сообщения
О о о
о sharm flat
□ sharm cma a ucc
--- tuned
sharm cma
о°°Ф°о
А А а й i в B (l
А Д Д Д Д Д
Размер сообщения б)
Рис. 2. Нормализованное время работы алгоритмов МР1_АШоа11у при запуске а) р = 16; б) р = 32 процессов. Время нормализовано относительно компонента соИ/Шпос!
ucc
4
ucc
ucc
Заключение. Разработанные алгоритмы реализуют операции MPI_Alltoall и MPI_Alltoallv с использованием системы очередей в разделяемой памяти и механизма СМА. Наибольшее сокращение времени — в 1.8 раза относительно компонента coll/tuned и в 1.48 раза относительно coll/ucc (при р = 16, т = 16КБ). По результатам проведенных экспериментов в общем случае рекомендуется использовать алгоритм СМА при размерах сообщений 16 КБ > т > 1 МБ.
В дальнейшем планируется реализация алгоритмов в компоненте coll/sharm с использованием ХРМЕМ. Также необходимо оцепить влияние параметров очереди (размер фрагмента f и количество фрагментов s) на временные характеристики разработанных алгоритмов с использованием системы очередей и выработать рекомендации но их использованию для различных размеров передаваемых сообщений.
Список литературы
1. A Message-Passing Interface Standard Version 4.0. [El. Res.]: http://www.mpi-forum.org/ docs/mpi-4.0/mpi40-report .pdf. (Дата обращения: 25 мая 2024).
2. Open Source High Performance Computing. [El. Res.]: http://www.open-mpi.org. (Дата обращения: 25 мая 2024).
3. Cross Memory Attach. [El. Res.]: https://lwn.net/Articles/405284/. (Cited 25 May 2024).
4. Linux Cross-Memory Attach. [El. Res.]: https://github.com/hjelmn/xpmem. (Cited 25 May 2024).
5. Graham R. L., Shipman G. MPI Support for Multi-core Architectures: Optimized Shared Memory Collectives // Proc. of the 15th European PVM/MPI Users' Group Meeting, 2008. P. 130-140.
6. MVAPICH: MPI over InfiniBand, Omni-Path, Ethernet/iWARP, RoCE, and Slingshot. [El. Res.]: https://mvapich.cse.ohio-state.edu/. (Дата обращения: 25 мая 2024).
7. Unified Communication X. [El. Res.]: https://github.com/openucx/ucx. (Дата обращения: 25 мая 2024).
8. Unified Collective Communication. [El. Res.]: https://github.com/openucx/ucc. (Дата обращения: 25 мая 2024).
9. Романюта А. А., Курносов М. Г. Алгоритмы редукции и широковещательной рассылки MPI на базе разделяемой памяти многопроцессорных узлов // Вычислительные методы и программирование. Т. 24. Выпуск 4. 2023. (Дата обращения: 25 мая 2024).
10. Intel(R) MPI Benchmarks. [El. Res.]: https://github.com/intel/mpi-benchmarks. (Дата обращения: 25 мая 2024).
Романюта Алексей Андреевич — аспирант третьего курса СибГУТИ; e-mail: alexey-r. 98@yandex .ru. Окончил СибГУТИ в 2021 году по направлению «Информатика и вычислительная техника» (09.04.01, магистратура). В настоящее время обучается в аспирантуре СибГУТИ по направлению 09.06.01 «Информатика и вычислительная техника», специальность 2.3.5 «Математическое и программное обеспечение вычислительных систем, комплексов и компьютерных сетей». Область научных интересов: параллельные вычисления, алгоритмы коллективных информационных обменов (MPI), мно-гопоточность.
Alexey A. Romanyuta Graduated from SibSUTIS in 2021 with a Master's degree in Computer Science and Engineering (09.04.01). PhD student at SibSUTIS in the field of Computer Science and Engineering (09.06.01). E-mail: alexey-r. 98@yandex .ru. Research interests include: parallel computing, collective communication algorithms (MPI), multithreading.
Курносов Михаил Георгиевич — доктор техн. наук, профессор кафедры вычислительных систем СибГУТИ.
E-mail: mkurnosov@sibsutis ru. В 2016 году защитил диссертацию по специальности 05.13.15.
Область научных интересов: многопоточ-ность, алгоритмы коллективных информационных обменов (MPI), алгоритмы синхронизации, инструменты параллельного программирования, высокопроизводительные коммуникационные библиотеки, архитектурная оптимизация кода и алгоритмов.
Mikhail G. Kurnosov — Professor in the Computer Systems Department at the SibSUTIS. Doctor of Science at 2016. E-mail: mkurnosov@ sibsutis.ru.
Research interests include: multithreading, collective communication algorithms (MPI), synchronization algrorithms, high-performance communication libraries, parallel programming tools, Architectural optimization of code and algorithms.
Дата поступления — 09.07.2024