【IT168 专稿】一个大任务通常可能被分解成许多可以一起处理的小任务,以便创建一个解决方案,这和粉刷房子的道理是一样的,在粉刷之前,假设你需要买5公升油漆和5把刷子,你可以自己一个人干完采购和粉刷的活,也可以请朋友或职业粉刷工人帮忙。
▲图 开始使用CUDA C
你可能想请人帮忙,为了节约时间,你出去购买油漆,另一个人去买刷子,然后你在4个人的帮助下,每人刷一面墙,这样并行进行,到任务完成时,你算一下,应该节省了大量的时间。
这个方法对计算机也适用,假设你想添加两个向量v(x,y,z)和u(x,y,z),这里v=(1,2,3),u=(4,5,6),那么v+u=(1,2,3)+(4,5,6)=(1+4,2+5,3+6)=(5,7,9),你自己可以算一下,一次计算一个,但正如你可能看到的,这个问题可以分解成多个更小的问题,你可以让一个“人”将x分向量一起加起来,另一个“人”将y分向量一起加起来,第三个“人”将z分向量一起加起来,如下表所示:
表中的每个人所有的工作都是一样的:a+b=c,但每个人使用的数字不一样,结果也不一样。
这并不是什么新概念,并行计算已经存在多年,PC使用多个CPU并行处理任务,提高不同应用程序的执行速度,你可以将上面提到的“人”看作一个进程或一个线程,计算机可以将每个进程分配给不同的处理器,接收到任务的所有处理器并行执行一个任务(计算)。
现在,大多数计算机拥有多颗可以处理多任务的处理器,大型应用程序使用计算机上的可用资源运行可以获得更好的性能,但如果应用程序需要增加功能会怎么样呢?你应该增加处理器,还是以某种方式升级系统?这取决于你应用程序的需求和采用的解决方案,其中一个可行的解决方案是使用GPU。
GPU是什么?GPU是图形处理单元(Graphics Processing Unit)的缩写,它处理所有桌面上或游戏中的图形,分担一些CPU负载,在游戏中,CPU要执行人工智能计算和冲突检测,任务非常繁重,因此任何帮助都是欢迎的,GPU本身采用了良好的并行架构,使算术运算和计算真正有效,它是CPU的好朋友。
▲图 CPU+GPU,让程序运行更高效
本文的目的是帮助你开始使用CUDA C语言在GPU上实现并行计算,CUDA C由nVidia创建,它是一种与C类似的编程语言,但它是专门为创建使用GPU执行并行计算的应用程序设计的,与之类似的还有OpenCL和DirectCompute(DirectX 11),但CUDA C是我懂得的唯一语言,因此本系列文章就选择了它。它们都基于相同的原则,因此你任意选择一种学习都可以。
先决条件
在开始写代码之前,我们先启动计算机,把CUDA运行起来先!你需要一个新的启用CUDA的GPU(2007年以后,带有256MB显存的应该都可以,如果你不确定,请移步到www.nvidia.com/cuda检查一下)。我使用的是Nvidia Geforce 480GTX,但最新的500系列看起来更好。
重要:确定也安装了最新的驱动!!
安装
在下载页面,找到CUDA工具包,根据你平台的实际情况选择下载32位或64位,下载完毕后,安装它。
可选步骤,但真的会给你带来方便:下载完软件后,再从CUDA工具包页面下载并安装GPU计算SDK代码示例。
▲ 图 安装GPU计算SDK
GPU计算SDK带有许多优秀的代码示例和文档,它们可以帮助你提高GPU计算技能。
CUDA工具包安装好后,你就可以使用你熟悉的文本编辑器编写CUDA C应用程序了,我使用的是记事本,如果要编译应用程序,你可以使用Visual Studio 2008命令提示符,或nvcc.exe编译。
▲图 Visual Studio 2008命令提示符
▲图 nvcc.exe
测试安装是否成功
让我们尝试一下吧,一个真正超级简单的CUDA应用程序,看起来和其它C代码没什么差别:
#include
int main( void )
{
printf( “Hello, World!” );
return 0;
}
这段代码可能会给你带来惊喜,实际上,你可以使用CUDA编写任何C应用程序,当我们开始决定在CPU上执行什么功能,在GPU上执行什么功能时,真正的奇迹发生了。
在你熟悉的文本编辑器中敲入上面的代码,然后将其保存为TestCUDA.cu。
接下来,我们开始编译和生成我们的应用程序,仍然是在控制台窗口,在你保存TestCUDA.cu相同的路径下,敲入下面的命令:
nvcc –o test.exe TestCUDA.cu
按下回车键,将创建一个test.exe可执行文件。
▲图 创建test.exe文件
现在如果你敲入test.exe,你的第一个CUDA C应用程序将会运行,并在屏幕上输出“Hello,World”,如下图所示:
▲图 运行test.exe
如果你在编译时遇到了问题,拷贝错误消息,在搜索引擎中搜索一下,可以获得大部分常见失误和错误的解决办法,祝你好运!(如果你下载的是64位CUDA工具包,试试将其卸载,然后换为32位版本测试一下)