0

我正在尝试在 C 中实现一个稀疏矩阵(COO 格式)框架,用于并行计算(共享内存)。最初我打算有一个空间信息结构的数组。

    typedef struct {
    unsigned int rowIdx;  \\ Row Index
    unsigned int colIdx;  \\ Col Index
    unsigned int dataVal; \\ Value
    } entity, *spMat;

并行阵列如何执行相同的?

4

1 回答 1

1

这在很大程度上取决于您打算如何实施该解决方案。如果您想利用 CPU 或 GPU 的数据并行功能,那么最好将其实现为数组结构而不是结构数组。

typedef struct {
  unsigned int* rowIdxs;
  unsigned int* colIdxs;
  unsigned int* dataValues;
} entity, *spMat;

这将使编写 CPU 编译器的矢量化器或 GPU 的编译器可以有效使用的代码变得更加容易。因此,在这种情况下,我可能会首先使用数组结构并针对数据并行性进行优化。

话虽如此,这在很大程度上取决于您的实施有多好。使用任何一种方法都可能编写性能不佳的实现。

于 2012-11-05T23:33:43.417 回答