Tableau parallèle ou tableau de structures

J’essaie d’implémenter un framework en masortingce creuse (format COO) en C pour l’informatique parallèle (mémoire partagée). Au départ, je prévoyais avoir un tableau de structure des informations spatiales.

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

Comment fonctionne le tableau parallèle pour le même?

Cela dépend en grande partie de la manière dont vous avez l’intention d’implémenter la solution. Si vous souhaitez tirer parti des fonctionnalités de données parallèles de la CPU ou du GPU, vous avez intérêt à les implémenter en tant que structure de tableaux plutôt qu’en tant que tableau.

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

Cela facilitera l’écriture de code que le vectorizor du compilateur de processeur ou le compilateur de GPU peut utiliser efficacement. Donc, dans ce cas, j’utiliserais probablement d’abord une structure de tableaux et une optimisation pour les données parallèles (ness).

Cela étant dit, cela dépendra en grande partie de la qualité de votre mise en œuvre. il serait possible d’écrire une implémentation peu performante avec l’une ou l’autre approche.