我的图片是灰度图片。我想使用float*
类型处理一个线程中的列的平均值。我想用平均值添加输出像素的值。当我启动它时,我只能看到一行。我无法理解发生了什么。
__global__ void processing(float* in, float* out, int COL, int ROW)
{
int row=10;
int col=10;
__shared__ float u_shared[10];
int idx=threadx.x
if (idx>=N){return;}
float mean = 0;
if ( idx < COL)
{
for (int jdx=0; jdx < ROW; ++jdx)
{
mean += in[idx*ROW+jdx];
}
u_shared[idx] = mean/ROW;
for (int jdxx=0; jdxx < ROW; ++jdxx)
{
out[idx*ROW+jdxx] = in[idx*ROW+jdxx]+mean;
}
}
}
kernel<<<1,10>>> // one thread for one column
答案 0 :(得分:1)
这样的东西应该可行(在浏览器中编码,未经测试):
__global__ void processing(float* in, float* out, int COL, int ROW)
{
int idx=threadx.x + blockDim.x*blockIdx.x;
float mean = 0;
if ( idx < COL)
{
for (int jdx=0; jdx < ROW; ++jdx)
{
mean += in[jdx*COL+idx];
}
mean /= ROW;
for (int jdx=0; jdx < ROW; ++jdx)
{
out[jdx*COL+idx] = mean + in[jdx*COL+idx];
}
}
}
如果您的图片有1000行,5000列,您可以像这样启动它:
#define NROW 1000
#define NCOL 5000
#define nTPB 256
processing<<<(NCOL+nTPB-1)/nTPB, nTPB>>>(in_data, out_data, NCOL, NROW);
这假定输入和输出的普通,非音调分配。