当前位置: 首页 > news >正文

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

工作项函数

应用程序使用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作为参数类型。

相关文章:

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

工作项函数 应用程序使用clEnqueueNDRangeKernel和 clEnqueueTask API将OpenCL中的数据并行和任务并行内核排队。对于一个数据并行内核&#xff08;使用clEnqueueNDRangeKernel排队等待执行)&#xff0c;应用程序会指定全局工作大小&#xff0c;即可以并行执行这个内核的工作项…...

教你接入Midjourney,不用梯子也能玩

1、效果 话不多说&#xff0c;先上最终出图效果&#xff0c; 我给的关键词是一只白色的猫 2、接入流程 API文档可以来这里查&#xff08;可以白嫖100次midjourney出图和10次gpt4体验&#xff09;&#xff0c;我这里精简一下接入流程&#xff0c;方便大家快速接入 2.1、文字生…...

Mysql中常用到的查询关键字

文章目录 1、join2、like 模糊查询3、or4、distinct5、in 包含6、group by 分组7、order by8、limit 1、join MySQL 的连接主要分为内连接和外连接。 什么是内连接&#xff1a; 取得两张表中满足存在连接匹配关系的记录。 什么是外连接&#xff1a; 不只取得两张表中满足存在…...

【ROS】ROS1工具详解

1、roscore 1.1 说明 运行roscore&#xff0c;将会启动三个功能&#xff1a;ROS Master主节点、ROS参数服务器和记录ROS日志输出节点 1.2 用法 roscore [可选参数]1.3 参数详解 -h, --help&#xff0c;帮助信息 -p PORT, --portPORT&#xff0c;指定端口号&#xff0c;默认…...

论Plant Simulation中的Init的使用及调用顺序

往期内容回顾: 一文搞懂Plant Simulation中的Rotation设置 Plant Simulation与python之Socket通信的数据交互问题 自主移动机器人模型制作 写在开头 在阅读之前,可以先尝试回答一下如下问题,如果都能答得上来,这篇文章就可以忽略不看了。 Q1:对于主模型中包括多…...

nginx实现正向代理

1.下载nginx nginx: download 选择自己需要的版版本下载下来 2.解压文件修改ngixn.conf配置文件 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout…...

【spark】

实验5 Spark Structured Streaming编程实践 实验内容和要求 0.结构化流练习任务 0.1 讲义文件源-json数据任务。按照讲义中json数据的生成及分析&#xff0c;复现实验&#xff0c;并适当分析。 &#xff08;1&#xff09;创建程序生成JSON格式的File源测试数据 import osimp…...

ADO.NET 面试题

这里写自定义目录标题 什么是 ADO.NET&#xff1f;ADO.NET 的主要特点有哪些&#xff1f;ADO.NET 的四个组件分别是什么&#xff1f;什么是 Connection 串&#xff1f;Connection 的状态有哪些&#xff1f;什么是 DataAdapter&#xff1f;DataAdapter 的作用是什么&#xff1f;…...

第三篇、基于Arduino uno,用oled0.96寸屏幕显示dht11温湿度传感器的温度和湿度信息——结果导向

0、结果 说明&#xff1a;先来看看拍摄的显示结果&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;本次使用的oled是0.96寸的&#xff0c;别的规格的屏幕不一定适用本教程&#xff0c;一般而言有显示白色、蓝色和蓝黄一起显示的&#xff0…...

什么是npu算力盒子,算力是越大越好吗?

一、什么是npu算力盒子&#xff1f;该怎么选&#xff1f; NPU&#xff08;神经处理单元&#xff09;算力盒子是一种专门用于进行人工智能计算的硬件设备&#xff0c;其中集成了高性能的NPU芯片。NPU是一种针对深度学习任务进行优化的处理器&#xff0c;具备高度并行计算和低功…...

后端返回文件流时,前端如何处理并成功下载流文件以及解决下载后打开显示不支持此文件格式

一、文件和流的关系 文件&#xff08;File&#xff09;和流(Stream)是既有区别又有联系的两个概念。 文件 是计算机管理数据的基本单位&#xff0c;同时也是应用程序保存和读取数据的一个重要场所。 存储介质&#xff1a;文件是指在各种存储介质上&#xff08;如硬盘、可…...

Ansible的脚本-playbook 剧本

目录 1.剧本&#xff08;playbook&#xff09; 1.playbook介绍 2. playbooks 的组成 3.案例&#xff1a;编写httpd的playbook 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 2.playbook的模块 1.Templates 模块 2.tags 模块 3.Roles 模块 1.…...

python lambda表达式表达式详解及应用

目录 Python Lambda表达式的优势 Lambda表达式用法 1. 当作参数传递 2. 使用Lambda表达式过滤列表 3. 使用Lambda表达式计算数学表达式 4. 使用Lambda表达式作为返回值 5. 实现匿名回调函数 Lambda表达式注意事项 总结 Lambda表达式是Python中的一种匿名函数&#xff…...

Windows 10计算机性能优化:让你的电脑更流畅

Windows 10是目前最流行的操作系统之一&#xff0c;但在长期使用过程中&#xff0c;可能会出现一些性能方面的问题。本文将为你介绍如何选择合适的Windows 10版本&#xff0c;并提供一些优化技巧&#xff0c;使你的电脑性能更加流畅。此外&#xff0c;还将特别关注游戏用户和工…...

SpringMVC底层原理源码解析

