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

相关文章

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用