cuda的dll開發流程

2021-05-23 09:38:33 字數 3103 閱讀 9979

前言:很久沒寫cuda相關的文章了,其實也不是忙,只是零碎的事情比較多,不能抽出完整的時間寫一些東西,在http://blog.csdn.net/openhero 上寫本來想寫一些列cuda程式設計的文章,不過現在看來,很多朋友還是只是處在開發的初級階段,一些基本的程式設計環節還需要講解一下,其實像lib程式設計,dll程式設計,都不是cuda的內容,這個只是windows,linux系統程式設計的內容,只要有時間,好好靜下心來做幾個專案就可以明白很多,而且網上就可以找到很多資料。

正文:cuda的dll開發其實和一般的c/c++的dll開發是乙個原理,當然,dll的開發就有幾種方式,這裡就講最容易理解的,也最直接的方式,然後把**放出來。大家自己可以琢磨一下其它的方式。

1.建立dll

用我的wizard 可以建立乙個dll專案工程:

選擇dll專案,然後可以看到下面的專案檔案結構:

其中sampe_cu.h檔案為標頭檔案,stdafx.h和stdafx.cpp是windows的載入的相關檔案,這裡可以不用理會,dll_test.cpp是其中的乙個匯出函式檔案,也是宣告了dkkmain的入口函式,這裡是在dll建立,載入,解除安裝的時候需要處理的一些內容,這裡如果不熟悉dll也不用管它。

針對cuda,這裡我們就來看sample.cu檔案:

/* hellocuda */

int testhellocuda(void)

if(!initcuda()) ;

cuda_safe_call( cudamalloc((void**) &device_result, sizeof(char) * 11));

unsigned int timer = 0;

cut_safe_call( cutcreatetimer( &timer));

cut_safe_call( cutstarttimer( timer));

hellocuda<<<1, 1, 0>>>(device_result, 11);

cut_check_error("kernel execution failed/n");

cuda_safe_call( cudathreadsynchronize() );

cut_safe_call( cutstoptimer( timer));

printf("processing time: %f (ms)/n", cutgettimervalue( timer));

cut_safe_call( cutdeletetimer( timer));

cuda_safe_call( cudamemcpy(&host_result, device_result, sizeof(char) * 11, cudamemcpydevicetohost));

printf("%s/n", host_result);

cuda_safe_call( cudafree(device_result));

//cut_exit(argc, argv);

return 0;

這個就是sample.cu檔案裡面的實現的dll的介面函式,當然還有乙個def檔案,這個檔案是用來做動態匯出用的,看看def檔案:

library "dll_test"

exports

testhellocuda

這個是sample.def檔案的內容,這個檔案是為了能動態匯出dll裡面的函式介面而用的。編譯器通過這個檔案把宣告的testhellocuda,介面匯出。

編譯,就可以在相應的目錄裡面得到乙個***x.dll檔案.

2.呼叫dll

這裡就是測試dll檔案,當然我在同乙個工程裡面建立乙個呼叫的測試工程:

這裡新增乙個測試工程,當然你也可以再另外的地方建立乙個測試工程,或者載入到自己的工程裡面;

選擇乙個win32工作作為測試例子;

這個例子就是乙個簡單的測試專案,都選預設得就可以;

這裡預設的就可以了,其他的自己去查詢意思j不能偷懶到什麼都告訴你……

這個時候就可以看到兩個工程,乙個是dll工程,乙個是測試工程,然後在測試工程裡面,我們採用動態載入dll的方法來呼叫dll;

上面就是呼叫dll的**,這裡為什麼加__t()自己去找unicode的呼叫方法j

裡面的__t()裡面的dll的檔名就是我們要載入的dll,當然這裡是路徑,入下圖,我們的dll和exe在同乙個資料夾裡面,如果是不同的資料夾,那就用相對路徑來找就okj

然後執行例子,就可以得到下圖結果:

這裡的dll就ok了~~~

建立簡單DLL流程(一)

動態鏈結庫 dll dynamic link library或者dynamic link library 是微軟公司在微軟檢視作業系統中實現共享函式庫概念的一種實作方式。這些庫函式的副檔名是.dll ocx 包含activex控制的庫 或者.drv 舊式的系統驅動程式 所謂的動態鏈結 就是把一些經常...

關於資源DLL的開發

上面兩篇文章很不錯,分別是講 cwnd getdlgitem和dll與exe模組切換的問題,mfc 模組中可能存在資源,在預設情況下,程序會在當前模組中查詢資源 dll或者exe 這樣就導致可能會找不到本來存在的資源 恰好在另乙個模組 對於cwnd getdlgitem,跟cwnd fromhand...

CUDA開發 CUDA Thrust 規約求和

thrust 是乙個開源的 c 庫,用於開發高效能並行應用程式,以 c 標準模板庫為藍本實現。官方文件見這裡 cuda thrust float fmatrix device 指向裝置視訊記憶體 int imatrixsize irow icol 矩陣元素個數 cudamalloc void fma...