Шаг 10.
Технология CUDA.
Директива вызова ядра
На этом шаге мы рассмотрим директиву вызова ядра.
Для запуска ядра на GPU используется следующая конструкция:
kernelName<<<Dg,Db,Ns,S>>>(args);
где:
- kernelName - имя (адрес) соответствующей __global__ функции;
- Dg - переменная (или значение) типа dim3, задающая размерность и размер сетки;
- Db - переменная типа dim3, задает размерность и размер блока (в нитях);
- Ns - необязательная переменная (или значение) типа size_t задает дополнительный объем разделяемой памяти в байтах,
которая должна быть динамически выделена каждому блоку (к уже статически выделенной разделяемой памяти), если не задано, то используется значение 0;
- S - переменная (или значение) типа cudaStream_t задает поток (CUDA stream), в котором должен произойти вызов, по умолчанию используется поток 0;
- args - аргументы вызова функции kernelName (их может быть несколько).
Следующий пример запускает ядро с именем myKernel параллельно на n нитях, используя одномерный массив из двумерных (16х16) блоков нитей, и передает на вход ядру два параметра - а и n.
При этом каждому блоку дополнительно выделяется 512 байт разделяемой памяти и запуск, производится на потоке myStream:
myKernel<<<dim3(n/256),dim3(16,16),512,myStream>>>(a,n);
На следующем шаге мы рассмотрим иерархию памяти в CUDA.
Предыдущий шаг
Содержание
Следующий шаг