1.OpenCL的混洗函数的参数输入为一个或两个输入向量,输出得到的向量包含输入向量的分量。

(1)allm shuffle(alln x, uintegerm mask); --创建一个向量,其中包含x的分量,顺序由mask来确定。
(2)allm shuffle2(alln x, alln y, uintgerm mask); --创建一个向量,其中包含x和y的分量,顺序由mask来确定。

shuffle函数创建一个向量,其中的分量来自输入向量x。shuffle创建一个向量,其中的分量来自向量x和向量y.两个函数的最后一个参数是屏蔽向量。这个向量决定了那些输入分量会被放到输出之中,以及他们的放置顺序。

屏蔽向量中分量的大小必须和返回向量的大小一样。但是屏蔽分量的数据类型必须是无符号型整数(uchar,ushort,uInt或ulong).返回的向量所含的分量数量和屏蔽向量的分量数量相同,但是返回分量的数据类型却是由输入向量的各个分量来决定。
k的取值与输入向量的分量数有关。如果输入向量有n个分量,那么,shuffle函数的k=log2n,即n=2K.对于shuffle函数而言,k=log2 2n,和n=2的k-1次方。

假设你想用shuffle函数,通过float4型分量来创建float8型向量。返回的向量中就会有8个分量,所以。屏蔽向量中也必须有8个分量。输出向量的每个分量都是32位宽,所以屏蔽向量中各个分量也都必须是32位宽。所以,屏蔽向量必须是uint8型向量。

shuffle2函数和shuffle函数很相似,但和后者只接受一个输入向量不同,shuffle2函数需要两个输入向量。假设,需要从两个char8型向量中选出一部分字符,放到char16型向量中。这样的话,屏蔽向量就需要包含16个分量,每个屏蔽分量都必须是1个字节,所以,屏蔽分量必须是uchar16型向量。

主机应用程序为混洗数据创建了只写缓存,然后从设备读回处理结果并打印输出。

2.选择函数:bitselect函数和select函数都与shuffle2函数很接近,他们都是通过两个输入向量来创建得到新的向量。所不同的是select函数和bitselect函数借助的是屏蔽向量中单个的位,而非分量索引。

(1)alln bitselect(alln a, alln b, u/integern mask)--根据mask中的位来选择a和b中的对应位。
(2)alln select(alln a, alln b, u/integern mask)--根据mask中的MSBs来选择a和b中的对应分量。

与shuffle和shuffle2中的屏蔽向量不同,bitselect和select中的屏蔽向量的分量可以是有符号型或无符号型整数。以select函数为例,只有各个向量分量的最高位起作用。如果向量分量的最高位为0,那么对应的输出向量分量将会是第一个输入向量,如果MSB等于1,那么输出分量就会来自第二个输入向量。

有了bitselect函数,屏蔽向量的每一位都能发挥作用,如果屏蔽位为0,第一个的对应位被作为输出,如果屏蔽位为1,第二个输入的对应位白作为输出。屏蔽向量中的分量之间的区别并不重要,唯一要紧的事就是位的先后顺序。对输出向量的各位亦是如此。select函数和bitselect函数的屏蔽分量可以通过使用像<,>,和==这样的向量关系操作符来创建得到。

3.向量测试函数:向量的函数分析的是向量的内容,返回的是它各个分量的信息。有些函数针对的是float型向量。而有些则考虑的是整型向量。但其中的vec_step函数可以用来处理任意类型的向量。
int vec_step(alln) --返回向量中分量的数量;如果有3个元素,返回4.

