Upload
eugene-kolesnikov
View
178
Download
0
Embed Size (px)
Citation preview
ЧТО ТАКОЕ MPI?▸Интерфейс передачи сообщений
▸Протокол на уровне софта
▸Кросспалтформенность
▸Принцип компьютерных вычислений SIMD
4
▸MPI_Init: инициализирует окружение MPI
▸MPI_Comm_size: возвращает число узлов
▸MPI_Comm_rank: возвращает номер текущего узла
▸MPI_Send: отправляет сообщение
▸MPI_Recv: получает сообщение
▸MPI_Finalize: очистка памяти
СТАНДАРТНЫЕ ФУНКЦИИ 7
8ПРИМЕР ПРОГРАММЫ▸ 1
▸ 2
▸ 3
▸ 4
▸ 5
▸ 6
▸ 7
▸ 8
▸ 9
▸ 10
▸ 11
▸ 12
▸ 13
▸ 14
▸ 15
▸ 16
▸ 17
▸ 18
▸ 19
▸ 20
▸ 21
▸ 22
ВЗАИМОДЕЙСТВИЕ MPI & CUDA▸Две возможные схемы взаимодействия MPI & CUDA:
10
▸Использовать ядра мультипроцессоров в GPU в качестве узлов MPI
▸Узлами являются только CPU или процессы, которые работают с GPU
СПОСОБЫ ПЕРЕДАЧИ ДАННЫХ▸1) Device1 -> Host1 -> Host2 -> Device2
(MPI+CUDA)
▸2) Device1-> Device2 (CUDA-Aware MPI)
12
▸Единое пространство виртуальных адресов, начиная с CUDA 4.0 на устройствах с Compute Capability 2.0
КАК ЭТОГО ДОБИТЬСЯ? 13
ВВЕДЕМ ОБОЗНАЧЕНИЯ
▸ Память на GPU
▸ Страничная память
▸ Физическая память
▸ Физическая память
▸ DMA transfer over the PCI
▸ Обычное копирование
▸ RDMA network transfer
16
ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (ВЕКТОРИЗАЦИЯ)
18
▸Лишнее копирование в страничную память на хосте
▸Реализация CUDA-Aware MPI исключает лишнее копирование
19ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (CUDA-AWARE MPI)
20
▸Полная векторизация процесса передачи данных
ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (CUDA-AWARE MPI) (ВЕКТОРИЗАЦИЯ)
23
▸Самый быстрый способ передачи данных
▸Zero-copy — CPU не участвует в передаче данных
GPUDIRECT P2P & RDMA
СРАВНЕНИЕ РАБОТЫ ПРИ РАЗНЫХ СХЕМАХ ПЕРЕДАЧИ ДАННЫХ
24
▸Вывод: лучше использовать CUDA-Aware MPI, нежели просто MPI+CUDA
ПРИМЕР
▸Дан массив данных из N элементов
▸Необходимо посчитать аппроксимацию производной M-го порядка в каждой точке
▸Массив очень большой, в одну GPU не влезает
25
АРХИТЕКТУРА ПРОГРАММЫ
▸Разбиваем массив на несколько участков (сколько у нас есть GPU)
▸Вычисляем на GPU свой участок
▸Передаем нужные данные между GPU с помощью CUDA-Aware MPI