OpenCL编程指南-5.1工作项函数-整数函数-公共函数

news/2024/4/28 1:24:31/文章来源:https://blog.csdn.net/qq_36314864/article/details/130745513

工作项函数

应用程序使用clEnqueueNDRangeKernelclEnqueueTask API将OpenCL中的数据并行和任务并行内核排队。对于一个数据并行内核(使用clEnqueueNDRangeKernel排队等待执行),应用程序会指定全局工作大小,即可以并行执行这个内核的工作项总数,还会指定局部工作大小,即可以归组到一个工作组中的工作项数目。

如下描述了OpenCL内核可以调用的一些内置函数,以便得到有关工作项和工作组的信息,如工作项的全局ID和局部ID,以及全局工作大小和局部工作大小。

uint get_work_dim()                            返回使用的维度数目。这是clEnqueueNDRangeKernel中指定的work_dim参数值对于clEnqueueTask,这个函数返回1size_t get_global_size(uint dimindx)           返回为维度dimindx指定的全局工作项数目。这个值由clEnqueueNDRangeKernel的global_work_size参数给定。dimindx的合法取值范围为0 ~ get_work_dim() - 1。对于其他dimindx值,get_global_size()返回1对于clEnqueueTask,这个函数总是返回1size_t get_global_id(uint dimindx)             返回维度dimindx的唯一全局工作项ID值。全局工作项ID根据为执行内核指定的全局工作项数目来指定工作项ID。dimindx的合法取值范围为0 ~ get _work_dim() - 1。对于其他dimindx值,get_global_id()返回0对于clEnqueueTask,这个函数总是返回0size_t get_local_size(uint dimindx)            返回为维度dimindx指定的局部工作项数目。如果local_work_size不为NULL,则这个值由clEnqueueNDRangeKernel的local_work_size参数给定;否则,OpenCL实现会选择一个适当的local_work_size值。dimindx的合法取值范围为0 ~ get_work_dim() -1。对于其他dimindx值,get_local_size()返回1对于clEnqueueTask,这个函数总是返回1size_t get_local_id(uint dimindx)              返回维度dimindx的唯一局部工作项ID值(即一个特定工作组中的一个工作项)。dimindx的合法取值范围为0 ~ get_work_dim()-1。对于其他dimindx值,get_local_id()返回0对于clEnqueueTask,这个函数总是返回0size_t get_num_groups(uint dimindx)            返回为维度dimindx指定的将执行内核的工作组数目。dimindx的合法取值范围为0 ~ get_work_dim()-1。对于其他dimindx值,get_num_groups()返回1对于clEnqueueTask,这个函数总是返回1size_t get_group_id(uint dimindx)              返回工作组 ID,这是介于0 ~ get_num_groups(dimindx)-1之间的一个数。dimindx的合法取值范围为0 ~ get_work_dim() - 1。对于其他dimindx值,get_group_id()返回0对于clEnqueueTask,这个函数总是返回0size_t get_global_offset(uint dimindx)         返回clEnqueueNDRangeKernel的global_work_offset参数中指定的偏移值,dimindx的合法取值范围为0~get_work_dim()-1。对于其他dimindx值,get_global_offset()返回0对于clEnqueueTask,这个函数总是返回0

图5-1给出了一个例子,展示设备上执行的内核可以访问clEnqueueNDRangeKernel中指定的全局工作大小和局部工作大小。在这个例子中,执行内核的全局工作大小为16个工作项,工作组大小为每组8个工作项。
在这里插入图片描述
OpenCL没有描述全局ID和局部ID如何映射到工作项和工作组。例如,一个应用程序不会假设组ID为0的工作组就包含全局ID为0 ~ get_local_size(0)-1的工作项。这个映射由OpenCL实现以及执行内核的设备来确定。

整数函数

