__global__ void kernel(GPU::PtrStepSz<float> src , GPU::PtrStepSz<float> dst,
int dst_row
) {
int i = threadIdx.x + blockIdx.x * blockDim.x; // thread在x方向的全局索引,也就是列坐标,第X列
int j = threadIdx.y + blockIdx.y * blockDim.y; // thread在y方向的全局索引,也就是行坐标,第J行
if (j < src.rows && i < src.cols) //判断是否越界
{
if (j == 0) {
float sum_valuecoor, sum_value;
for (int j_y = 0; j_y < src.rows; j_y++) {
if (src(j_y, i) > 30) {
sum_valuecoor += j_y * src(j_y, i);
sum_value += src(j_y, i);
//printf("hang : (%d)\n", j_y);
}
//printf("huiduzhongxin_X: (%f)\n", huiduzhongxin_X);
//cunfang
// 访问一个像素的方式是src(行坐标,列坐标)
}
if (sum_valuecoor > 0) {
float huiduzhongxin_X = sum_valuecoor / sum_value;
dst(dst_row, i) = huiduzhongxin_X;
}
else {
dst(dst_row, i) = 0;
}
}
}
//__syncthreads(); // 同步所有线程
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。
经过一天的挣扎,发现这个
src(j_y, i);
这种访问形式,访问到的数值有问题,很大的数,printf出来看了:
src(j_y, i) : (-1073741824)
src(j_y, i) : (536870912)
src(j_y, i) : (1610612736)
src(j_y, i) : (1073741824)
src(j_y, i) : (-2147483648)
于是目前我推测,block和grid问题应该是不大了,传值或者访问有很大问题啊
问题解决了 ,是数据类型的问题。float换成uchar就解决了。坑死了卡了好久
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!