Skip to content
Extraits de code Groupes Projets
Valider e3fda921 rédigé par JordanHanotiaux's avatar JordanHanotiaux
Parcourir les fichiers

Update distributedmatrix.cpp

parent 5198c0e1
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -82,22 +82,33 @@ int DistributedMatrix::ownerProcess(int globalColIndex) const {
// Vecteur pour stocker les startCols de chaque processus
std::vector<int> localStartProcesses(numProcesses);
// Synchroniser les startCols de tous les processus
// Calcul du startCol pour le processus local
int remainingCols = globalCols % numProcesses;
int localCols = globalCols / numProcesses; // Cols par processus
int startCol = rank * localCols + std::min(rank, remainingCols);
// Synchroniser les startCols entre tous les processus
MPI_Allgather(&startCol, 1, MPI_INT, localStartProcesses.data(), 1, MPI_INT, MPI_COMM_WORLD);
// Vérifier à quel processus appartient globalColIndex
for (int p = 1; p < numProcesses; ++p) {
// Si globalColIndex est entre deux startCols, le processus p-1 est le propriétaire
if (globalColIndex >= localStartProcesses[p-1] && globalColIndex < localStartProcesses[p]) {
return p - 1;
// Vérifier à quel processus appartient globalColIndex en utilisant localStartProcesses
for (int p = 0; p < numProcesses; ++p) {
// Définir le nombre de colonnes pour le processus p (p peut avoir une colonne supplémentaire)
int cols = localCols + (p < remainingCols ? 1 : 0);
int start = localStartProcesses[p];
int end = start + cols;
// Vérifier si la colonne globale est dans l'intervalle de ce processus
if (globalColIndex >= start && globalColIndex < end) {
return p;
}
}
// Si aucune condition n'est remplie, cela signifie que globalColIndex appartient au dernier processus
return numProcesses - 1;
// Si aucune condition n'est remplie (cela ne devrait pas arriver), renvoyer par défaut le processus 0
return 0;
}
const Matrix& DistributedMatrix::getLocalData() const {
return localData;
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter