转载请注明出处为KlayGE游戏引擎,本文地址为http://www.klayge.org/?p=961

上周的帖子刚提到NVIDIA宣布了CUDA 4,昨天就收到NV的邮件说CUDA 4.0 RC可以下载了。developer注册用户可以从http://developer.nvidia.com/object/cuda_4_0_RC_downloads.html找到。

本来不打算说什么,碰巧在某网站看到了一篇所谓的“新特性解析”,典型的一个不懂技术的小编装懂地写软文。所以我不得不在这里拨乱反正,以免国内读者受其误导。

CUDA 4.0的更新主要集中在三方面

  1. 简化并行程序的移植
  2. 加速多GPU编程
  3. 更好的工具链支持

简化并行程序移植

在CUDA(其实还有AMD的stream)出来之前,并行程序移植GPU只能直接用shader,限制诸多,代码不灵活,基本算重写,而不是移植。有了CUDA之后,情况有所好转。在CUDA 4.0下,移植的任务变得更简单了。NV的说法是,它支持以下几大新特性:

  1. 在多个CPU线程之间共享GPU
  2. 单个CPU线程也可以访问所有GPU
  3. 系统内存地址可以直接映射给GPU,不需要拷贝
  4. 新的CUDA C/C++特性
  5. Thrust模板primitive库
  6. NPP图像/视频处理库
  7. 多层纹理

其中第1点和第2点说的是一回事。在以前的CUDA上,要使用多个GPU就得开多个thread,每一个thread负责与一个GPU打交道(或者 说不同GPU得在不同的context下)。这其实是个很愚蠢的限制。现在CUDA 4取消了这个限制,任何thread可以与任何GPU打交道,简化了context管理。只能说它没那么愚蠢了。

第3点我认为是CUDA 4里最重要的更新。内存地址映射在以前的CUDA上就部分支持,能把一个cudaHostMalloc出来的系统内存的地址映射到GPU,让GPU可以直 接访问系统内存中的数据。这样就可以克服显存不足的缺点(但是是以牺牲一部分性能为代价的)。CUDA 4的好处是,任意malloc/new出来的内存空间,都可以通过调用cudaHostRegister注册给GPU,同样也有 cudaHostUnregister来取消这个注册,而不需要cudaMemcpy。实际上PCIE本身就支持把一个host地址映射到device 端,而且无论D3D还是OpenGL都用这种方式来处理buffer和texture等大数据,不是什么新东西。除了性能之外,这个特性带来的另一个好处 是,可以把一个大的CPU程序一点一点地改成GPU程序,并一步一步验证结果。以前这件事情需要前后都插入不少cudaMalloc和 cudaMemcpy等代码,繁琐而且容易出错。

第4点只是个编译器更新,把C++风格的new/delete、虚函数、内嵌PTX汇编等加入CUDA编译器。D3D11级别的GPU都支持函数指 针,所以虚函数并不是什么难事。至于new/delete和内嵌PTX汇编,更是改不了几行编译器代码就能实现的,倒是应该问问为什么以前不支持了。

第5点的Thrust是个第三方库,模仿C++ STL的方法来把CUDA的一些数据结构和primitive算法(scan、reduce、sort等)封装起来,让没有CUDA基础的人也可以在 C++程序里使用GPU加速。这个库已经发布很久了,跟以前的CUDA也可以很好地配合。这次只是把它集成了,也不是新东西。

第6点也是个CUDA库,NV自己的,集成进来了。

第7点的Layered texture其实就是D3D10+的Texture Array,以前不知道为什么从来不在CUDA里暴露出来,现在突然列为“新特性”。

加速多GPU编程

这里的新技术被称为GPUDirect 2.0。之前有个不出名的GPUDirect 1.0,先在升级成让GPU之间可以点对点显存访问、传输数据、同步,可能需要特定的芯片组才能支持。这对多GPU来说确实是个福音。以前甚至让多个 GPU做同样的事情,都需要把同样的数据依次拷贝到每一个GPU上,然后开始干活。以至于拷贝的时间掩盖了计算的时间(这个拷贝是独占的,不能让多个 GPU并行拷贝),GPU越多反而越慢。更恶心的是,一个GPU要访问另一个GPU的计算结果,就得cudaMemcpy到host memory,然后再次cudaMemcpy到另一个GPU。现在只要一次cudaMemcpy就能轻松搞定。

实际上,这件事情也要求把host memory和多个device memory统一编址(UVA),这样的cudaMemcpy才能认清是从哪里到哪里。引用NV的一张图就是:

有了UVA,在cudaMemcpy的时候就不用指定cudaMemcpyHostToHost、cudaMemcpyHostToDevice、 cudaMemcpyDeviceToHost、cudaMemcpyDeviceToDevice,而直接用cudaMemcpyDefault就可以 了。为什么这个到了4.0才支持,就得问NV了。

更好的工具链支持

从文本界面的profiler,到Visual Profiler,CUDA的工具链一直在进步。CUDA 4中的profiler除了以前的显示kernel执行时间、占用率、各种指令的开销之外,还可以给出总的统计和优化提示,更加实用。cuda-gdb也 得到了更新,支持C++调试。

CUDA x86

最后NV还提到了PGI CUDA x86的最新进展。四五月份会发布1.0(非常的初级,甚至不支持多核),八月份发布1.1(支持多核、SSE/AVX)。

