помогите пожалуйста создать шаблон в с использованием вычислением на куде!
итак в .cpp создаю шаблон:
template <typename T> void GaussKernel(T* myPic, int width, int height, T* myFinalPic)
{
float* gaussMatrix = makeGaussMatrix();
int nsize = width*height;
float* dev_gaussMatrix;
T* dev_myPic;
T* dev_myNewPic;
T* dev_myFinalPic;
cudaMalloc((void**)&dev_gaussMatrix, CACHE_SIZE*sizeof(float));
cudaMemcpy(dev_gaussMatrix, gaussMatrix, CACHE_SIZE*sizeof(float), cudaMemcpyHostToDevice);
cudaMalloc((void**)&dev_myPic, nSize*sizeof(T));
cudaMemcpy(dev_myPic, myPic, nSize*sizeof(T), cudaMemcpyHostToDevice);
cudaMalloc((void**)&dev_myNewPic, nSize*sizeof(T));
cudaMalloc((void**)&dev_myFinalPic, nSize*sizeof(T));
launch_horizontal<T>(dev_gaussMatrix, dev_myPic, dev_myNewPic, nSize, width, height);
launch_vertical<T>(dev_gaussMatrix, dev_myNewPic, dev_myFinalPic, nSize, width, height);
myFinalPic = new T[nSize];
cudaMemcpy(myFinalPic, dev_myFinalPic ,nSize*sizeof(T), cudaMemcpyDeviceToHost);
};
на сколько я понимаю в .cu у меня пусто (только #include "gauss.cuh" #include "device_functions.h")
далее в .cuh у меня:
template <typename T> __global__ void horizontalRun(float* dev_gaussMatrix, T* dev_myPic, T* dev_myNewPic, int nSize, int width, int height)
{
int i = threadIdx.x + blockIdx.x * blockDim.x; ...и т.д.
};
template <typename T> __global__ void verticalRun(float* dev_gaussMatrix, T* dev_myNewPic, T* dev_myFinalPic, int nSize, int width, int height)
{
int i = threadIdx.x + blockIdx.x * blockDim.x; ...и т.д.
};
template <typename T> void launch_horizontal(float* dev_gaussMatrix, T* dev_myPic, T* dev_myNewPic, int nSize, int width, int height)
{
int numOfBlocks = (width * height + threadsPerBlock - 1)/threadsPerBlock;
horizontalRun<T> <<<numOfBlocks, threadsPerBlock>>>(dev_gaussMatrix, dev_myPic, dev_myNewPic, nSize, width, height);
cudaThreadSynchronize();
}
template <typename T> void launch_vertical(float* dev_gaussMatrix, T* dev_myNewPic, T* dev_myFinalPic, int nSize, int width, int height)
{
int numOfBlocks = (width * height + threadsPerBlock - 1)/threadsPerBlock;
verticalRun<T> <<<numOfBlocks, threadsPerBlock>>>(dev_gaussMatrix, dev_myNewPic, dev_myFinalPic, nSize, width, height);
cudaThreadSynchronize();
}
#endif
ну и ничего не работает, судя по всему я вообще неправильно все это описываю.