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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{DISPLAYTITLE:cuda_kernel_call}} {{function begin|template <class F, class...Args> void cuda_kernel_call(F func, unsigned cBlocks, unsigned cThreadsPerBlock, std…»)
 
Строка 12: Строка 12:
{{function paramlist add|cbSharedMemory|Объем используемой ядром <tt>func</tt> разделяемой памяти.}}
{{function paramlist add|cbSharedMemory|Объем используемой ядром <tt>func</tt> разделяемой памяти.}}
{{function paramlist add|stream|Поток, используемый для вызова ядра <tt>func</tt>.}}
{{function paramlist add|stream|Поток, используемый для вызова ядра <tt>func</tt>.}}
{{function paramlist add|args|Набор аргументов, которые передаются ядру <tt>func</tt> при его вызове. Типы всех аргументов должны удовлетворять требованиям {{cpp_concept|StandardLayoutType}}, иначе корректное поведение функции [[cuda_kernel_call]] и ядра не гарантируется. При вызове производится их автоматическое копирование/перемещение в глобальную память текущего устройства CUDA.}}
{{function paramlist add|args|Набор аргументов, которые передаются ядру <tt>func</tt> при его вызове. Типы всех аргументов должны удовлетворять требованиям {{cpp_concept|StandardLayoutType}}, иначе корректное поведение функции [[cuda_kernel_call]] и ядра не гарантируется. При вызове производится их автоматическое копирование в глобальную память текущего устройства CUDA.}}
{{function paramlist end}}
{{function paramlist end}}
{{function sa begin}}
{{function sa begin}}
{{function sa add|[[cuda_error_info]]|{{cuda_error_info brief}}}}
{{function sa add|[[cuda_stream_synchronize]]|{{cuda_stream_synchronize brief}}}}
{{function sa add|[[cuda_abort_with_error]]|{{cuda_abort_with_error brief}}}}
{{function sa add|[[cuda_abort_with_error]]|{{cuda_abort_with_error brief}}}}
{{function sa add|[[cuda_stream_synchronize]]|{{cuda_stream_synchronize brief}}}}
{{function sa end}}
{{function sa end}}
{{function end}}
{{function end}}
Установка ошибки на устройстве CUDA имеет эффект для всего устройства - всех ядер, всех потоков stream и всех потоков центрального процессора.
При вызове на хосте функции [[cuda_stream_synchronize]] при установленном на текущем устройстве CUDA ненулевом коде ошибки производится сброс устройства и генерация исключения [[cuda_user_exception]].
Для использования функций [[cuda_abort_with_error]] и [[cuda_stream_synchronize]] вызов ядра CUDA должен быть выполнен с помощью [[cuda_kernel_call]].


Если при одновременном выполнении другого ядра kernel на том же устройстве CUDA производится вызов функции [[cuda_abort_with_error]] (в момент времени после оригинального вызова [[cuda_abort_with_error]] и до вызова [[cuda_stream_synchronize]]) , его эффект игнорируется.
Вызов
<source lang="cu">
cuda_kernel_call(my_kernel, 10, 100, 0, cuda_stream().get(), x, y, z);
</source>
аналогичен вызову
<source lang="cu">
my_kernel<<<10, 100, 0, cuda_stream.get()>>>(x, y, z);
</source>

Версия 16:00, 20 марта 2018

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_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);