预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

CUDA与MFC联合编程推荐工程结构 sume@ustc.edu CUDA入门者提示及基本知识: 1.常见的电脑都有图形图像显示功能,显卡就是负责这个工作的。显卡 可以是独立的,也可以集成在主板上,还可以集成在CPU中,我们要 使用CUDA技术,一般选择购买主流独立显卡即可。GPU是显卡的核 心,可以理解为显卡上的CPU,它的主要工作就是计算屏幕上要显示 什么、怎么显示,常见的电脑屏幕的分辨率有800×600、1024×768、 1366×768、1920×1080等等,而且各个像素之间并没有直接关系或 者关系很弱,因此这个计算工作天生就是并行的; 2.CUDA是nVidia公司的技术,AMDAPP(曾用名ATIStream,后来ATI 被AMD收购了)是AMD公司的技术,他们都是GPGPU(前两个GP 意思是GeneralPurpose)技术的一种,目的是利用显卡强大的并行计 算能力加速运算,让显卡不只局限于打游戏和绘图。在金融、地质、 航天、军事、生物等计算密集的行业,人们已经开始广泛研究基于 GPGPU的加速计算技术; 3.想要使用CUDA,首先你需要一张支持CUDA的显卡,支持CUDA技术 的显卡名单及其对应的计算能力可以在nVidia公司网站上找到; 4.因为本文讲的是MFC编程,而且作者只会VC(这才是主要原因好吧), 因此假设读者已经安装了VisualStudio2008并打上了最新的service pack补丁; 5.要建立CUDA编程环境,你还需要在nVidia网站下载安装以下三者: a)你的显卡所对应的最新驱动; b)CUDAToolkit; c)NVIDIAGPUComputingSDK(目前是4.2). 好的,现在假设读者具备MFC程序调试经验,那么我们就开始吧。以下是 CUDA和MFC联合编程的推荐结构: MFCCUDA GlobalHost FunctionsFunctions 在Device上运行 MFCKernel ProcessFunctions 解释: 1.对CUDA程序来说,显卡叫做device,安装了显卡的电脑叫做host; 如果一台电脑上安装了多个显卡呢?放心,可以处理的,但是本文暂 时不考虑这种情况; 2.CUDA程序是C语言的一种变形,都以.cu为后缀,CUDA程序中的函 数有的运行在CPU上,负责并行计算的初始化和计算结果的回收,有 的运行在GPU上(称为kernel程序),负责执行真正的并行计算; 3.建议专门用一个globalfunction和CUDA程序打交道,便于代码的阅 读、理解和维护; 4.MFC程序的其他部分调用这个globalfunction,其他就和一般的编程 没有区别了。 在本文附带的例程中,对应的工程文件如图所示: MFCCUDA Globalapi.Cpp Globalapi.hFirst.cu MFC First_kernel.cu 工程 其实CUDA程序中的hostfunction和kernelfunction也可以放在同一个.cu文 SUME件,但是此处同样为了便于阅读、理解和维护,把它们分别放在两个文件中。COLLECTION 示例工程的创建过程如下: 1.创建globalapi.cpp/.h及全局函数; 2.在SolutionExplorer中创建一个filter(相当于一个目录,便于管理),命 名为CUDA,在里面创建两个.cu文件; 3.分别在两个cu文件中写上函数,其中first.cu中就是本例程CUDA程序的 host部分,first_kernel.cu中就是本例程CUDA程序的kernel部分。本例 程重在结构的解释,具体的编程方法此处就不讲了,更多的内容请好好 看书以及阅读SDK中的文档吧; 4.最重要的地方来了,修改first.cu的编译设置; 第一步,打开该文件的属性; SUMECOLLECTION 第二步,修改常规设置; 第三步,修改自定义生成步骤; 在”CommandLine”中拷贝进去以下内容: "$(CUDA_BIN_PATH)\nvcc.exe"-ccbin"$(VCInstallDir)bin"–c -D_DEBUG-DWIN32-D_CONSOLE-D_MBCS-Xcompiler /EHsc,/W3,/nologo,/Wp64,/Od,/Zi,/RTC1,/MTd -I"$(CUDA_INC_PATH)"-I./-I../../common/inc -o$(ConfigurationName)\first.objfirst.cu 并且填写”Outputs”和”AdditionalDependencies”: 5.修改工程的属性;