SpringMVC的作用毋庸置疑&#xff0c;虽然我们现在都是用SpringBoot&#xff0c;但是SpringBoot中仍然是在使用SpringMVC来处理请求。 我们在使用SpringMVC时&#xff0c;传统的方式是通过定义web.xml&#xff0c;比如&#xff1a; <web-app><servlet><servle…...

【CSS系列】第八章 · CSS浮动

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…...

janus videoroom 对接freeswitch conference 篇1

janus videoroom 实时性非常好&#xff0c; freeswitch conference的功能也很多 &#xff0c;有没办法集成到一块呢 让很多sip 视频终端也能显示到videoroom 里面&#xff0c; 实现方式要不两种 1.改源码实现 &#xff08;本文忽略 难度高&#xff09; 2.找一个videoroom管…...

cs109-energy+哈佛大学能源探索项目 Part-2.1(Data Wrangling)

博主前期相关的博客见下&#xff1a; cs109-energy哈佛大学能源探索项目 Part-1&#xff08;项目背景&#xff09; 这次主要讲数据的整理。 Data Wrangling 数据整理 在哈佛的一些大型建筑中&#xff0c;有三种类型的能源消耗&#xff0c;电力&#xff0c;冷冻水和蒸汽。 冷冻…...

__101对称二叉树------进阶:你可以运用递归和迭代两种方法解决这个问题吗?---本题还没用【迭代】去实现

101对称二叉树 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 101. 对称二叉树 https://leetcode.cn/problems/symmetric-tree/ 完成情况&#xff1a; 解题思路&#xff1a; 递归的难点在于&#xff1a;找到可以…...

怎么取消只读模式?硬盘进入只读模式怎么办?

案例&#xff1a;电脑磁盘数据不能修改怎么办&#xff1f; 【今天工作的时候&#xff0c;我想把最近的更新的资料同步到电脑上的工作磁盘&#xff0c;但是发现我无法进行此操作&#xff0c;也不能对磁盘里的数据进行改动。有没有小伙伴知道这是怎么一回事&#xff1f;】 在使…...

别再乱用分支了!Flowable四种网关(排他/并行/包容/事件)实战选型指南

Flowable四大网关实战选型&#xff1a;从混乱到精准的决策艺术当你在设计一个请假审批流程时&#xff0c;是否遇到过这样的困惑&#xff1a;部门经理审批后需要同时通知HR和财务&#xff0c;但某些特殊情况下又需要跳过财务直接归档&#xff1f;这种看似简单的业务需求&#xf…...

Java数组工具类实战:设计不可实例化的静态工具类

实现一个工具类 MathUtils&#xff0c;满足以下要求&#xff1a; 1. 所有方法均为静态&#xff0c;且该类不能从外部实例化&#xff08;提示&#xff1a;使用私有构造器&#xff09;。 2. 提供三个静态方法&#xff1a;- maxArray(int[] arr)&#xff1a;返回较大值&#xff1b…...

长期使用Taotoken聚合服务对项目月度账单的可预测性提升

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken聚合服务对项目月度账单的可预测性提升 在AI驱动的项目开发与运营中&#xff0c;成本控制与预算规划是团队管理者…...

巧用对称性与平均值原理:低成本实现高精度电阻分压器校准

1. 项目概述&#xff1a;用数学思维突破测量设备的精度极限在电子实验室里捣鼓精密电路&#xff0c;尤其是涉及到电压基准、信号调理或者高精度ADC前端时&#xff0c;一个绕不开的坎就是精密分压器。你可能在设计一个需要0.1%甚至更高精度的分压网络&#xff0c;但手头的万用表…...

YOLOv8晶圆体缺识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 晶圆制造过程中的缺陷检测是保证芯片良率的关键环节。本文基于YOLOv8目标检测算法&#xff0c;构建了一套针对晶圆表面9类典型缺陷的自动检测系统。所识别的缺陷类型包括&#xff1a;Center、Donut、Edge-Loc、Edge-Ring、Loc、Near-full、None、Random、Scratch。模型在…...

AI率总超标?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!

写论文效率低、熬夜赶稿、查重不过关&#xff1f;别慌&#xff01;2026 年最新 AI 论文写作工具合集来了&#xff0c;覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程&#xff0c;帮你精准匹配最适合的学术助手&#xff0c;彻底告别论文内耗&#xff01;&#x1f3c6;…...

基于MAX78000与CNN的智能螺栓巡检小车:嵌入式AI实战解析

1. 项目概述与核心思路在轨道交通的日常运维中&#xff0c;螺栓的紧固状态检查是一项繁重且关键的任务。无论是轨道上的紧固螺栓&#xff0c;还是列车转向架、轮对轴承上的关键螺栓&#xff0c;其松动或失效都可能引发严重的安全事故。传统的人工巡检方式不仅效率低下&#xff…...

Python-for-Android 完整指南:5分钟将Python应用打包为Android APK

Python-for-Android 完整指南&#xff1a;5分钟将Python应用打包为Android APK 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android Python-for-Android&#xff0…...

Python到Android的魔法之旅:5步将你的代码变成移动应用

Python到Android的魔法之旅&#xff1a;5步将你的代码变成移动应用 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 想象一下&#xff0c;你花了几个月时间精心…...

收藏干货|2026年程序员转型大模型指南,8个高薪岗位小白也能入局

分享一则身边真实职场经历&#xff0c;想必能戳中当下不少陷入职业迷茫的开发从业者。 同窗老友深耕Java后端开发整整六年&#xff0c;常年扎根业务开发模块&#xff0c;算得上行业内经验老道的技术老手。可从去年年初开始&#xff0c;他的职业焦虑感愈发强烈。传统业务开发同质…...