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移位会影响旋转操作。

GPU编程和流式多处理器(二)的更多相关文章

  1. GPU编程和流式多处理器(六)

    GPU编程和流式多处理器(六) 5. 纹理和表面 读取和写入纹理和表面的指令,所引用的隐式状态,比其他指令要多得多.header中包含诸如基地址,尺寸,格式和纹理内容的解释之类的参数,该header是 ...

  2. GPU编程和流式多处理器(五)

    GPU编程和流式多处理器(五) 4. 条件代码 硬件实现了"条件代码"或CC寄存器,其中包含用于整数比较的常用4位状态向量(符号,进位,零,溢出).可以使用比较指令(例如ISET) ...

  3. GPU编程和流式多处理器(四)

    GPU编程和流式多处理器(四) 3.2. 单精度(32位) 单精度浮点支持是GPU计算的主力军.GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还 ...

  4. GPU编程和流式多处理器(三)

    GPU编程和流式多处理器(三) 3. Floating-Point Support 快速的本机浮点硬件是GPU的存在理由,并且在许多方面,它们在浮点实现方面都等于或优于CPU.全速支持异常可以根据每条 ...

  5. GPU编程和流式多处理器

    GPU编程和流式多处理器 流式多处理器(SM)是运行CUDA内核的GPU的一部分.本章重点介绍SM的指令集功能. 流式多处理器(SM)是运行我们的CUDA内核的GPU的一部分.每个SM包含以下内容. ...

  6. GPU编程和流式多处理器(七)

    6. 杂项说明 6.1. warp级原语 warp作为执行的原始单元(自然位于线程和块之间),重要性对CUDA程序员显而易见.从SM 1.x开始,NVIDIA开始添加专门针对thread的指令. Vo ...

  7. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  8. GPU 编程入门到精通(五)之 GPU 程序优化进阶

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...

  9. GPU 编程入门到精通(四)之 GPU 程序优化

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

随机推荐

  1. window.location 与window.open区别

    window.location 与window.open区别 1.window.location是window对象的属性,而window.open是window对象的方法   window.locat ...

  2. hdu4849 最短路

    题意:       让你求0到所有点最短路中对m取余最小的那个数. 思路:       简单题,直接根据题目给的公式把z求出来,然后建边,然后最短路,然后枚举每一个点对m取余记录最小,然后输出答案,然 ...

  3. hdu4717 三分(散点的移动)

    题意:      给你一些点,这些点有各自的初始位置,移动速度和方向,问你什么时候任意两点中最长的距离最小,求时刻和此时的距离.. 思路:      感觉题目很赞,一开始想不到三分,因为么有办法证明他 ...

  4. Windows API初练手 -- 疯狂写文件代码

    警告:恶作剧软件,慎用!仅供初学者研究代码所用!!! 提示:默认文件创建目录在"D:\test",如果需要使用的话请自行更改目录. 1. Windows API 版本 (调用系统函 ...

  5. hdu5246超级赛亚ACMer

    题意(中文题意直接粘吧)                             超级赛亚ACMer Problem Description   百小度是一个ACMer,也是一个超级赛亚人,每个ACM ...

  6. Wordpress主题编辑器漏洞复现

    Wordpress是全球流行的博客网站,全球有上百万人使用它来搭建博客.他使用PHP脚本和Mysql数据库来搭建网站. 那么,如果当我们在渗透测试过程中获得到了别人Wordpress的账号和密码之后, ...

  7. Windows PE第九章 线程局部存储

    线程局部存储(TLS) 这个东西并不陌生了,之前写过了一个关于这个的应用,利用静态TLS姿势实现代码段静态加密免杀或者所谓的加壳思路.地址在这:http://blog.csdn.net/u013761 ...

  8. php isset()与empty()的使用

    PHP isset函数作用 isset函数是检测变量是否设置. 格式:bool isset( mixed var [, mixed var [, ...]] ) 返回值: 若变量不存在则返回FALSE ...

  9. Andrew Ng机器学习算法入门((五):矩阵和向量

    矩阵定义 数学上,一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列 使用Aij来获取矩阵中第i行j列的数据 向量的定义 向量就是n行1列的特殊矩阵 由于向量仅仅只有1行,那么通过一个变量i来指定获 ...

  10. 【翻译】WPF中的数据绑定表达式

    有很多文章讨论绑定的概念,并讲解如何使用StaticResources和DynamicResources绑定属性.这些概念使用WPF提供的数据绑定表达式.在本文中,让我们研究WPF提供的不同类型的数据 ...