ugentype abs(gentype x)                                        返回|x|
ugentype abs_diff(gentype x, gentype y)                        返回|x-y|,无模上溢出
gentype add_sat(gentype x, gentype y)                          返回x+y, 且使结果饱和
gentype hadd(gentype x, gentype y)                             返回(x+y)>>1 中间的和无模上溢出
gentype rhadd(gentype x, gentype y)                            返回(x+y+1)>>1 中间的和无模上溢出gentype clamp(gentype x, gentype minval, gentype maxval)       返回min(max(x,minval),maxval)
gentype clamp(gentype x, sgentype minval, sgentype maxval)     如果minval>maxval 则结果未定义gentype clz(gentype x)                                         返回x中前导0的位数,从最高有效位开始
gentype mad_hi(gentype a, gentype b, gentype c)                返回mul_hi(a,b)+c
gentype mad_sat(gentype a, gentype b, gentype c)               返回a*b+c 且使结果饱和gentype max(gentype x, gentype y)                              如果x<y 返回y 否则返回x
gentype max(gentype x, sgentype y)                             gentype min(gentype x, gentype y)                              如果x<y 返回y 否则返回x
gentype min(gentype x, gentype y) gentype mul_hi(gentype x, gentype y)                           计算x*y 返回y 否则返回xgentype rotate(gentype v, gentype i)                           对于v中的各个元素,使各位按i中相应元素给定的位数左移。元素左边移出的位再从右边移入gentype sub_sat(gentype x, gentype y)                          返回x-y 并使结果饱和short upsample(char hi, uchar lo)                              如果hi和lo是标量
ushort upsample(uchar hi, uchar lo)                            result=((short)hi << 8) | lo
shortn upsample(charn hi, ucharn lo)                           result=((ushort)hi << 8) | lo
ushortn upsample(ucharn hi, ucharn lo)int upsample(short hi, ushort lo)                              result = ((int)hi << 16) | lo
uint upsample(ushort hi, ushort lo)                            result = ((uint)hi << 16) | lolong upsample(int hi, uint lo)                                 result = ((long)hi << 32) | lo
ulong upsample(uint hi, uint lo)                               result = ((ulong)hi << 32) | lo
longn upsample(intn hi, uintn lo)                              如果hi和lo是标量,则对于矢量的各个元素:
ulongn upsample(uintn hi, uintn lo)                            result[i] = ((short)hi[i] << 8) | lo[i]result[i] = ((ushort)hi[i] << 8) | lo[i]result[i] = ((int)hi[i] << 16) | lo[i]result[i] = ((uint)hi[i] << 16) | lo[i]result[i] = ((long)hi[i] << 32) | lo[i]result[i] = ((ulong)hi[i] << 32) | lo[i]gentype mad24(gentype x, gentype y, gentype z)                 使用mul24将两个24位整数值x和y相乘并把32位整数结果与32位整数z相加    gentype mul24(gentype x, gentype y)                            将两个24位整数值x和y相乘。尽管×和y是32位整数,但是只使用其低24位完成乘法运算。只有当x和y中的值在[-2^23,2^23 -1]范围内(如果x和y是有符号整数)或者在[0, 224-1]范围内(如果×和y是无符号整数)时,才使用mu124。如果x和y不在这个范围内,乘法结果由具体实现定义

使用泛型类型名gentype表示函数,可以取 char、char2、char3、char4、char8、char16、uchar、uchar2、uchar3、 uchar4、uchar8、uchar16、short、short2、short3、short4、short8、short16、ushort、ushort2、ushort3、ushort4、ushort8、ushort16、int、int2、int3、int4、int8、int16、uint、uint2、uint3、uint4、uint8、uint16、long、long2、long3、long4、long8、long16、ulong、ulong2、ulong3、ulong4、ulong8或ulong16作为参数类型。

使用泛型类型名ugentype指示无符号的gentype。例如,如果 gentype是 char4,ugentype就是uchar4。另外使用泛型类型名sgentype指示有符号的gentype。

使用泛型类型名sgentype指示函数可以取一个标量数据类型(即char、uchar、short、ushort、int、uint、long或ulong)作为参数类型。对于取gentype和sgentype参数的内置整数函数,gentype参数必须是sgentype参数的矢量或标量。例如,如果sgentype是uchar,gentype则必须是uchar、uchar2、uchar3、uchar4、uchar8或uchar16。

以下是一些可用的宏名。这些值为常量表达式,适用于#if处理指令。

#define CHAR_BTT    8
#define CHAR__MAX   SCHAR__MAX
#define CHAR_MIN    SCHAR_MIN
#define INT_MAX     2147483647
#define INT_MIN     (-2147483647-1)
#define LONG_MAX    Ox7ffffffffffffffL
#define LONG_MIN    (-0x7fffffffffffffffL-1)
#define SCHAR_MAX   127
#define sCHAR_MIN   (-127 - 1)
#define SHRT_MAX    32767
#define SHRT_MIN    (-32767 - 1)
#define UCHAR__MAX  255
#define USHRT_MAX   65535
#define UINT_MAX    Oxffffffff
#define ULONG_MAX   OxffffffffffffffffUL

公共函数

