Cuda kernel call: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Строка 32: Строка 32:
</source>
</source>
с дополнительной инициализацией состояния, используемого реализацией CUDA.
с дополнительной инициализацией состояния, используемого реализацией CUDA.
Также существует второй вариант вызова ядра - cuda_kernel_call_2:
{{function begin|template <class F, class TplParams, std::size_t ... Ind>
inline auto cuda_kernel_call_2(F func, unsigned cBlocks, unsigned cThreadsPerBlock, std::size_t cbSharedMemory, cudaStream_t stream, TplParams&& tplParams, Chusov::integral_sequence<std::size_t, Ind...>);|{{cuda_kernel_call brief}}}}
{{function template paramlist begin}}
{{function template paramlist add|F|Тип С функции, реализующей ядро со спецификатором <tt>__global__</tt>, которому делегируется вызов.}}
{{function template paramlist add|TplParams|Тип аргументов <tt>tplParams</tt>, которые передаются вызываемому ядру CUDA.}}
{{function template paramlist add|Ind|Индекс для извлечения элемента из контейнера tplParams}}
{{function template paramlist end}}

Версия 09:46, 27 февраля 2019

template <class F, class...Args>
void cuda_kernel_call(F func, unsigned cBlocks, unsigned cThreadsPerBlock, std::size_t cbSharedMemory, cudaStream_t stream, Args&&...args);

Если необходимо, создает и инициализирует и инициализирует разделяемое состояние для ядер CUDA, после чего производит вызов указанного ядра.

Параметры шаблона
FТип С функции, реализующей ядро со спецификатором __global__, которому делегируется вызов.
ArgsТипы аргументов args, которые передаются вызываемому ядру CUDA.
Параметры
funcС функция, заданная со спецификатором __global__, которой делегируется вызов.
cBlocksЧисло блоков CUDA, которые реализуют выполнение ядра func.
cThreadsPerBlockЧисло графических потоков в одном блоке CUDA, выполняющих ядро func.
cbSharedMemoryОбъем используемой ядром func разделяемой памяти.
streamПоток, используемый для вызова ядра func.
argsНабор аргументов, которые передаются ядру func при его вызове. Типы всех аргументов должны удовлетворять требованиям StandardLayoutType, иначе корректное поведение функции cuda_kernel_call и ядра не гарантируется. При вызове производится их автоматическое копирование в глобальную память текущего устройства CUDA.
Возможные исключения
cuda_exceptionШаблон:Cuda exception brief
См. также
cuda_stream_synchronizeСинхронизирует выполнение задач, связанных с указанным потоком CUDA stream, и производит дополнительную общую постобработку результатов.
cuda_abort_with_errorУстанавливает код ошибки с опциональным связанным текстовым описанием в глобальной памяти устройства, на котором производится вызов, и досрочно завершает выполнения ядра (kernel) CUDA.

Вызов

cuda_kernel_call(my_kernel, 10, 100, 0, cuda_stream().get(), x, y, z);

аналогичен вызову

my_kernel<<<10, 100, 0, cuda_stream.get()>>>(x, y, z);

с дополнительной инициализацией состояния, используемого реализацией CUDA.

Также существует второй вариант вызова ядра - cuda_kernel_call_2:

template <class F, class TplParams, std::size_t ... Ind>
inline auto cuda_kernel_call_2(F func, unsigned cBlocks, unsigned cThreadsPerBlock, std::size_t cbSharedMemory, cudaStream_t stream, TplParams&& tplParams, Chusov::integral_sequence<std::size_t, Ind...>);

Если необходимо, создает и инициализирует и инициализирует разделяемое состояние для ядер CUDA, после чего производит вызов указанного ядра.

Параметры шаблона
FТип С функции, реализующей ядро со спецификатором __global__, которому делегируется вызов.
TplParamsТип аргументов tplParams, которые передаются вызываемому ядру CUDA.
IndИндекс для извлечения элемента из контейнера tplParams