1
我已經寫了有main.cpp
包括Common.h
文件未定義參考
#include "Common.h"
int main(int argc , char **argv)
{
...
DeviceFunc(a_h , numvar , b_h); //Showing the data
....
}
然後,CUDA應用CUDA實現的功能,Common.h
包含:
#ifndef __Common_H
#define __Common_H
#endif
void DeviceFunc(float * , int , float *);
此外,DeviceFunc.cu
是相同的文件夾:
#include<cuda.h>
#include<stdio.h>
#include "Common.h"
__device__ __global__ void Kernel(float *, float * ,int);
void DeviceFunc(float *temp_h , int numvar , float *temp1_h)
{
float *a_d , *b_d;
//Memory allocation on the device
cudaMalloc(&a_d,sizeof(float)*(numvar)*(numvar+1));
cudaMalloc(&b_d,sizeof(float)*(numvar)*(numvar+1));
//Copying data to device from host
cudaMemcpy(a_d, temp_h, sizeof(float)*numvar*(numvar+1),cudaMemcpyHostToDevice);
//Defining size of Thread Block
dim3 dimBlock(numvar+1,numvar,1);
dim3 dimGrid(1,1,1);
//Kernel call
Kernel<<<dimGrid , dimBlock>>>(a_d , b_d , numvar);
//Coping data to host from device
cudaMemcpy(temp1_h,b_d,sizeof(float)*numvar*(numvar+1),cudaMemcpyDeviceToHost);
//Deallocating memory on the device
cudaFree(a_d);
cudaFree(b_d);
}
}
現在,當我與nvcc -o main main.cpp
編譯代碼,我得到這個錯誤main.cpp:(.text+0x3a0): undefined reference to 'DeviceFunc(float*, int, float*)'
什麼是
您需要將DeviceFunc.cu構建到對象中並將其鏈接到主應用程序中。 –
您使用的是CUDA 5嗎? –
如果將cuda安裝在/ usr/local/cuda的常用位置,則可以查看/ usr/local/cuda/lib中的庫。其中一些在其名稱末尾會有多達3個數字,如4.1.28或5.0.35這些數字會告訴您cuda版本4.1.xx = cuda 4.1,5.0.xx = cuda 5.0使用ls/usr /本地/ cuda/lib或無限cuda安裝在您的服務器上。或者如果構建了samples/SDK,您可以運行deviceQuery示例,它會告訴您cuda版本。 –