程序猿玩家细说GTX 680轻取百万线程代码
  • 上方文Q
  • 2012年08月09日 16:15
  • 0

程序猿玩家细说GTX 680轻取百万线程代码

想要CUDA编程的童鞋可以开始了。安装好驱动、工具箱后,就可以安装C/C++编辑器了。用微软的Visual Studio比较方便,只是它本身不支持CUDA语法,需要在工具箱里面找到语法配置文件,配置一下就可以了。

其实,CUDA代码也不神秘,就是C和一些C的扩展而已,懂C的朋友很容易就明白了,不过CUDA代码编译的系统执行文件有点小小麻烦,因为需要调用2个编译器,一个是C/C++,另外一个是GPU编译器。还好NVDIA提供了比较方面的NVCC工具,这是一个半编译和连接工具,主要用语分离CPU和GPU代码,然后把CPU代码给VS编译,然后自己编译GPU代码。编译后连接好就可以编程执行代文件了。

程序猿玩家细说GTX 680轻取百万线程代码

这是NVIDIA的性能调试工具,非常不错,能够可视化分析硬件的使用率。

程序猿玩家细说GTX 680轻取百万线程代码

程序的产生都可以清楚分析,这是一个CUDA二维傅立叶变换的例子。不过计算单元的使用率不高,虽然很密集地运行kernel,但是每个kernel的执行时间不长,不到30微秒。

程序猿玩家细说GTX 680轻取百万线程代码

用性能工具来测试CUDA体渲染程序。

程序猿玩家细说GTX 680轻取百万线程代码

开普勒有多kernel并行运行的优势。

程序猿玩家细说GTX 680轻取百万线程代码

黄色感叹号表明程序可能有能够加强性能的改进之处。

程序猿玩家细说GTX 680轻取百万线程代码

载入粒子模拟仿真。

程序猿玩家细说GTX 680轻取百万线程代码

程序性能分析。

程序猿玩家细说GTX 680轻取百万线程代码

这一段小代码让GPU所有的CUDA核心都运行一个内循环加法。当然,真正的并行程序并没有那么简单。这里是主要是用性能工具来分析GPU ALU的使用率。

程序猿玩家细说GTX 680轻取百万线程代码

代码主要一一对应地生成1536个线程,每个线程做一个内循环,模拟GPU真实的负载工作。另外如果需要,可以调整Grid网格的规格增加线程,要生成一个百万线程,只需要在内核函数输入1000000/192=540个block线程块就可以了。GPU的最大优势是可以实现线程的高速切换,速度是CPU的上千到几千倍。

最后,技术宅跟我们分享了CUDA的一些感觉。CUDA是一个异构的执行体系,就是说CUDA里面你既要写CPU代码,也要内嵌GPU内核代码。它是用来发挥CPU、GPU两种架构的长处的。你认为CPU执行更好的部分,可以在函数用CPU代码实现;你认为某部分交给GPU执行跟好,就可以写成GPU代码。打个比方,某个负责引用需要一个并行度极高的运算和一个串行读很高的复杂运算构成,那就可以先通过PCI-E传输数据给GPU并行执行,然后返回给CPU做执行,最终输出结果。CUDA的另外一个用法是CUDA图形相互操作,比如支持PhysX物理加速的游戏就是,在图形渲染哪里和CUDA物理加速相互操作。

看到这里,是不是发现自己对CUDA有了更加深刻的认识?其实它也不是多么神秘的,就是个开发环境而已。


文章纠错

  • 好文点赞
  • 水文反对

此文章为快科技原创文章,快科技网站保留文章图片及文字内容版权,如需转载此文章请注明出处:快科技

观点发布 网站评论、账号管理说明
热门评论
查看全部评论
相关报道

最热文章排行查看排行详情

邮件订阅

评论0 | 点赞0| 分享0 | 收藏0