Je me demandais quel est le moyen le plus rapide de calculer un produit matriciel-vectoriel clairsemé y = Ax dans CUDA sur plusieurs GPU (disons n).Produit vectoriel Sparse Matrix sur plusieurs GPUs
Mon approche naïve serait de diviser le vecteur x et y en n morceaux, 1 morceau sur chaque GPU. Puis aussi diviser la matrice A dans les petites n^2 blocs A_ij et calcul
y_i = \sum_j A_{i,j} x_j, // GPU j stores A_{i,j} and x_j, result is copied
// to and summed up on GPU i
sur les différents processeurs graphiques j = 1..n avec disons cuSPARSE. Cela fonctionnerait-il? Avec l'architecture de mémoire unifiée, tous les GPU devraient en principe pouvoir accéder à la mémoire globale.
Le transfert de mémoire entre les GPU va-t-il être incroyablement lent? Je ne m'attends pas à une grande accélération, mais je me demandais si cela allait être plus lent que de faire la multiplication matricielle-vectorielle sur un seul GPU.
Je ne pense pas qu'il y ait une réponse générale à cette question, elle est loin d'être large. Il y a eu un * lot * de recherches sur le produit vectoriel à matrice clairsemée pour les systèmes à mémoire distribuée, y compris les GPU. Vous feriez mieux de lire certaines de ces questions que de poser une question comme celle-ci ici [SO] – talonmies
Vous avez raison. Je suppose que ce que je cherchais est une implémentation simple/bon marché (réutilisant les appels à cuSPARSE) qui fonctionne correctement sur plusieurs GPU. – yon