我正在为图片编写一个CUDA内核来处理直方图,但我不知道如何从内核返回一个数组,并且当其他线程读取它时数组将会改变。任何可能的解决方案?如何制作CUDA直方图内核?
__global__ void Hist(
TColor *dst, //input image
int imageW,
int imageH,
int*data
){
const int ix = blockDim.x * blockIdx.x + threadIdx.x;
const int iy = blockDim.y * blockIdx.y + threadIdx.y;
if(ix < imageW && iy < imageH)
{
int pixel = get_red(dst[imageW * (iy) + (ix)]);
//this assign specific RED value of image to pixel
data[pixel] ++; // ?? problem statement ...
}
}
@para d_dst:输入图像TColor等于float4。
@para数据:为直方图尺寸数组当与CUDA(或与一般GPGPU)实现[255]
extern "C" void
cuda_Hist(TColor *d_dst, int imageW, int imageH,int* data)
{
dim3 threads(BLOCKDIM_X, BLOCKDIM_Y);
dim3 grid(iDivUp(imageW, BLOCKDIM_X), iDivUp(imageH, BLOCKDIM_Y));
Hist<<<grid, threads>>>(d_dst, imageW, imageH, data);
}
但是,我的任务是尝试使用CUDA应用直方图。我无法完成它。数据无法单独实现 – kitw 2010-06-05 13:50:01