我有一份存储在1D数组中的3D数据。我通过以下方式计算1D索引:
index = i + j * WIDTH + k * WIDTH * HEIGHT
然后我需要从 index
中找回原始的 i,j,k
索引。显而易见的方法就是像这样:
k = index / (WIDTH * HEIGHT)
j = (index % (WIDTH * HEIGHT)) / WIDTH
i = index - j * WIDTH - k * WIDTH * HEIGHT
但是我想知道,有没有更有效的方法来做到这一点?至少不用取模...
这个问题的背景是,我在CUDA中有一个内核,我访问数据并计算i、j、k索引(索引对应于唯一的线程ID)。也许有一些特定于CUDA的方法可以解决这个问题?我猜这是一个相当普遍的问题,但我找不到更好的方法来解决它...
感谢您的想法!
i,j,k
是整数,则它将始终有效。 - Jaa-ci
一样对待j
:j = (index - (k*WIDTH*HEIGHT))/WIDTH
。如果你想让它看起来更清晰,并且不需要原始索引,你可以这样做:k = index/(WIDTH*HEIGHT); index -= k*WIDTH*HEIGHT; j = index/WIDTH; index -= j*WIDTH; i = index
。 - Jonathan Dursi