当前位置: 首页 > 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;】 在使…...

Docker 容器中运行 AI CLI 工具:用户隔离与持久化卷实战指南捉

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单&#xff0c;下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...

自动控制理论(12)——控制系统校正的工程实践与优化

1. 控制系统校正的工程意义 在工业自动化领域&#xff0c;控制系统就像人体的神经系统&#xff0c;需要精确调节才能保证设备稳定运行。想象一下化工反应釜的温度控制&#xff1a;如果响应太慢会导致反应不充分&#xff0c;响应太快又可能引发剧烈振荡。这就是为什么我们需要校…...

AI原生大数据架构迁移避坑指南(含奇点大会实测的6类典型失败场景、ROI测算模板与12周渐进式演进路线图)

第一章&#xff1a;AI原生大数据架构迁移避坑指南总览 2026奇点智能技术大会(https://ml-summit.org) AI原生大数据架构迁移不是简单的组件替换&#xff0c;而是数据范式、计算语义与工程治理的系统性重构。传统ETL流水线在面对LLM微调数据准备、向量实时索引、多模态特征联合…...

只知道 `<ul>` 和 `<ol>`?扒一扒京东大厂都在用的“冷门”排版神标签(附实战代码)

我在审查新手代码或者做渗透测试时,经常会去扒各大网站的前端源码。 我发现一个非常有意思的现象:很多刚入行的新手在写网页列表时,无论遇到什么排版,脑子里永远只有 <ul>、<li> 和 <div>。特别是在做类似“京东首页左侧分类导航”或者“人物名片介绍”…...

科技向善:我们可以用技术为社会做些什么?

科技向善&#xff1a;我们可以用技术为社会做些什么&#xff1f; 在数字化浪潮席卷全球的今天&#xff0c;科技已不仅仅是提升效率的工具&#xff0c;更成为推动社会进步的重要力量。从人工智能到大数据&#xff0c;从区块链到物联网&#xff0c;技术的快速发展为人类生活带来…...

如何通过二进制补丁技术实现微信QQ消息防撤回功能

如何通过二进制补丁技术实现微信QQ消息防撤回功能 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/GitHub_Trendi…...

为什么选择chrony而不是ntpd?Rocky Linux时间同步服务深度对比

为什么选择chrony而不是ntpd&#xff1f;Rocky Linux时间同步服务深度对比 在现代IT基础设施中&#xff0c;精确的时间同步是确保系统可靠性和安全性的基石。从分布式数据库的事务一致性到安全证书的有效期验证&#xff0c;毫秒级的时间偏差都可能导致严重的业务中断。Rocky L…...

LinkSwift:八大网盘直链解析工具,告别下载限速的终极方案

LinkSwift&#xff1a;八大网盘直链解析工具&#xff0c;告别下载限速的终极方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移…...

Pixel Aurora Engine多场景:TikTok复古滤镜素材、Discord服务器主题包生成

Pixel Aurora Engine多场景&#xff1a;TikTok复古滤镜素材、Discord服务器主题包生成 1. 像素极光引擎简介 Pixel Aurora Engine是一款专为创意工作者设计的AI像素艺术生成工具。它采用复古游戏机风格的界面设计&#xff0c;让用户仿佛在操作一台来自80年代的未来主义游戏主…...

Graphormer部署案例:科研云平台中Graphormer作为标准化AI分子服务模块

Graphormer部署案例&#xff1a;科研云平台中Graphormer作为标准化AI分子服务模块 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等…...