日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用nvcc從CUDA創(chuàng)建 DLL

 LibraryPKU 2018-03-20

為了從外部C 程序中使用這個(gè)庫(kù),我想從一個(gè)CUDA代碼( kernel.cu ) 創(chuàng)建一個(gè). dll 。 經(jīng)過(guò)一些嘗試后,我在. cu 文件中留下了一個(gè)簡(jiǎn)單的C 函數(shù)。 代碼如下:

kernel.cu

#include 
#include"kernel.h"
void hello(const char *s) {
 printf("Hello %sn", s);
}/*

kernel.h

#ifndef KERNEL_H
#define KERNEL_H
#include"cuda_runtime.h"
#include"device_launch_parameters.h"
#ifdef __cplusplus
extern"C" {
#endif
void __declspec(dllexport) hello(const char *s);
#ifdef __cplusplus
}
#endif
#endif//KERNEL_H

我嘗試首先使用 nvcc 生成一個(gè) kernel.o 對(duì)象,然后使用 g++ 創(chuàng)建 DLL,如下所示:

nvcc -c kernel.cu -o kernel.o
g++ -shared -o kernel.dll kernel.o -L"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.0libx64" -lcudart

它工作正常并生成 kernel.dll 。 為了測(cè)試DLL文件,我編寫(xiě)了這個(gè)簡(jiǎn)單的程序 main.c:

#include 
#ifdef __cplusplus
extern"C" {
#endif
void __declspec ( dllimport ) hello(const char *s);
#ifdef __cplusplus
}
#endif
int main(void) {
 hello("World");
 return 0;
}

編譯為:

g++ -o app.exe main.c -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.0include" -L. -lkernel

當(dāng)執(zhí)行開(kāi)始時(shí)產(chǎn)生內(nèi)存訪問(wèn)錯(cuò)誤。

但是,如果我在. c ( 因?yàn)樗皇荂 代碼) 中重命名. cu 文件,使用相同的命令,它就。 nvcc的輸出更改,因?yàn)槲抑?,因?yàn)樗褂媚J(rèn)的C 編譯器而不是使用ipqos一個(gè)。

你覺(jué)得這跟nvcc有什么關(guān)系? 還是我在犯錯(cuò)誤?

:我忘了一些可能重要的信息。 在 G++ ( 創(chuàng)建dll時(shí)) 第一次調(diào)用時(shí)出現(xiàn)警告,它們不同于. cu. c 或者. cpp.

光標(biāo)

Warning:. drectve `/FAILIFMISMATCH:"_MSC_VER=1600"/FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=0" 
/DEFAULTLIB:"libcpmt"/DEFAULTLIB:"LIBCMT"/DEFAULTLIB:"OLDNAMES"/EXPORT:hello ' unrecognized

而且它不工作。

cpp和。c

Warning:. drectve `/DEFAULTLIB:"LIBCMT"/DEFAULTLIB:"OLDNAMES"/EXPORT:hello ' unrecognized

而且它。

【Note】

已經(jīng)解決。我仍然不知道為什么發(fā)生了( 也許是因?yàn)闆](méi)有使用像羅伯特。com這樣的正式的官方編譯器),但是替換了這兩個(gè)命令作為一個(gè)程序:

nvcc -o kernel.dll --shared kernel.cu

注意雙擊( nvcc以此方式工作),以及直接創(chuàng)建一個(gè) .o 而不是創(chuàng)建第一個(gè),然后從對(duì)象創(chuàng)建 DLL 。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多