日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何在MFC中调用CUDA

發(fā)布時(shí)間:2025/7/25 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在MFC中调用CUDA 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何在MFC中調(diào)用CUDA

?????? 有時(shí)候,我們需要在比較大的項(xiàng)目中調(diào)用CUDA,這就涉及到MFC+CUDA的環(huán)境配置問(wèn)題,以矩陣相乘為例,在MFC中調(diào)用CUDA程序。我們參考羅振東iylzd@163.com(國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院)的方法。

?

環(huán)境: Windows 7 SP1

????????????? Microsoft Visual Studio 2010

????????????? CUDA 5.0

?

步驟:

?

1.首先建立一個(gè)空的名叫Matrix Multiplication_KahanMFC的“FCM應(yīng)用程序”項(xiàng)目:

?



點(diǎn)擊“確定”,這時(shí)彈出如下窗口



?????? 我們需要對(duì)默認(rèn)項(xiàng)目進(jìn)行一些修改,點(diǎn)擊“下一步”,我們?cè)O(shè)置一個(gè)空的MFC項(xiàng)目,選擇“單個(gè)文檔”和“MFC標(biāo)準(zhǔn)”:



點(diǎn)擊“完成”。

2.創(chuàng)建CUDA的調(diào)用接口函數(shù)及其頭文件

?????? 1)頭文件

?????? “添加”--> “新建項(xiàng)”-->Visual C++-->“頭文件(.h)”-->“名稱”-->CUDA_Transfer.h -->“添加”,如下圖:

?



CUDA_Transfer.h中添加如下代碼:

//CUDA_Transfer.h

?

#include

#include "math.h"

?

using namespace std;

?

int run_cuda(float* GPU, float* CPU);

如下圖所示:



?????? 2)函數(shù)

?????? 按照和增加頭文件相似的方法,添加函數(shù)。“添加”--> “新建項(xiàng)”-->Visual C++-->C++文件(.cpp)” -->“名稱”-->CUDA_Transfer.cpp -->“添加”,如下圖:



CUDA_Transfer.cpp中添加如下代碼:

//CUDA_Transfer.cpp

#include "CUDA_Transfer.h"

#include "stdafx.h"

?

extern "C" int runtest(float* GPU, float* CPU);

?

int run_cuda(float* GPU, float* CPU)

{

???????? runtest(GPU,CPU);

????????return 0;

}

如下圖所示:



?????? 需要注意的是在MFC的文件中是不能包含(include.cu文件的,會(huì)報(bào)錯(cuò),所以我們使用extern "C"的方式來(lái)實(shí)現(xiàn)函數(shù)的調(diào)用。

3. 創(chuàng)建存放cuda 代碼的篩選器,名為CUDA

?????? “添加”--> “新建篩選器”,重命名為CUDA



4. 在篩選器CUDA中創(chuàng)建一個(gè)CUDA源代碼文件,kernel.cu

?????? 我們直接把已經(jīng)寫好的矩陣相乘的程序kernel.cu復(fù)制到項(xiàng)目目錄下,添加到CUDA篩選器中去。

?????? 添加”--> “現(xiàn)有項(xiàng)”-->kernel.cu--> “添加”:



?????? kernel.cuint main()函數(shù)改為extern "C" int runtest(float* GPU, float* CPU),兩個(gè)參數(shù)用來(lái)獲得GPUCPU計(jì)算所使用的時(shí)間,單位為毫秒。

5. 右擊項(xiàng)目-->“生成自定義”:



在彈出的窗口中勾選CUDA 5.0(.target,.props)。如果使用其他版本的CUDA,就勾選對(duì)應(yīng)的版本:



點(diǎn)擊“確定”。

6. 修改?kernel.cu的編譯鏈接設(shè)置

?????? 在解決方案資源管理器中右擊kernel.cu文件-->“屬性”,在彈出窗口中-->“常規(guī)”-->“項(xiàng)類型”的下拉列表中選擇

?



? ? ? ?點(diǎn)擊“應(yīng)用后,“常規(guī)”下方會(huì)出現(xiàn)一個(gè)“CUDA C/C++”的設(shè)置,沒有特殊需求,不需要修改,點(diǎn)擊“確定”。

?

7.修改工程設(shè)置。

?

?????? 工程設(shè)置需要修改“鏈接器”-->“輸入”-->“附加依賴項(xiàng)”和“生成事件”-->“預(yù)先生成事件”-->“命令行”。需要設(shè)置的參數(shù)比較多,我們采用比較簡(jiǎn)單的方法。

?

?????? 我們新建一個(gè)空的CUDA項(xiàng)目,在這個(gè)空CUDA項(xiàng)目的項(xiàng)目屬性中找到“鏈接器”-->“輸入”-->“附加依賴項(xiàng)”,把“附加依賴項(xiàng)”中所包含的項(xiàng)復(fù)制到我們的MFC項(xiàng)目中:



?????? 按照同樣的方法,設(shè)置“生成事件”-->“預(yù)先生成事件”-->“命令行”:



設(shè)置完成后,點(diǎn)擊“確定”。

8.修改MFC文件,完成調(diào)用。

?????? 我們需要在MFC中調(diào)用CUDA程序,顯示出GPUCPU計(jì)算兩個(gè)1024*1024矩陣相乘所消耗的時(shí)間。

?????? Matrix Multiplication_KahanMFCView.cpp中包含(include"CUDA_Transfer.h"

文件;在CMatrixMultiplication_KahanMFCView::OnDraw(CDC* pDC)中添加如下代碼:

?

????????float GPU;

????????float CPU;

???????? run_cuda(&GPU, &CPU);

?

???????? CString strGPU,strCPU;

???????? strGPU.Format(_T("GPU:%f \n"),GPU);

???????? strCPU.Format(_T("CPU:%f \n"),CPU);

???????? pDC->TextOut(0,0,strGPU);

???????? pDC->TextOut(0,30,strCPU);

?

如圖所示:



?????? 然后重新生成解決方案,運(yùn)行。

???????? 計(jì)算要花費(fèi)一些時(shí)間,需要等待,測(cè)試的時(shí)候可以把矩陣大小改小一些。因?yàn)榘殉绦蚣拥搅?/span>OnDraw中,所以每當(dāng)刷新窗口時(shí)候(例如調(diào)整窗口大小時(shí)),都會(huì)調(diào)用。由于計(jì)算耗時(shí)比較長(zhǎng),窗口看起來(lái)會(huì)像無(wú)響應(yīng)一樣,等計(jì)算完成就好了。

?????? 運(yùn)行的結(jié)果如下:



?????? 在矩陣比較大的情況下,GPU的加速效果明顯,GPU耗時(shí)只需要620ms,而CPU需要23438ms,要花費(fèi)將近40倍的時(shí)間。

?????????????????????????????????????????????? ???????????????????????????????????????????????????????????????? by:蔣佩釗 2013.06.04 蘭州交通大學(xué)

轉(zhuǎn)載于:https://www.cnblogs.com/mr-totoro/archive/2013/06/04/5785669.html

總結(jié)

以上是生活随笔為你收集整理的如何在MFC中调用CUDA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。