nvcc gcc g 混合編譯器程式設計

2021-07-23 03:28:09 字數 2759 閱讀 8000

2013-01-18 20:33

4836人閱讀收藏

舉報

cuda(46)

c/c++(61)

gcc(4)

有很多同鞋問怎麼使用cuda和其它的編譯器連用呢?混合程式設計?

先吧**貼出來:

檔案1 : test1.cu

[cpp]view plain

copy

//檔案:test1.cu

#include 

#include 

#include 

#define rows 32

#define cols 16

#define check(res) if(res!=cudasuccess)

__global__ void kerneltest(int **da, unsigned int rows, unsigned int cols)  

}  extern

"c"int func() // 注意這裡定義形式

res = cudamemcpy((void*)(da), (void*)(ha), rows*sizeof(int*), cudamemcpyhosttodevice);check(res)  

dim3 dimblock(16,16);  

dim3 dimgrid((cols+dimblock.x-1)/(dimblock.x), (rows+dimblock.y-1)/(dimblock.y));  

kerneltest<<>>(da, rows, cols);  

res = cudamemcpy((void*)(hc), (void*)(dc), rows*cols*sizeof(int), cudamemcpydevicetohost);check(res)  

for (r = 0; r 

}     

printf("\n");  

}  printf("the result is %s!\n", is_right? "right":"false");  

cudafree((void*)da);  

cudafree((void*)dc);  

free(ha);  

free(hc);  

//  getchar();

return 0;  

}  

檔案2:test2.c

[cpp]view plain

copy

#include 

int func(); // 注意宣告

int main()    

檔案3 :test3.cpp

[cpp]view plain

copy

#include 

using

namespace std;  

extern

"c"int func(); //注意這裡的宣告

int main()    

幾個方案可以用:

方案1:

將所有檔案分別編譯,最後統一合併!

對於c程式

[cpp]view plain

copy

$nvcc -c test1.cu  

$gcc  -c test2.c  

$gcc  -o testc test1.o test2.o -lcudart -l/usr/local/cuda/lib64  

c++ 程式

[cpp]view plain

copy

$nvcc -c test1.cu  

$g++  -c test3.cpp  

$g++  -o testcpp test1.o test3.o -lcudart -l/usr/local/cuda/lib64  

方案2:

將cuda程式弄成靜態庫

對於c程式

[cpp]view plain

copy

$nvcc -lib test1.cu -o libtestcu.a  

$gcc       test2.c -ltestcu -l. -lcudart -l/usr/local/cuda/lib64 -o testc  

對於c++

完全域c類似,只要將gcc 換成g++, test2.c換成test3.cpp

方案3:

將cuda程式弄成動態庫

makefile

[cpp]view plain

copy

all : c cpp   

c : libtestcu.so  

gcc test2.c   -ltestcu -l. -lcudart -l/usr/local/cuda/lib64 -o testc  

cpp : libtestcu.so  

g++ test3.cpp -ltestcu -l. -lcudart -l/usr/local/cuda/lib64 -o testcpp  

libtestcu.so : test.cu  

nvcc -o libtestcu.so -shared -xcompiler -fpic test1.cu  

clean :  

rm *.so testc testcpp  -f  

應該能看懂。

nvcc gcc g 混合編譯器程式設計

有很多同鞋問怎麼使用cuda和其它的編譯器連用呢?混合程式設計?先吧 貼出來 檔案1 test1.cu cpp view plain copy 檔案 test1.cu include include include define rows 32 define cols 16 define check...

c c 混合編譯

編譯可以用gcc g gcc c a.c gcc c a.cpp 而鏈結可以用g 或者gcc lstdc 因為gcc命令不能自動和c 程式使用的庫聯接,所以通常使用g 來完成聯接。用gcc編譯c 檔案 gcc o test test.cpp lstdc 如果字尾為.c,並且採用gcc編譯器,則該巨集...

C與C 混合程式設計 編譯

1.工程檔案架構 drwxrwxr x 3 joshyoby joshyoby 4096 2月 25 15 03 drwxrwxr x 8 joshyoby joshyoby 4096 2月 25 14 45 rw rw r 1 joshyoby joshyoby 671 2月 25 14 58 m...