clEnqueueNDRangeKernel 参数说明

2023-12-01 10:58

本文主要是介绍clEnqueueNDRangeKernel 参数说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCL编程中的一个核心函数是clEnqueueNDRangeKernel,对于此函数的理解,有利于对数据在host和device之间的传递进行控制。

clEnqueueNDRangeKernel(

cl_command_queue queue,

cl_kernel kernel,

cl_uint work_dims,

const size_t *global_work_offset,

const size_t *global_work_size, 

const size_t *local_work_size,

cl_uint num_events,

const cl_event *wait_list,

cl_event *event)

对于参数queue和kernel与clEnqueueTask中的一样,重点是work_dims和global_work_offset、global_work_size、local_work_size这四个新增参数的意义。

(1)work_dims:the number of dimensions in the data ( if you deal with image object, you should probably set work_dims equal 2 or 3. But for buffer objects, you can set whatever dimensionality you think best. For a buffer object containing a two-dimensional matrix, you might set work-dims equal 2.)

(2)global_work_offset:the global ID offset in each dimension 

(3)global_work_size:the number of work items in each dimension  (the global_work_size argument of clEnqueueNDRangeKernel identifies how many work-items need to be processed for each dimension. )

(4)local_work_size:the number of work_items in a work_group,in each dimension  (local_work_size less than the global_work_size)

可以通过下面的例子来说明各个参数的具体应用:

size_t dim=2;

size_t global_offset[]={3,5};

size_t global_size[]={6,4};

size_t local_size[]={3,2};

clEnqueueNDRangeKernel(queue,kernel,dim,global_offset,global_size,local_size,0,NULL,NULL);

对于上面的参数我们可以通过以下子函数在kernel里获取这些数据:

uint get_work_dim():returns the number of dimensions in the kernel's index space

size_t get_global_size(uint dim): returns the number of work items for a given dimension

size_t get_global_id(uint dim):returns the element of the work-dim's global ID for a given dimension

size_t get_global_offset(uint dim):returns the initial offset used to compute global IDs


size_t get_num_groups(uint dim): returns the number of work-groups for a given dimension

size_t get_group_id(uint dim):returns the ID of the work-item's work-group for a given dimension

size_t get_local_id(uint dim): returns the ID of the work-item within its work-group for a given dimension

size_t get_local_size(uint dim): return the number of work-items in the work-group for a given dimension


那么我们可以到如下数据:

uint dim=get_work_dim();//dim=2

size_t global_id_0=get_global_id(0);//从参数global_offset(3,5)第一个参数3开始,个数为global_size(6,4)的第一参数6

size_t global_id_1=get_global_id(1);//从参数global_offset(3,5)第二个参数5开始,个数为global_size(6,4)的第二个参数4

size_t global_size_0=get_global_size(0);//大小为global_size(6,4)的第一个参数6

size_t global_size_1=get_global_size(1);//大小为global_size(6,4)的第二个参数4

size_t offset_0=get_global_offset(0);//获取global_offset(3,5)的第一个参数3,

size_t offset_1=get_global_offset(1);//获取global_offset(3,5)的第二个参数5

size_t local_id_0=get_local_id(0);//获取local_size(3,2)的第一个参数个数(0,1,2)

size_t local_id_1=get_local_id(1);//获取local_size(3,2)的第二个参数个数(0,1)

这篇关于clEnqueueNDRangeKernel 参数说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/440893

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2