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コンパイラのvectorizo​​rまたはGPUのコンパイラのいずれかが効率的に使用できるコードを簡単に記述できるようになります。したがって、この場合、おそらく最初に配列の構造体を使用し、データの並列性を最適化します。

そうは言っても、それはあなたの実装がどれだけ優れているかに大きく依存します。どちらのアプローチでも、パフォーマンスの低い実装を作成することは可能です。

于 2012-11-05T23:33:43.417 に答える