日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

如何在MFC中调用CUDA

發布時間:2025/7/25 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在MFC中调用CUDA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何在MFC中調用CUDA

?????? 有時候,我們需要在比較大的項目中調用CUDA,這就涉及到MFC+CUDA的環境配置問題,以矩陣相乘為例,在MFC中調用CUDA程序。我們參考羅振東iylzd@163.com(國防科學技術大學計算機學院)的方法。

?

環境: Windows 7 SP1

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

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

?

步驟:

?

1.首先建立一個空的名叫Matrix Multiplication_KahanMFC的“FCM應用程序”項目:

?



點擊“確定”,這時彈出如下窗口



?????? 我們需要對默認項目進行一些修改,點擊“下一步”,我們設置一個空的MFC項目,選擇“單個文檔”和“MFC標準”:



點擊“完成”。

2.創建CUDA的調用接口函數及其頭文件

?????? 1)頭文件

?????? “添加”--> “新建項”-->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)函數

?????? 按照和增加頭文件相似的方法,添加函數。“添加”--> “新建項”-->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文件的,會報錯,所以我們使用extern "C"的方式來實現函數的調用。

3. 創建存放cuda 代碼的篩選器,名為CUDA

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



4. 在篩選器CUDA中創建一個CUDA源代碼文件,kernel.cu

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

?????? 添加”--> “現有項”-->kernel.cu--> “添加”:



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

5. 右擊項目-->“生成自定義”:



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



點擊“確定”。

6. 修改?kernel.cu的編譯鏈接設置

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

?



? ? ? ?點擊“應用后,“常規”下方會出現一個“CUDA C/C++”的設置,沒有特殊需求,不需要修改,點擊“確定”。

?

7.修改工程設置。

?

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

?

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



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



設置完成后,點擊“確定”。

8.修改MFC文件,完成調用。

?????? 我們需要在MFC中調用CUDA程序,顯示出GPUCPU計算兩個1024*1024矩陣相乘所消耗的時間。

?????? 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);

?

如圖所示:



?????? 然后重新生成解決方案,運行。

???????? 計算要花費一些時間,需要等待,測試的時候可以把矩陣大小改小一些。因為把程序加到了OnDraw中,所以每當刷新窗口時候(例如調整窗口大小時),都會調用。由于計算耗時比較長,窗口看起來會像無響應一樣,等計算完成就好了。

?????? 運行的結果如下:



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

?????????????????????????????????????????????? ???????????????????????????????????????????????????????????????? by:蔣佩釗 2013.06.04 蘭州交通大學

轉載于:https://www.cnblogs.com/mr-totoro/archive/2013/06/04/5785669.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。