gentype clamp(gentype x, gentype minval, gentype maxval)            返回fmin(fmax(x,minval),maxval)
gentype clamp(gentypef x, float minval, float maxval)               如果minval>maxval 结果未定义
gentype clamp(gentyped x, double minval, double maxval)gentype degrees(gentype radians)                                    将弧度转换为度,即(180/p)*radiansgentype max(gentype x, gentype y)                                   如果x<y 则返回y; 否则返回x。
gentypef max(gentypef x, float y)                                   这与fmax类似, 只不过如果x或y为infinite或NaN时返回值未定义
gentyped max(gentyped x, double y)gentype min(gentype x, gentype y)                                   如果y<x则返回y; 否则,返回x。
gentypef min(gentypef x, float y)                                   这与fmin类似,只不过如果x或y为infinite或NaN时返回值未定义
gentyped min(gentyped x, double y)gentype mix(gentype x,gentype y.gentype a)                          返回x和y的线性混合,实现为x + (y - x)* a
gentypef mix(gentypef x,float y,gentype a)                          如果a不在此范围内,返回值未定义
gentyped mix(gentyped x, double y,gentype a)                        a必须是范围0.0...1.0中的一个值。gentype radians(gentype degrees)                                    将degrees转换为弧度,即(p/180)*degreesgentype step(gentype edge, gentype x)                               如果x<edge返回0.0; 否则返回1.0
gentypef step(float edge, gentypef x)                               step函数可以用于在任意点创建一个不连续的跳步
gentyped step(double edge, gentyped x)gentype smoothstep(gentype edge0, gentype edgel, gentype x)         如果x≤edge0返回0.0,如果x>=edge1 则返回1.0;
gentypef smoothstep(float edge0, float edgel, gentypef x)           edge0<x<edge1时,在0~1之间完成一个平滑hermite插值。
gentyped smoothstep(double edge0, double edgel, gentyped x)         这在需要一个平滑过渡的阈值函数时很有用
t与x类型相同时,等价于:t = clamp((x-edgeO) / (edgel-edge0),0,1);return t * t * (3 - 2 * t)如果edge0≥ edgel或者x、edge0或edge1 为NaN 时,结果未定义gentype sign(gentype x)                                             如果x>0,返回1.0如果x=-0.0,返回-0.0;如果x=+0.0,返回+0.0;如果x<0,则返回-1.0;如果x是NaN,则返回0.0

使用泛型类型名gentype指示函数可以取float、float2、float3、float4、float8或float16为参数类型,如果支持双精度扩展,还可以取double、double2、double3、double4、double8或double16作为参数类型。

使用泛型类型名gentypef指示函数可以取float、float2、float3、float4、float8或float16作为参数类型,使用泛型类型名gentyped指示函数可以取double、double2、double3、double4、double8或double16作为参数类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_303098.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab写入txt文件进行自动化测试总结:fopen、fclose和fprintf的用法

前言 日常学习的过程中使用了matlab读写txt文件&#xff0c;记录一下基本函数的使用&#xff0c;本文主要介绍了fopen、fclose和fprintf几个函数&#xff0c;这些主要是面向txt格式的文件保存数据。还有其他几个函数&#xff0c;比如fread和fwrite&#xff0c;用过但是他们是针…

关于江苏专转本的十大真相,值得一看

【真相1】专转本考试题主要是大学相关科目的骨干老师出的。他们较长时间从事相应课程教学&#xff0c;专业领域较宽&#xff0c;学术造诣较高。具有副高及以上职称&#xff0c;年龄—般在55周岁以下。VX:hhkb5200【真相2】专转本考试题"紧扣《考试大纲》&#xff0c;大家要…

【Arduino疑难杂症】:报错:上传失败:上传错误:exit status Oxffffffff

项目场景&#xff1a; 制作arduino宠物监控系统项目的过程中&#xff0c;摄像头方面使用到了ESP32Cam&#xff0c;制作过程中遇到了如下问题。 问题描述 [ERRORJ: (annot configure port&#xff0c; something wert wrong. 0riginal message: WindowsError(31,"xclxacxb…

【研发工具】Yapi接口管理平台内网Centos8下搭建

1 环境依赖安装 环境要求 nodejs&#xff08;7.6) &#xff08;本文安装12.18.3&#xff09; mongodb&#xff08;2.6&#xff09;&#xff08;本文安装5.0.17&#xff09; 1.1 安装Nodejs 1.1.1 下载安装包 下载地址&#xff1a;https://nodejs.org/zh-cn/download/这里下载…

pnpm命令介绍

一、安装pnpm npm install -g pnpm 二、设置镜像源 pnpm config set registry https://registry.npm.taobao.org/ # 检查 pnpm config get registry 三、常用命令 # 查看ts-node的所有版本 pnpm view ts-node versions # 等价与npm i nodemon -g pnpm add nodemon -g # npm i p…

