OpenCL编程指南-4.4矢量操作符

news2024/11/29 16:31:28

矢量操作符

如下描述了可用于矢量数据类型或矢量和标量数据类型组合的各类操作符。
在这里插入图片描述
在这里插入图片描述

算术操作符

算术操作符(加(+)、减(–)、乘(*)和除(/)),可以作用于内置整数、浮点标量和矢量数据类型。取余操作符(%)只能用于内置整数标量和矢量数据类型。可能有以下情况:
1)两个操作数都是标量。在这种情况下,操作遵循C99规则。
2)一个操作数是标量,另一个是矢量。可以根据常规算术转换将这个标量操作数转换为矢量操作数使用的元素类型,然后宽化为一个矢量,这个新矢量与矢量操作数的元素个数相同。将逐分量地应用操作,得到一个相同大小的矢量。
3)两个操作数是相同类型的矢量。在这种情况下,会逐分量地应用操作,得到相同大小的矢量。

对于整数类型,除以0或者可能得到越界值的除法不会导致异常,而只是得到一个未定义值。对于浮点类型,根据IEEE 754标准的规定,除以0会得到±∞或NaN。

可以通过几个例子来说明一个操作数是标量而另一个操作数是矢量时,算术操作符如何工作,或者两个操作数都是矢量时,算术操作符如何工作。

图4-3中的第一个例子显示了将两个矢量相加:
在这里插入图片描述

int4 v_iA = (int4)(7, -3, -2, 5);
int4 v_iB = (int4)(1, 2, 3, 4);
int4 v_iC = v_iA + v_iB;

相加的结果存储在矢量v_iC中:(8, -1, 1, 9)。

图4-4中的例子显示了一个乘法运算,这里操作数分别为一个矢量和一个标量。在这个例子中,只是将标量按矢量的大小宽化,再将各矢量的分量相乘:
在这里插入图片描述

float4 vf = (float4)(3.0f, -1.0f, 1.0f, -2.0f);
float4 result = vf * 2.5f;

存储在矢量result中的乘法结果是(7.5f, -2.5f, 2.5f, -5.0f)

图4-5中的例子显示了可以将一个矢量和一个标量相乘,这里标量会隐式地转换和宽化:
在这里插入图片描述

float4 vf = (float4)(3.0f, -1.0f, 1.0f, -2.0f);
float4 result = vf * 2;

存储在矢量result中乘法结果是(6.0f, -2.0f, 2.0f, -4.0f)

关系和相等操作符

关系操作符(大于(>)、小于(<)、大于或等于(>=)和小于或等于(<= )),以及相等操作符(等于(==)和不等于(!=)),可以作用于内置整数、浮点标量和矢量数据类型。结果是一个整数标量或矢量类型。

可能有以下情况:
1)两个操作数都是标量。在这种情况下,操作遵循C99规则。
2)一个操作数是标量,另一个操作数是矢量。可以根据常规算术转换将标量操作数转换为矢量操作数使用的元素类型,然后宽化为一个矢量,这个新矢量与矢量操作数的元素个数相同。逐分量地应用操作,得到相同大小的矢量。
3)两个操作数是相同类型的矢量。在这种情况下,逐分量地应用操作,得到相同大小的矢量。

如果两个源操作数都是标量,结果就是一个类型为int的有符号整型标量;如果操作数是矢量,则结果是与矢量源操作数大小相同的、有符号的整数类型矢量;如果源操作数是charn,或ucharn,则结果类型为charn;如果源操作数为 shortnushortnhalfn,则结果类型为shortn;如果源操作数为intnuintnfloatn,结果类型就是intn;如果源操作数为longnulongndoublen,则结果类型为longn

对于标量类型,如果指定的关系为假,则这些操作符返回0;如果指定关系为真,则返回1。对于矢量类型,如果指定关系为假,则这些操作符返回0;如果指定的关系为真,则操作符返回-1 (即,所有位均设置为1)。如果某一个或两个参数不是一个数(NaN),则关系操作符总返回0。如果某一个或两个参数不是一个数(NaN),相等操作符“等于”(==)总返回0。如果某一个或两个参数不是一个数(NaN)时,“不等于”操作符(! =)返回1(对于标量源操作数)或-1(对于矢量源操作数)。

位操作符

位操作符(位与(&)、位或((|)、异或(^)和非(~)),可以作用于内置整数标量和矢量数据类型。结果是一个整数标量或矢量类型。可能有以下情况:
1)两个操作数都是标量。在这种情况下,操作遵循C99规则。
2)一个操作数是标量,另一个是矢量。可以根据常规算术转换将这个标量操作数转换为矢量操作数使用的元素类型,然后宽化为一个矢量,这个新矢量与矢量操作数的元素个数相同。逐分量地应用操作,得到一个相同大小的矢量。
3)两个操作数是相同类型的矢量。在这种情况下,逐分量地应用操作,得到相同大小的矢量。

