При отсутствии зависимостей все блоки вычислительной решётки выполняются параллельно, по мере освобождения ресурсов ускорителя, без синхронизации между собой. Пусть num_launches обозначает необходимое для выполнения всех итераций число запусков ядровой функции цикла. В случае, когда зависимости отсутствуют, num_launches = 1, т.к. алгоритм построения вычислительной предполагает полное заполнение пространства витков блоками.
Зависимостью длины p называется ситуация, при которой виток i не может быть выполнен, пока не завершится виток i-p. При наличии зависимостей длины n по какому-либо измерению, не более p последовательных итераций этого измерения могут быть выполнены параллельно. Пусть у параллельного цикла было m измерений и присутствует зависимость длины nj по измерению j (j > 1, j <= m). Тогда в связи с построением вычислительной сетки (описание приведено выше) длина зависимости в вычислительной решётке nj0 составит:
nj0 = + nj, (11)
где – количество итераций параллельного цикла по измерению k.
Понятно, что с точки зрения организации конвейерного исполнения блоков нас интересует зависимость минимальной длины n:
n = min(nj0), где 1 <= j0 <= m (12)
В таком случае организуется конвейер, в котором первые n блоков выполнятся последовательно (разгон конвейера), после чего выполняются блоки, для которых ожидаемые данные уже готовы. При этом число последовательных запусков функции-ядра равно:
num_launches = n + ceil (num_iterations / (*gridsize)) - 1 (13)
где ceil() – функция округления вверх, num_iterations – общее число итераций, blocksize – размеры блока по числу нитей, gridsize – количество блоков в сетке.
5 Прогнозирование выполнения модели
В данном разделе вводится модель графического ускорителя и приводится расчёт характеристик выполнения по построенной ранее модели программы. Результат зависит в равной степени как от свойств программы, так и от параметров ускорителя.
5.1 Модель графического ускорителя
В данном исследовании производится статический анализ кода программы, эффективность работы рассчитывается аналитически. Согласно поставленной задаче имитация работы ускорителя не требуется, поэтому модель ускорителя – это набор числовых параметров.
Параметр
|
Описание
|
Значение для TeslaC2050
|
arithm_latency
|
Задержка в тактах на выполнение одной арифметической операции
|
2
|
bandwidth
|
Пропускная способность канала памяти, гигабайт/сек.
|
144
|
cores_per_sm
|
Число шейдерных АЛУ в потоковом мультипроцессоре
|
32
|
compute_cap
|
Версия прошивки и вычислительные возможности
|
2.0
|
delay_coal
|
Задержка между двумя последовательными выровненными операциями с памятью
|
4
|
delay_uncoal
|
Задержка между двумя последовательными невыровненными операциями с памятью
|
40
|
frequency
|
Тактовая частота процессорного ядра, мегагерц
|
1150
|
glob_mem_latency
|
Задержка в тактах на выполнение одной транзакции обмена с глобальной памятью
|
500
|
reciproc_latency
|
Задержка в тактах выполнения одной операции, содержащей возможное приведение типа переменных
|
16
|
switch_latency
|
Задержка в тактах на переключение контекста активных блоков
|
3000
|
sm_num
|
Число потоковых мультипроцессоров
|
14
|
Таблица 1. Модель ускорителя
Помимо параметров, перечисленных выше, существует набор технических характеристик, который является универсальным для каждого ускорителя с определённой версией CUDA compute capability.
Параметр
|
Описание
|
Значение для версии 2.0
|
max_block_dims
|
Максимальное число размерностей решётки нитей в блоке
|
3
|
max_blocks_per_sm
|
Максимальное число одновременно запускаемых блоков на одном мультипроцессоре
|
8
|
max_grid_dims
|
Максимальное число размерностей решётки блоков
|
3
|
max_regs_per_sm
|
Число регистров на каждом мультипроцессоре
|
32768
|
max_thread_per_block
|
Максимальное число нитей в блоке
|
1024
|
max_warps_per_sm
|
Максимальное число варпов, запускаемых одновременно на одном потоковом мультипроцессоре
|
48
|
shared_mem_per_sm
|
Объём разделяемой памяти в байтах на каждом мультипроцессоре
|
49152
|
Таблица 2. Модель ускорителя. Характеристики, зависящие от compute capability
Достарыңызбен бөлісу: |