我正在尝试在 C 中实现一个稀疏矩阵(COO 格式)框架,用于并行计算(共享内存)。最初我打算有一个空间信息结构的数组。
typedef struct {
unsigned int rowIdx; \\ Row Index
unsigned int colIdx; \\ Col Index
unsigned int dataVal; \\ Value
} entity, *spMat;
并行阵列如何执行相同的?
我正在尝试在 C 中实现一个稀疏矩阵(COO 格式)框架,用于并行计算(共享内存)。最初我打算有一个空间信息结构的数组。
typedef struct {
unsigned int rowIdx; \\ Row Index
unsigned int colIdx; \\ Col Index
unsigned int dataVal; \\ Value
} entity, *spMat;
并行阵列如何执行相同的?
这在很大程度上取决于您打算如何实施该解决方案。如果您想利用 CPU 或 GPU 的数据并行功能,那么最好将其实现为数组结构而不是结构数组。
typedef struct {
unsigned int* rowIdxs;
unsigned int* colIdxs;
unsigned int* dataValues;
} entity, *spMat;
这将使编写 CPU 编译器的矢量化器或 GPU 的编译器可以有效使用的代码变得更加容易。因此,在这种情况下,我可能会首先使用数组结构并针对数据并行性进行优化。
话虽如此,这在很大程度上取决于您的实施有多好。使用任何一种方法都可能编写性能不佳的实现。