逻辑操作符

逻辑操作符(与(&&)或(I)),可以作用于内置整数标量和矢量数据类型。结果是一个整数标量或矢量类型。可能有以下情况:
1)两个操作数都是标量。在这种情况下,操作遵循C99规则。
2)一个操作数是标量,另一个是矢量。可以根据常规算术转换将这个标量操作数转换为矢量操作数使用的元素类型,然后宽化为一个矢量,这个新矢量与矢量操作数的元素个数相同。逐分量地应用操作,得到一个相同大小的矢量。
3)两个操作数是相同类型的矢量。在这种情况下,逐分量地应用操作,得到相同大小的矢量。

如果两个源操作数都是标量,逻辑操作符“与”(&&)只有在左操作数不等于О的情况下才会计算右操作数,逻辑操作符“或”(||)仅当左操作符等于0的情况下才会计算右操作数。如果其中一个或两个源操作数为矢量类型,那么两个操作数都会计算。

如果两个源操作数都是标量,结果是一个int类型的有符号整数标量;如果源操作数是矢量,结果是有相同大小的有符号整数类型矢量。如果源操作数是charnucharn,结果类型为charn;如果源操作数为 shortnushortn,则结果类型为shortn;如果源操作数为intnuintn,结果类型就是intn;如果源操作数为longnulongn,则结果类型为longn

对于标量类型,如果指定的关系为假,这些操作符会返回0;如果指定关系为真,则返回1。对于矢量类型,如果指定关系为假,则这些操作符会返回0;如果指定的关系为真,则操作符返回-1(即,所有位均设置为1)。

逻辑排除操作符(^^)保留,以备将来使用。

条件操作符

算术一元操作符(+和-)作用于内置标量和矢量数据类型。

算术后自增和前自增(++)以及后自减和前自减(--)操作符作用于内置标量和矢量数据类型(但不包括内置浮点标量和矢量数据类型)。这些操作符会对其操作数逐分量地进行处理,最后得到与所处理操作数相同的类型。

逻辑一元操作符“非”(!)作用于内置标量和矢量数据类型(但不包括内置浮点标量和矢量数据类型)。这些会对其操作数逐分量地进行处理。如果源操作数是标量,则结果是一个int类型的有符号整数标量;如果源操作数是矢量,则得到相同大小的有符号整数类型矢量;如果源操作数是charnucharn,结果类型为charn;如果源操作数为shortnush-ortn,则结果类型为shortn;如果源操作数为intnuintn,结果类型就是intn;如果源操作数为longnulongn,则结果类型为longn

对于标量类型,如果指定的关系为假,则这些操作符会返回0;如果指定关系为真,则返回1。对于矢量类型,如果指定关系为假,则这些操作符会返回0;如果指定的关系为真,则操作符返回-1(即,所有位均设置为1)。

逗号操作符(,)作用于表达式,返回一个逗号分隔的表达式列表中最右表达式的类型和值。所有表达式都会从左到右按顺序计算。例如:

//comma acts as a separator not an operator
int a = 1, b = 2, c = 3, x;
//comma acts as an operator
x = a += 2, a + b; //a=3,x=5
x = (a, b, c); //x=3

sizeof操作符会得到其操作数的大小(字节数)。结果是一个整数值。如果操作数的类型为charuchar,则结果为1;如果操作数类型为shortushorthalf,则结果为2;如果操作数类型为intuintfloat,则结果为4;如果操作数类型为longulongdouble,则结果为8;如果操作数是一个矢量类型(包含3个分量的矢量除外),则结果是(矢量中分量个数)*(各标量分量的大小),对于包含3个分量的矢量,结果则是4*(各标量分量的大小);如果操作数是一个数组类型,则结果是该数组中的总字节数;如果操作数是一个结构或联合类型,则结果就是这个对象中的总字节数,包括内部或尾部填充的字节。

image2d_timage3d_tsampler_tevent_t类型应用sizeof操作符的行为由具体实现定义。对于某些实现,sizeof(sampler_t) = 4,而在有些实现中,这个操作可能会导致一个编译时错误。为了保证跨OpenCL实现的可移植性,建议不要对这些类型使用sizeof操作符。

一元操作符(*)指示间接性。如果操作数指示一个对象,则结果是一个指示该对象的左值;如果操作数类型为“指向某个类型type的指针”,那么结果类型就是type。如果将一个非法值赋给该指针,则间接操作符的行为未定义。