OMG Data Distribution Service(DDS)规范解读-Part4

目录 2.4 Listeners, Conditions, and Wait-sets2.4.1 Communication Status2.4.2 Changes in Status2.4.2.1 Plain communication statuses2.4.2.2 Read Communication Statuses 2.2.4.3 Access through Listeners2.2.4.3.1 Listener Access to Plain Communication Status2.2…

chatgpt赋能Python-python3_8怎么安装matplotlib

Python3.8怎么安装Matplotlib Matplotlib是一个非常流行的Python可视化库&#xff0c;它可以用来创建各种类型的图形&#xff0c;包括线图、散点图、直方图、饼图和热图等等。在本文中&#xff0c;我们将介绍如何在Python3.8中安装Matplotlib&#xff0c;以及如何使用它来绘制…

chatgpt赋能Python-python3_7_1如何使用

Python 3.7.1使用指南 Python自从出现以来&#xff0c;已经成为了一个非常流行的编程语言&#xff0c;每年都会更新版本以满足不断变化的市场需求。其中最新版本是Python 3.7.1&#xff0c;它与其前身相比提供了许多改进和新功能&#xff0c;同时也解决了一些已知的问题。本文…

Spark大数据处理讲课笔记4.6 Spark SQL数据源 - JDBC

文章目录 零、本讲学习目标一、Spark SQL读取关系数据库二、Spark SQL JDBC连接属性三、创建数据库与表&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建学生表&#xff08;二&#xff09;创建成绩表 四、读取和写入数据库表&#xff08;一&#xff09;利用…

Xcode真机运行报错:Failed to prepare the device for development解决方法

一、遇到的问题 运行Xcode然后打包APP&#xff0c;结果Xcode报错&#xff0c;如下&#xff1a; Failed to prepare the device for development. This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You …

macOS Ventura 13.4 (22F66) 正式版发布,ISO、IPSW、PKG 下载

本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 请访问原文链接&#xff1a…

chatgpt赋能Python-python3_8_5安装后怎么打开

Python3.8.5安装后怎么打开&#xff1a;简易步骤指南 Python是一种高级编程语言&#xff0c;被广泛用于数据分析、机器学习、自动化、网络编程等多个方面。Python语言优雅简洁&#xff0c;易于上手&#xff0c;是编程初学者的最佳入门语言之一。本文将介绍Python3.8.5版本的安…

管道通信,共享内存

什么是有名管道 有名管道&#xff08;Named Pipe&#xff09;是一种特殊的文件类型&#xff0c;也称为 FIFO。它提供了一种进程间通信的机制&#xff0c;允许不相关的进程通过读写共享的文件来交换数据。 与普通文件不同的是&#xff0c;有名管道在文件系统中存在一个路径名&…

redis单机版本Java代码实践

pom依赖 引入redis的starter以及commons-pool2的依赖&#xff0c;commons-pool2是配置连接池需要使用的&#xff0c;不引入&#xff0c;只有连接池配置是不会创建连接池的 <!-- redis --><dependency><groupId>org.springframework.boot</groupId><…

基于协同过滤的推荐算法

基于协同过滤的推荐算法 基于协同过滤&#xff08;CF&#xff09;的推荐基于近邻的协同过滤基于用户的协同过滤&#xff08;User-CF&#xff09;基于物品的协同过滤&#xff08;Item-CF&#xff09;User-CF 和 Item-CF 的比较基于协同过滤的推荐优缺点基于模型的协同过滤隐语义…

python类的高级函数

类的高级函数 __str__ 如果定义了该函数&#xff0c;当print当前实例化对象的时候&#xff0c;会返回该函数的return信息 用法&#xff1a; def __str__(self): return str_type 参数&#xff1a;无 返回值&#xff1a;一般返回对于该类的描述信息 __getattr__ 当调用的…

JavaWeb-RequestResponse的使用

Request&Response 今日目标 掌握Request对象的概念与使用掌握Response对象的概念与使用能够完成用户登录注册案例的实现能够完成SqlSessionFactory工具类的抽取 1&#xff0c;Request和Response的概述 Request是请求对象&#xff0c;Response是响应对象。这两个对象在我们…

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-7

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-7 类文件结构概述无关性的基石 虚拟机类加载机制概述类加载的时机 类文件结构 代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步 概述 我们写的程…

在阿里做了6年软件测试,4月无情被辞,想给划水的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入阿里&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是6年的工作经验吧。 这6年之间完成了一次…

060:cesium设置网格Grid材质

第060个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置网格材质,请参考源代码,了解GridMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共93行)相关API参考:专栏目标示例效…