总结

我认为CUDA 4的绝大部分更新都来自于上层和外围的改进,核心更新的亮点是系统内存地址映射和统一寻址,其它都是不值一提的老掉牙的东西。也许NV也学了google 的版本大法,没事就出一个新的大版本。CUDA 4虽然值得期待,但老这样把本来就应该有的东西当作新特性来作秀就不好了。

转载于:https://www.cnblogs.com/gongminmin/archive/2011/03/06/1972329.html

CUDA 4.0真技术解析相关推荐

  1. 长安大学微型计算机原理与接口技术答案,长安大学考研专业课《815微机原理与接口技术》真题解析 考点 冲刺.pdf...

    长安大学考研专业课<815微机原理与接口技术>真题解析 考点 冲刺 [键入文字] 1 2008 年真题 长安大学 2008 年硕士研究生入学 考试试题 试题名称:微机原理与接口技术 一.填 ...

  2. 计算机科学与技术专业考博课程,北京大学考博计算机科学与技术专业介绍,考博真题,真题解析.pdf...

    北京大学考博计算机科学与技术专业介绍,考博真题,真题解析.pdf [全国百所名校定向保录] [才思教育由命题组领专业化辅导] 考博详解与指导 系所名称 信息科学技术学院 招生总数 118 其中推荐直博 ...

  3. 思科ccna认证技术之网络安全基础入门CCNA 1.0 网络硬件防火墙技术解析-ielab

    思科ccna认证技术之网络安全基础入门CCNA 1.0 网络硬件防火墙技术解析-ielab防火墙技术,最初是针对 Internet 网络不安全因素所采取的一种保护措施.顾名思义,防火墙就是用来阻挡外部 ...

  4. 思科安全认证基础入门CCNA 1.0 网络硬件防火墙技术解析-ielab网络实验室

    思科安全认证基础入门CCNA 1.0 网络硬件防火墙技术解析-ielab网络实验室防火墙技术,最初是针对 Internet 网络不安全因素所采取的一种保护措施.顾名思义,防火墙就是用来阻挡外部不安全因 ...

  5. Tensor Core技术解析(上)

    Tensor Core技术解析(上) NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构--Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的 ...

  6. 军哥华为HCNP(科目H12-221)真题解析课程:1-30题

    华为HCNP(科目H12-221)真题解析 HCNP-R&S-IERS: (Huawei Certified Network Professional-Implementing Enterpr ...

  7. 历届蓝桥杯Scratch编程国赛 初级 中级 青少年编程比赛国赛真题解析【持续更新 已更新至27题】

    历届蓝桥杯国赛真题 第十三界.十二届.十一届等历届青少年蓝桥杯Scratch编程比赛国赛真题解析 国赛真题01-河马带球[试看] [蓝桥杯国赛真题01]Scratch河马带球 少儿编程蓝桥杯Scrat ...

  8. 视频教程-2020年软考系统架构设计师-上午历年真题解析视频培训课程-软考

    2020年软考系统架构设计师-上午历年真题解析视频培训课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作 ...

  9. 特斯拉FSD技术解析

    特斯拉FSD技术解析 特斯拉疯狂进化的FSD 特斯拉的FSD Beta9(完全自动驾驶测试版9.0)已经在美国开始了全面推送,这标志着特斯拉已经正式迈入了全自动驾驶时代,虽然还不能做到老司机一样完美处 ...

最新文章

  1. 第十五届全国大学生智能车东北赛区成绩
  2. CF1146H Satanic Panic
  3. 函数参数 不定参数,和 默认参数
  4. 阿里巴巴开源项目nginx_concat_module企业部署实例
  5. 哥尼斯堡的“七桥问题” (25 分)【欧拉回路模板题】
  6. python横向合并merge_【Python代替Excel】7:merge、concat、append
  7. 辅助类BinaryTreeNodeLeftChildRightSibling(左孩子右兄弟,二叉树结点)
  8. 演练 打印九九乘法表
  9. 计算机类系统能力培养试点学校,南昌航空大学获批教育部计算机类专业系统能力培养试点高校...
  10. ios java 通信_AES加密解密 -- iOS、Java之间的互相通信
  11. python爬虫英文怎么说_python爬虫腾讯翻译实现中英翻译
  12. endnotex8使用教程_EndnoteX8快速使用详细步骤
  13. c语言中结构体定义中的“冒号”
  14. windows10 任务管理器被管理员禁用解决办法
  15. java中复数的类型_java构造一个复数类
  16. 软件测试好学吗 入门还是很好学的,但想要深造就还是要费功夫
  17. DLink无线路由器做交换机配置
  18. 监控的4个黄金指标(google)
  19. screenX、client X、pageX、offsetX、layerX
  20. 手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

热门文章

  1. mysql 脚本 linux_MySQL的一些功能实用的Linux shell脚本分享
  2. 要重复多少次变成潜意识_说了多少次了!通过学校区域一定要......
  3. 如何跳出两层循环嵌套
  4. 修正 010 Editor 模板文件 MachO.bt 的错误
  5. Vi编辑器的使用方法
  6. sony右键延迟的解决方案
  7. Delphi 字符串转十六进制
  8. Pixhawk代码分析-姿态解算篇B
  9. 我的世界1.13的服务器网站,我的世界1.13纯净版
  10. c++ primer 5th,练习11.19,编写代码验证