Cuda kernel call: различия между версиями
Перейти к навигации
Перейти к поиску
м |
|||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 14: | Строка 14: | ||
{{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 exceptionlist begin}} | |||
{{function exceptionlist add|[[cuda_exception]]|{{cuda_exception brief}}}} | |||
{{function exceptionlist end}} | |||
{{function sa begin}} | {{function sa begin}} | ||
{{function sa add|[[cuda_stream_synchronize]]|{{cuda_stream_synchronize brief}}}} | {{function sa add|[[cuda_stream_synchronize]]|{{cuda_stream_synchronize brief}}}} | ||
Строка 29: | Строка 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_2 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}} | |||
{{function paramlist begin}} | |||
{{function paramlist add|func|С функция, заданная со спецификатором __global__, которой делегируется вызов.}} | |||
{{function paramlist add|cBlocks|Число блоков CUDA, которые реализуют выполнение ядра <tt>func</tt>.}} | |||
{{function paramlist add|cThreadsPerBlock|Число графических потоков в одном блоке CUDA, выполняющих ядро <tt>func</tt>.}} | |||
{{function paramlist add|cbSharedMemory|Объем используемой ядром <tt>func</tt> разделяемой памяти.}} | |||
{{function paramlist add|stream|Поток, используемый для вызова ядра <tt>func</tt>.}} | |||
{{function paramlist add|args|Набор аргументов, которые передаются ядру <tt>func</tt> при его вызове. Типы всех аргументов должны удовлетворять требованиям {{cpp_concept|StandardLayoutType}}, иначе корректное поведение функции [[cuda_kernel_call]] и ядра не гарантируется. При вызове производится их автоматическое копирование в глобальную память текущего устройства CUDA. | |||
Параметры могут быть 3 типов: kernel_input_parameters_external_t - входной параметр; используется для одностороннего копирования с host на device. kernel_output_parameters_external_t - выходной параметр; используется для одностороннего копирования с device на host. kernel_inout_parameters_external_t - используется для вдустороннего стороннего копирования с device на host и обратно.}} | |||
{{function paramlist end}} | |||
{{function exceptionlist begin}} | |||
{{function exceptionlist add|[[cuda_exception]]|{{cuda_exception brief}}}} | |||
{{function exceptionlist end}} | |||
{{function sa begin}} | |||
{{function sa add|[[cuda_stream_synchronize]]|{{cuda_stream_synchronize brief}}}} | |||
{{function sa add|[[cuda_abort_with_error]]|{{cuda_abort_with_error brief}}}} | |||
{{function sa end}} | |||
{{function end}} |
Текущая версия на 19:08, 22 марта 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 kernel call 2 brief
- Параметры шаблона
F Тип С функции, реализующей ядро со спецификатором __global__, которому делегируется вызов. TplParams Тип аргументов tplParams, которые передаются вызываемому ядру CUDA. Ind Индекс для извлечения элемента из контейнера tplParams. - Параметры
func С функция, заданная со спецификатором __global__, которой делегируется вызов. cBlocks Число блоков CUDA, которые реализуют выполнение ядра func. cThreadsPerBlock Число графических потоков в одном блоке CUDA, выполняющих ядро func. cbSharedMemory Объем используемой ядром func разделяемой памяти. stream Поток, используемый для вызова ядра func. args Набор аргументов, которые передаются ядру func при его вызове. Типы всех аргументов должны удовлетворять требованиям StandardLayoutType, иначе корректное поведение функции cuda_kernel_call и ядра не гарантируется. При вызове производится их автоматическое копирование в глобальную память текущего устройства CUDA. Параметры могут быть 3 типов: kernel_input_parameters_external_t - входной параметр; используется для одностороннего копирования с host на device. kernel_output_parameters_external_t - выходной параметр; используется для одностороннего копирования с device на host. kernel_inout_parameters_external_t - используется для вдустороннего стороннего копирования с device на host и обратно. - Возможные исключения
cuda_exception Шаблон:Cuda exception brief - См. также
cuda_stream_synchronize Синхронизирует выполнение задач, связанных с указанным потоком CUDA stream, и производит дополнительную общую постобработку результатов. cuda_abort_with_error Устанавливает код ошибки с опциональным связанным текстовым описанием в глобальной памяти устройства, на котором производится вызов, и досрочно завершает выполнения ядра (kernel) CUDA.