关于.cuh的应用

版主你好
我的程序已经运行成功,但是所有的函数都在一个文件里,我想把它们分出来写成多文件的形式,我参照CUDA5.0 sample里的Imaging中的HSOpticalFlow例子那样编写,后在包含main的.cu文件里包含.cuh怎么无法运行,报错说是重复定义,请问这样的直接#include“Square.cuh”还需要其他的设置吗
其中.cuh中的包含两个函数,还有必须的头文件
//kernel函数
global void SquaresKernel(const float Icols, const float colorM,int width,int height,floatdest)
{
int x=threadIdx.x+blockIdx.x
blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;

int tid=y*width+x;//就是本线程处理的那个像素

if(x<width&&y<height)
{
	dest[tid]=(float)((colorM[0]-Icols[tid*3])*(colorM[0]-Icols[tid*3])+
		              (colorM[1]-Icols[tid*3+1])*(colorM[1]-Icols[tid*3+1])+
	                  (colorM[2]-Icols[tid*3+2])*(colorM[2]-Icols[tid*3+2]));
	__syncthreads();
}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Square(float* hos_Icols,floatdev_Icols,float hos_colorM,floatdev_colorM,int width,int height,float hos_dest,
float* dev_dest)
{
checkCudaErrors(cudaSetDevice(0));

checkCudaErrors(cudaMemcpy(dev_Icols,hos_Icols,width*height*3*sizeof(float),cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(dev_colorM,hos_colorM,3*sizeof(float),cudaMemcpyHostToDevice));

dim3 DimBlock(16,16,1);
dim3 DimGrid((width+DimBlock.x-1)/DimBlock.x,(height+DimBlock.y-1)/DimBlock.y,1);

SquaresKernel<<<DimGrid,DimBlock>>>(dev_Icols,dev_colorM,width,height,dev_dest);
getLastCudaError("SquaresKernel Kernel execution failed");

checkCudaErrors(cudaMemcpy(hos_dest,dev_dest,width*height*sizeof(float),cudaMemcpyDeviceToHost));

return 0;

}

是否是链接时的问题?如果include到main.cu中编译时只要编译main.cu就可以了,比如只需使用nvcc main.cu 编译无需添加Square.cuh。

谢谢您的回答
您能在回复详细一点吗,有点没听明白,谢谢啦

LZ您好:

请您参考如下链接:

http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6344

祝您好运~