有很多同鞋問怎麼使用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 < rows; 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 混合編譯器程式設計
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...
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...