На этом шаге мы рассмотрим спецификаторы доступа.
Вводимые в CUDA расширения языка С состоят из:
В CUDA используются следующие спецификаторы функций (таблица 1):
Спецификатор | Функция выполняется из | Функция может вызываться из |
---|---|---|
__device__ | device(GPU) | device(GPU) |
__global__ | device(GPU) | host(CPU) |
__host__ | host(CPU) | host(CPU) |
Спецификаторы __host__ и __device__ могут быть использованы вместе (это значит, что соответствующая функция может выполняться как на GPU, так и на CPU - соответствующий код для обеих платформ будет автоматически сгенерирован компилятором). Спецификаторы __host__ и __global__ не могут быть использованы вместе.
Спецификатор __global__ обозначает ядро, и соответствующая функция должна возвращать значение типа void.
На функции, выполняемые на GPU (__device__ и __global__), накладываются следующие ограничения:
Для задания размещения в памяти GPU переменных используются следующие спецификаторы:
На использование спецификаторов размещения в памяти также накладывается ряд ограничений:
На следующем шаге мы рассмотрим добавленные переменные.