Então, eu estava fazendo uma codificação CUDA e queria uma interface para traduzir índices de arrays 3D (conveniente de usar, mas não adequado em GPU) e arrays “kernel” 1D (dor para decifrar índices, mas muito mais rápido que 3D).
Em outras palavras, eu queria uma relação que mapeie ( i
é o índice em 1D):
(x,y,z) -> i
Assim como:
i -> (x,y,z)
Aqui está o que eu usei para obter o índice 1D:
i = x + y * max_x + z * max_x * max_y
Essa foi fácil. É assim que funciona ao contrário:
x = i % max_x
y = ( i / max_x ) % max_y
z = i / ( max_x * max_y )
Nota: max ({x, y, z}) denota o valor máximo possível do índice, isto é, o tamanho da submatriz (como na definição de C de arr[maxx][maxy][maxz]
).
Na verdade, fiz a matemática por trás disso!