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 <<计算的。如果hi和lo参数相同,则Funnel移位会影响旋转操作。
GPU编程和流式多处理器(二)的更多相关文章
- GPU编程和流式多处理器(六)
GPU编程和流式多处理器(六) 5. 纹理和表面 读取和写入纹理和表面的指令,所引用的隐式状态,比其他指令要多得多.header中包含诸如基地址,尺寸,格式和纹理内容的解释之类的参数,该header是 ...
- GPU编程和流式多处理器(五)
GPU编程和流式多处理器(五) 4. 条件代码 硬件实现了"条件代码"或CC寄存器,其中包含用于整数比较的常用4位状态向量(符号,进位,零,溢出).可以使用比较指令(例如ISET) ...
- GPU编程和流式多处理器(四)
GPU编程和流式多处理器(四) 3.2. 单精度(32位) 单精度浮点支持是GPU计算的主力军.GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还 ...
- GPU编程和流式多处理器(三)
GPU编程和流式多处理器(三) 3. Floating-Point Support 快速的本机浮点硬件是GPU的存在理由,并且在许多方面,它们在浮点实现方面都等于或优于CPU.全速支持异常可以根据每条 ...
- GPU编程和流式多处理器
GPU编程和流式多处理器 流式多处理器(SM)是运行CUDA内核的GPU的一部分.本章重点介绍SM的指令集功能. 流式多处理器(SM)是运行我们的CUDA内核的GPU的一部分.每个SM包含以下内容. ...
- GPU编程和流式多处理器(七)
6. 杂项说明 6.1. warp级原语 warp作为执行的原始单元(自然位于线程和块之间),重要性对CUDA程序员显而易见.从SM 1.x开始,NVIDIA开始添加专门针对thread的指令. Vo ...
- Java8新特性 Stream流式思想(二)
如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...
- GPU 编程入门到精通(五)之 GPU 程序优化进阶
博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...
- GPU 编程入门到精通(四)之 GPU 程序优化
博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...
随机推荐
- Python 巡检接入钉钉机器人
前段时间,为了快速实现巡检服务器设备的健康状态,我简单的写了一个巡检工具,该工具已经可以满足我的大部分需求了,不过,每次都要自己手动去点击巡检才能知道今天设备的状态,由于每天巡检严重影响我学习逆向技术 ...
- hdu 3062 基础的2sat
题意: Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- LA3135简单多路归并(优先队列)
题意: 有N个任务,每个任务都有自己的时间间隔(就是每t秒请求执行一次)和任务id,这n个任务公用一个cpu,每次我们都执行时间靠前的,如果相同时间内有多个任务,就执行任务id小的,要求模 ...
- Day003 包机制
包机制 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包语句的语法格式为: package pkg1[.pkg2[.pkg3....]]; 一般利用公司的域名倒置作为包名; 例如: ...
- Java中实现某方法和重写某方法的区别
实现(implements) 实现一个方法,在实现某个接口,或者是继承某个抽象类,在接口和在抽象类中定义的方法,本身是没有实现的,也就是没有方法体,你在当前类中就需要去实现这个方法. 重写(overl ...
- 【实用小技巧】Access denied for user 'root'@'localhost' 报错解决
到mysql安装目录修改my.ini文件,在文件末尾追加一句 skip-grant-tables 然后重启mysql服务即可
- mysql安装_图文详细安装步骤_让你轻松安装并使用(超详细步骤)
mysql的下载就不用说了,自行到官网下载..(本人下载的是mysql5.0版本) 下面开始正式安装 1.双击mysql_setup.exe后,直接点击Next 2.选择"I accept ...
- 使用BeanUtils.copyProperties踩坑经历
1. 原始转换 提起对象转换,每个程序员都不陌生,比如项目中经常涉及到的DO.DTO.VO之间的转换,举个例子,假设现在有个OrderDTO,定义如下所示: public class OrderDTO ...
- 【技术博客】基于vue的前端快速开发(工具篇)
一.Vue教程 vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组 ...
- 面试遇到的坑JS深拷贝和浅拷贝
首先要搞明白深拷贝和钱拷贝的区别要先搞明白 栈和堆的区别 一.栈 栈存储基础数据类型,如: String.Number.Boolean.Null.Underined,这些简单的基础数据类型能够直接存储 ...