【发布时间】:2015-10-18 04:28:15
【问题描述】:
我需要将动态数组的动态数组转换为一维数组以进行 CUDA 计算。
示例伪代码:
x[0] = [1, 4, 3, 9]
x[1] = [2, 0]
x[2] = [5, 7, 6]
y = flatten(x) // Eg.: [1, 4, 3, 9, 2, 0, 5, 7, 6]
get_index(a, b) // Should return index in 1D array
// that coresponds to element in original 2D array
y[get_index(0, 2)] = 4
y[get_index(1, 0)] = 2
y[get_index(2, 2)] = 7
我发现将二维数组传递给 CUDA 内核的最佳方法是将其展平,但它仅适用于矩阵 (i=block.x*M+block.y),但不适用于每行具有不同列数的情况。
编辑:
我需要使用参数访问 1D 数组元素,就像它是 2D 一样,例如:a & b。
【问题讨论】:
-
x 只是一个数组数组,实现可能会有所不同......但元素的数量是动态的
-
出于好奇,你在 x 上做了什么数学运算?你不能用不同的列数对那个东西做基本的矩阵数学。如果您将它们作为条目处理,则只需将行堆叠在一起 y = [x[i], x[i+1], ..., x[n]]
-
嗯,第一维是指组ID,第二维是指节点ID,值是指另一个数组中的索引,它的值应该相加。所以没有矩阵计算。
标签: c++ arrays multidimensional-array cuda jagged-arrays