一元操作符(&)返回其操作数的地址。

赋值操作符

为变量名赋值的操作由赋值操作符(=)完成,如:

lvalue = expression

赋值操作符将expression的值存储在lvalue 中。

可能出现以下情况:
1)两个操作数都是标量。在这种情况下,操作遵循C99规则。
2)一个操作数是标量,另一个是矢量。这个标量操作数显式转换为矢量操作数使用的元素类型,然后宽化为一个矢量,这个新矢量与矢量操作数的元素个数相同。逐分量地应用操作,得到一个相同大小的矢量。
3)两个操作数是相同类型的矢量。在这种情况下,逐分量地应用操作,得到相同大小的矢量。

以下表达式是等价的:

lvalue op = expression
lvalue = lvalue op expression

lvalueexpression 必须同时满足op和赋值操作符(=)的要求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

次郎家书——第一天关于数值计算方法考试后——的一些思考和反思

考试的复盘&#xff1a;传送门&#xff1a;数值计算方法考试复盘 对此次考试的看法&#xff1a; 这次考试考试内容虽然有没复习到的如复合辛普森和复合梯形公式还有最小二乘的推广(这里上课的时候听懂了但是复习的时候嫌麻烦没看原来&#xff0c;结果大题是真的写错了&#…

nuxt 一直报错 http://localhost:24678/_nuxt/

解决&#xff1a; 这个错误可能是由于Nuxt.js应用程序无法正确加载/_nuxt/路径下的资源而导致的。解决这个问题的方法有以下几种&#xff1a; 1.检查nuxt.config.js文件 在nuxt.config.js文件中&#xff0c;检查build.publicPath属性是否设置为正确的公共路径。例如&#xff1a…

UART驱动情景分析-read

一、源码框架回顾 shell读数据&#xff0c;一开始的时候没有就休眠。数据从串口发送到驱动&#xff0c;驱动接收到中断&#xff0c;驱动读取串口数据&#xff0c;这个数据会传给行规程。 行规程获取到数据后&#xff0c;会回显。按下删除就删除一个字符&#xff0c;按下回车&am…

pytorch 测量模型运行时间,GPU时间和CPU时间,model.eval()介绍

文章目录 1. 测量时间的方式2. model.eval(), model.train(), torch.no_grad()方法介绍2.1 model.train()和model.eval()2.2 model.eval()和torch.no_grad() 3. 模型推理时间方式4. 一个完整的测试模型推理时间的代码5. 参考&#xff1a; 1. 测量时间的方式 time.time() time.…

使用qt creator编译zlib

zlib被设计为一个免费的&#xff0c;通用的&#xff0c;法律上不受限制的-即不受任何专利保护的无损数据压缩库&#xff0c;几乎可以在任何计算机硬件和操作系统上使用。 官网&#xff1a;http://www.zlib.net/ 下载zlib源码:http://www.zlib.net/zlib1213.zip 备用地址&#x…

关于使用API接口获取商品数据的那些事

随着电商行业的不断发展&#xff0c;越来越多的企业和个人需要获取各大电商平台上的商品数据。而最常用的方法是使用API接口获取商品数据。本文将为您介绍使用API接口获取商品数据的步骤和注意事项。 一、选择API接口 首先需要了解各大电商平台提供的API接口&#xff0c;目前…

由浅入深理解java集合(一)——集合框架 Collection、Map

Java 提供了一套完整的集合类&#xff08;也可以叫做容器类&#xff09;来管理一组长度可变的对象&#xff08;也就是集合的元素&#xff09;&#xff0c;其中常见的类型包括 List、Set、Queue 和 Map。从我个人的编程经验来看&#xff0c;List 的实现类 ArrayList 和 Map 的实…

华为OD机试 - 查找树中元素(Python)

题目描述 已知树形结构的所有节点信息,现要求根据输入坐标(x,y)找到该节点保存的内容值,其中x表示节点所在的层数,根节点位于第0层,根节点的子节点位于第1层,依次类推;y表示节点在该层内的相对偏移,从左至右,第一个节点偏移0,第二个节点偏移1,依次类推; 举例:…

手把手教你用代码画架构图 | 京东云技术团队

作者&#xff1a;京东物流 覃玉杰 1. 前言 本文将给大家介绍一种简洁明了软件架构可视化模型——C4模型&#xff0c;并手把手教大家如何使用代码绘制出精美的C4架构图。 阅读本文之后&#xff0c;读者画的架构图将会是这样的&#xff1a; 注&#xff1a;该图例仅作绘图示例使…