(1)isgreater(5.5f,4.5f)返回1;
(2)islessequal(2.3f,-2.3f)返回0;
(3)isnan(nan(0))返回1;
(4)signbit(-10.0)返回1;
(5)isnormal((float3)(rsqrt(2.0),rsqrt(2.0),0.0)返回(-1,-1,0).

最后一个函数isnormal表示的是输入向量的各个分量是否都是正规化的(非0,非正规化,无穷量,或是NaN)。注意,对于向量而言,比较操作用-1,而非1来表示真。这是因为-1的补码为全零,非常适合用来做向量的位屏蔽。

4.几何函数:两个向量的点积是一个标量,反映的是两个向量在方向上相近的程度。如果点积为整数,他们的指向会很接近,点积为0,说明两个向量相互垂直,如果点积为负数,说明两个向量指向相反。点积的计算方法是先对两个向量的对应分量分别相乘,然后再将这些乘积求和即可。例如:
如果向量p的分量分别为p.x,p.y,p.z,向量q的分量分别为q.x,q.y,q.z,那么,两个向量的点积可以表示为:
pq=(p.xq.x)+(p.yq.y)+(p.zq.z)

5.小结:
(1)OpenCL的操作符和函数所处理的操作数既可以是标量,也可以是向量。通过调用向量运算函数,可以极大的降低处理数据所需的时间。OpenCL函数通常都是内核函数首先被调用的,因为它们可以返回工作项的全局ID和局部ID等信息。全局ID可以将工作项和同意内核上执行的其他 工作项区别开。而局部ID则可以将工作项和同一工作组中的其他工作项区别开来。
(2)OpenCL并没有所谓的进位标志或溢出标志,因而了解结果溢出时,函数的饱和值返回处理就显得异常的重要。如果想要得到两个整数的完整乘积,就一定需要将mul_hi函数的返回值与操作符*的计算结果结合起来考虑。

OpenCL 混洗和选择函数、向量测试函数、几何函数相关推荐

  1. PBR中BRDF常用的各类法线分布函数、几何函数总结(unity)

    PBR中BRDF常用的各类法线分布函数.几何函数总结 一,法线分布函数(Normal Distribution Function,NDF) 1.1 各项同性NDF总结 1.1.1Blinn-Phong ...

  2. OpenCL 第5课:向量相加

    OpenCL程序分为两个部份,一部份是内核代码,负责具体算法.另一部份是主程序负责初始化OpenCL和准备数据.主程序加载内核代码,并按照即定方法进行运算. 内核代码可以写在主程序里面,也可以写在另一 ...

  3. 浅谈嵌入式MCU软件开发之startup过程详解(从复位向量到main函数之前的准备工作)

    引言 一般工程师都怕研究MCU的startup过程,其原因可能有:1.觉得没有必要,startup的过程和启动代码在新建工程时,并且已经默认加入并配置好,能够保证MCU正常工作,只要关系main()函 ...

  4. python 自定义 计算向量投影 正交 函数

    # coding=utf-8 from math import sqrt, acos, piclass Vector(object):"""docstring for V ...

  5. 小谈向量内积与函数内积

    这是我的第一篇原创博客,谈谈自己在读研中的一些小思考,希望能给大家的学习带来一点启发. 对于函数内积,我想很多理工科的都理解,最常用的就是傅里叶变换,一个信号与很多个频率的基函数相乘,也就是信号与每个 ...

  6. 2023牛客寒假算法基础集训营3 -- E-公平守望的灯塔(向量 简单几何)

    题目如下: 示例1 输入 1 0 0 1 输出 0 0 说明 输出1 1也是可以的. 思路 or 题解: 我们可以迅速找到 CCC 有两个位置满足题意,但 CCC 的坐标不一定是整数,我们需要 che ...

  7. c# 三维向量常用运算函数

    三维向量运算 求点到直线垂足交点 点到直线距离 计算向量夹角 计算AB与CD两条直线的交点 计算AB与CD两条线段的交点 判断点是否在四边形内 (abcd为正方形时不准确) 判断点p 是否在四边形ab ...

  8. 用几何画板怎么作函数图像

    随着社会的发展,现代教学很多的地方都有了多媒体教学,这就需要一些教学软件的辅助了,几何画板就是其中之一.一些老师在使用几何画板的过程中,常常涉及到函数图象的绘制.因此,很多用户对这方面教程是非常的感兴 ...

  9. 几何画板中几种作函数图像的方法

    随着社会的发展,现代教学很多的地方都有了多媒体教学,这就需要一些教学软件的辅助了,几何画板就是其中之一.一些老师在使用几何画板的过程中,常常涉及到函数图象的绘制.因此,很多用户对这方面教程是非常的感兴 ...

最新文章

  1. 控制流分析-自然循环识别
  2. C++和Python的交互
  3. nw.js启动时白屏
  4. asterisk 学习笔记1
  5. mysql写php木马_PHP一句话木马小总结与SQL语句写一句话木马
  6. win8计算机配置怎么看,win8怎么看电脑配置?win8电脑配置的查看方法
  7. 认识并学会springCloud的使用
  8. 苹果ios、ipad加密视频播放器使用教程
  9. python破解加密压缩包
  10. 开放信息抽取(OIE)系统(三)-- 第二代开放信息抽取系统(人工规则, rule-based, 先抽取关系)
  11. 数字图像处理实验03——图像几何变换
  12. 一次nginx 502 mysql not contect 排错经历
  13. 密码机分类--签名验签服务器
  14. [SAP顾问之路] ​MM货源清单及配额协议-阿龙学习MM PA 笔记(2)
  15. 前端JS-敏感词的替换
  16. python将英文字母排序_20191106-基于Python的对字母基数排序
  17. 13树莓派手动安装Home Assistant
  18. 今天才发现!微信这样发语音才好听,学会快去尝试下吧
  19. android zxing生成条形码,使用ZXing创建android条形码扫描应用程序
  20. 夏普SH330T翼聊版 带root版本 ROM下载

热门文章

  1. 关于架构师和架构设计的一些常见误解
  2. Twain的学习记录和基于Qt的相关开源项目详解
  3. 中企动力与湖南源峰现代农业公司同行 共享全网营销平台
  4. 微信资料打印,多页可以合在一张a4纸上吗
  5. 一款APK,集成Lighttpd、phpMyAdmin、Drupal7、ownCloud等等工具
  6. 产业数字化爆发,松山湖开发者村打通数实融合“最后一公里”
  7. 监听element-ui的Calendar 日历组件的上一月 今天 下一月
  8. Fullcalendar日历使用,包括视图选择、事件插入、编辑事件、事件状态更改、事件添加和删除、事件拖动调整,自定义头部,加入el-popover显示图片、图片预览、添加附件链接等,支持手机显示。
  9. Java 虹软2.1人脸本地识别
  10. Struts2.zzh