版主你好
我的程序已经运行成功,但是所有的函数都在一个文件里,我想把它们分出来写成多文件的形式,我参照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.xblockDim.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;
}