【入土级】详解C++类对象(中篇)

目录 前言&#xff1a;类的6个默认成员函数 一&#xff0c; 构造函数 1. 概念 2. 特性 二&#xff0c; 析构函数 2.1 概念 2.2 特性 2.3 牛刀小试 三&#xff0c; 拷贝构造函数 3.1概念 3. 2 特点 四&#xff0c; 赋值运算符重载 4. 1 运算符重载 五&#xff0…

网站测试的主要方法

网站测试的主要方法 网站测试是保证网站质量的重要手段&#xff0c;通过对网站进行测试可以及时发现问题并修复&#xff0c;提高用户体验和网站的可靠性。本文将介绍网站测试的主要方法。 1.功能测试&#xff1a;测试网站的所有功能是否正常。通过模拟用户的操作&#xff0c;确…

最新水果FLStudio21中文版下载及快捷键操作教程

任何一款软件&#xff0c;其快捷键永远扮演着至关重要的作用&#xff0c;熟练运用快捷键不仅能够节省时间&#xff0c;提高工作效率&#xff0c;还有助于熟练掌握所使用的软件。作为一款功能强大的音乐编曲软件&#xff0c;FL Studio有着大量的快捷键&#xff0c;这些快捷键在一…

【ArcGIS Pro二次开发】(28):用地图斑导出用地用海汇总表

本工具的作用是将现状用地或规划用地导出Excel格式的用地用海汇总表。 实现这个功能的Arcpy脚本工具我之前已经做过&#xff0c;详见&#xff1a;ArcGisPro脚本工具【8】——用地图斑导出用地用海汇总表 这次试着在ArcGIS Pro SDK中来实现同样的功能。 一、要实现的功能 如上…

【存储数据恢复】H3C存储卷中的数据恢复案例

存储数据恢复环境&故障&#xff1a; H3C FlexStorage某型号存储&#xff0c;25块磁盘组建的RAID5&#xff0c;其中包含一块热备盘。 工作人员误操作将存储设备中原先的2个卷删除&#xff0c;删除之后又使用和删除2个卷同样大小的空间重建了一个卷。用户希望恢复删除的2个卷…

springboot缓存

1. 认识缓存 一级缓存 - 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质 - 使用缓存可以有效的减少低速数据读取过程的次数&#xff0c;提高系统性能 Service public class BookServiceImplCache implements BookService {Autowiredprivate BookDao book…

玩转服务器之环境篇:PHP和Python环境部署指南 | 京东云技术团队

前几篇文章中讲解了如何搭建docker和Java Web环境的方法&#xff0c;本篇文章来教大家搭建一个好的PHP和Python环境&#xff0c;可以帮助开发和运行PHP和Python应用程序&#xff0c;使其更加高效和稳定。 一、 PHP环境介绍 好的开发环境无疑会大大提升编码效率&#xff0c;近…

搭载RK3588的Orange Pi 5 Plus来了!首发“亲民价”649元起!

Orange Pi 5 Plus来了。令人惊艳的Orange Pi 5 家族将又添一个重量级新成员! 作为香橙派首款搭载瑞芯微RK3588的开发板&#xff0c;Orange Pi 5 Plus将成为顶级高性能开发板的臻选。先说几个令人惊艳的亮点&#xff1a;两个PCIe扩展的2.5G以太网接口&#xff1b;eMMC 闪存插座…

黑马Redis笔记高级篇 | 分布式缓存

黑马Redis笔记高级篇 | 分布式缓存 1、Redis持久化&#xff08;解决数据丢失&#xff09;1.1 RDB持久化1.1.1 定义1.1.2 异步持久化bgsave原理 1.2 AOF持久化1.3 RDB和AOF比较 2、Redis主从&#xff08;解决并发问题&#xff09;2.1 搭建主从架构2.2 主从数据同步原理2.2.1 全量…

这样连交换机和路由器,多少网工没试过?

大家好&#xff0c;我是老杨。 交换机已经说过很多遍了&#xff0c;园区组网案例、交换机级联、光模块配件解读等等…… 有群友说想要看更多的配置案例&#xff0c;这次就给你说说&#xff0c;交换机和路由器对接上网配置。 还搞不明白交换机和路由器的&#xff0c;复习一下…

webpack开发服务器配置

&#x1f482; 个人网站:[【紫陌】【笔记分享网】](http://zimo.aizhaiyu.com/) &#x1f485; 想寻找共同学习交流、共同成长的伙伴&#xff0c;[请点击【前端学习交流群】](http://zimo.aizhaiyu.com/wechat/wechat.html) 文章最后有作者l联系方式&#xff08;备注进群&am…