相关疑难解决方法(0)

如何计算3D坐标的线性索引,反之亦然?

如果我有一个点(x,yz),我如何找到线性指数,i为该点?我的编号方案是(0,0,0)是0,(1,0,0)是1 ,. ..,(0,1,0)是max-x-dimension,....另外,如果我有一个线性坐标,i,我如何找到(x,y,z)?我似乎无法在谷歌上找到这个,所有的结果都充满了其他无关紧要的东西.谢谢!

arrays math matrix multidimensional-array coordinate-transformation

9
推荐指数
1
解决办法
6726
查看次数

将数据上传到共享内存中以用于卷积内核

我在参考评论中理解批量加载时遇到一些困难.为了计算像素中的卷积,大小为5的掩模必须以该特定像素为中心.图像被分为图块.应用卷积掩模后的这些图块是尺寸为的最终输出图块TILE_WIDTH*TILE_WIDTH.对于属于输出图块边框的像素,当此图块属于图像的边框时,图像必须从相邻图块借用一些像素.否则,这些借来的值被赋值为零.这两个步骤描述于

if (srcY >= 0 && srcY < height && srcX >= 0 && srcX < width)
    N_ds[destY][destX] = I[src];
else
    N_ds[destY][destX] = 0;
Run Code Online (Sandbox Code Playgroud)

因此,共享存储器阵列的TILE_WIDTH + Mask_width - 1每一侧都有尺寸.我不清楚代码的以下部分.

  1. 在destY和destX指数.将输出索引除以输入切片宽度意味着什么?
  2. 在srcY添加srcX索引.为什么destY和destX索引参与srcY添加srcX索引?

    srcY = blockIdx.y * TILE_WIDTH + destY - Mask_radius;

    srcX = blockIdx.x * TILE_WIDTH + destX - Mask_radius;

  3. 为什么在第二次加载时我们使用偏移TILE_WIDTH * TILE_WIDTH?
  4. 一般来说,有两次加载的直观解释是什么?
  5. 所有这些问题都可以根据下面的图像进行直观的示例吗?
  6. 谢谢!

编辑:图片添加.在绿色中有输出瓦片,在红色中我们有掩模以114索引为中心.很明显,面具借用了不同瓷砖的元素.最后,该图像指的是一个通道.

示例: …

cuda gpu

9
推荐指数
1
解决办法
5918
查看次数