ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

GPU编程和流式多处理器(二)

2021-01-05 08:01:51  阅读:285  来源: 互联网

标签:Funnel 多处理器 32 有效字 流式 64 GPU 移位 乘法


GPU编程和流式多处理器(二)

2. 整数支持

SM具有32位整数运算的完整补充。

  • 加法运算符的可选否定加法
  • 乘法与乘法加法
  • 整数除法
  • 逻辑运算
  • 条件码操作
  • to/from浮点转换
  • 其它操作(例如,SIMD指令用于narrow整数,population人口计数,查找第一个零)

CUDA通过标准C运算符公开了大部分此功能。非标准运算(例如24位乘法)可以使用内联PTX汇编或内部函数进行访问。

2.1. 乘法

在Tesla级和Fermi级硬件上,乘法的实现方式有所不同。特斯拉实现了24位乘法器,而费米实现了32位乘法器。因此,SM 1.x硬件上的完整32位乘法需要四个指令。对于针对特斯拉级硬件的性能敏感代码,使用内在函数进行24位乘法是一项性能上的成功。表4显示了与乘法有关的内在函数。

表4乘法本征

 

 

 2.2. 混合(位操作)

CUDA编译器实现了许多用于位操作的内在函数,如表5所示。在SM 2.x和更高版本的体系结构上,这些内在函数映射到单个指令。在Fermi之前的体系结构上,它们是有效的,可以编译成许多指令。如有疑问,请反汇编并查看微码!64位变体在固有名称__clzll(),ffsll(),popcll()和brevll()的后面附加了“ ll ”(“ long long”为两个ell

表5位操作本征

 

 

 2.3. Funnel渠道转移(SM 3.5)

GK110添加了一条64位的“漏斗移位”指令,该指令将两个32位值连接在一起(最低有效和最高有效的一半指定为单独的32位输入,但是硬件在对齐的寄存器对上运行),将结果移位左移或右移64位值,然后返回最高有效(左移)或最低有效(右移)32位。

可以使用表6中给出的内在函数访问Funnel移位。这些内在函数在sm_35_intrinsics.h作为嵌入式设备功能(使用嵌入式PTX汇编程序)实现。默认情况下,移位计数的最低有效5位被屏蔽;_lc_RC内在移位值维持在范围0..32。

表6. Funnel平移本征

 

 

 Funnel移位的应用程序包括以下内容。

  • 多字移位操作
  • 使用对齐的加载和存储在未对齐的缓冲区之间复制内存
  • 旋转

要右移大于64位的数据大小,使用重复的__funnelshift_r()调用,从最低有效字到最高有效字进行操作。结果的最高有效字是使用运算符>>来计算的,该运算符会根据整数类型将零或符号位进行移位。若要将数据大小左移大于64位,使用重复的__funnelshift_l()调用,从最高有效字到最低有效字进行操作。结果的最低有效字是使用operator <<计算的。如果hilo参数相同,则Funnel移位会影响旋转操作。

 

标签:Funnel,多处理器,32,有效字,流式,64,GPU,移位,乘法
来源: https://www.cnblogs.com/wujianming-110117/p/14233412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有