30
CUDA-AWARE MPI

CUDA-Aware MPI

Embed Size (px)

Citation preview

CUDA-AWARE MPI

▸ Разделы:

▸ Обзор MPI

▸ Связка MPI & CUDA

▸ Пример программы

2

IBM'S BLUE GENE/P SUPERCOMPUTER

3

ЧТО ТАКОЕ MPI?▸Интерфейс передачи сообщений

▸Протокол на уровне софта

▸Кросспалтформенность

▸Принцип компьютерных вычислений SIMD

4

MPI VS CUDA

▸Принцип работы узлов

▸Структура памяти

5

ВИДЫ КЛАСТЕРОВ

▸1:

▸2:

6

▸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

КОМПИЛЯЦИЯ И ЗАПУСК

▸Компиляция

▸Запуск четырех узлов с параметрами <args>

9

ВЗАИМОДЕЙСТВИЕ MPI & CUDA▸Две возможные схемы взаимодействия MPI & CUDA:

10

▸Использовать ядра мультипроцессоров в GPU в качестве узлов MPI

▸Узлами являются только CPU или процессы, которые работают с GPU

РАССМОТРИМ КЛАСТЕР

▸3 узла

▸Каждый узел имеет CPU и GPU

11

СПОСОБЫ ПЕРЕДАЧИ ДАННЫХ▸1) Device1 -> Host1 -> Host2 -> Device2

(MPI+CUDA)

▸2) Device1-> Device2 (CUDA-Aware MPI)

12

▸Единое пространство виртуальных адресов, начиная с CUDA 4.0 на устройствах с Compute Capability 2.0

КАК ЭТОГО ДОБИТЬСЯ? 13

CUDA-AWARE MPI VS MPI+CUDA14

▸Упрощение исходного кода

▸Оптимизация передачи данных внутри сети

ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ HOST -> DEVICE

▸Pageable memory

▸Pinned memory

▸Device memory

15

ВВЕДЕМ ОБОЗНАЧЕНИЯ

▸ Память на GPU

▸ Страничная память

▸ Физическая память

▸ Физическая память

▸ DMA transfer over the PCI

▸ Обычное копирование

▸ RDMA network transfer

16

ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (СХЕМА)

17

▸ Организация передачи сообщений в сети

ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (ВЕКТОРИЗАЦИЯ)

18

▸Лишнее копирование в страничную память на хосте

▸Реализация CUDA-Aware MPI исключает лишнее копирование

19ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (CUDA-AWARE MPI)

20

▸Полная векторизация процесса передачи данных

ПРИНЦИП ПЕРЕДАЧИ ДАННЫХ МЕЖДУ УЗЛАМИ (CUDA-AWARE MPI) (ВЕКТОРИЗАЦИЯ)

GPUDIRECT SHARED ACCESS21

▸Исключение всех копирований на хосте

GPUDIRECT P2P & RDMA 22

23

▸Самый быстрый способ передачи данных

▸Zero-copy — CPU не участвует в передаче данных

GPUDIRECT P2P & RDMA

СРАВНЕНИЕ РАБОТЫ ПРИ РАЗНЫХ СХЕМАХ ПЕРЕДАЧИ ДАННЫХ

24

▸Вывод: лучше использовать CUDA-Aware MPI, нежели просто MPI+CUDA

ПРИМЕР

▸Дан массив данных из N элементов

▸Необходимо посчитать аппроксимацию производной M-го порядка в каждой точке

▸Массив очень большой, в одну GPU не влезает

25

АРХИТЕКТУРА ПРОГРАММЫ

▸Разбиваем массив на несколько участков (сколько у нас есть GPU)

▸Вычисляем на GPU свой участок

▸Передаем нужные данные между GPU с помощью CUDA-Aware MPI

ДИАГРАММА 27

28MAIN

DATA_SERVER 29

COMPUTE_PROCESS 30