1
因此,我正在編寫一個非常基本的CUDA代碼(向量補充),以教會自己瞭解CUDA編程的基礎知識。當我編寫一個.cu文件時,我已經得到了它的工作,但現在我正試圖使它與一個鏈接在一起的.c和.cu文件一起工作。我的main.c文件如下:將C代碼與Cuda代碼鏈接起來
#include "Test.h"
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n = 1000;
size_t size = n * sizeof(float);
int i;
float *h_a = malloc(size), *h_b = malloc(size), *h_c = malloc(size);
for(i = 0; i < n; i++) {
h_a[i] = h_b[i] = i;
}
addVec(h_a, h_b, h_c, n);
exit(0);
}
這裏,Test.h只是說:
void addVec(float *, float *, float *, int);
我vecAdd.cu文件說:
#include "Test.h"
__global__ void vecAdd(float *a, float *b, float *c, int n) {
int i = blockDim.x * blockIdx.x + threadIdx.x;
if(i < n)
c[i] = a[i] + b[i];
}
void addVec(float *a, float *b, float *c, int n) {
float *d_a, *d_b, *d_c;
size_t size = n * sizeof(float);
cudaMalloc(&d_a, size);
cudaMalloc(&d_b, size);
cudaMalloc(&d_c, size);
...
}
我然後運行命令:
gcc -c -Wall -O3 main.c -o ../obj/main.o
nvcc -c -O3 vecAdd.cu -o ../obj/vecAdd.o
gcc -L/usr/local/cuda/lib64 -lcudart ../obj/main.o ../obj/vecAdd.o -o ../bin/nvTest
前兩項工作正常。最後一個,當我嘗試鏈接兩個目標文件時,告訴我有一個未定義的addVec引用,儘管它在vecAdd.cu中定義了...我做錯了什麼?
謝謝先生,這個作品完美。 – wolfPack88