From e3fda9210a8de6b912d12007f2086108c61c3fc4 Mon Sep 17 00:00:00 2001
From: JordanHanotiaux <103147288+JordanHanotiaux@users.noreply.github.com>
Date: Fri, 11 Apr 2025 15:22:11 +0200
Subject: [PATCH] Update distributedmatrix.cpp

---
 P2/distributedmatrix.cpp | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/P2/distributedmatrix.cpp b/P2/distributedmatrix.cpp
index e395f04..eaa6a2f 100644
--- a/P2/distributedmatrix.cpp
+++ b/P2/distributedmatrix.cpp
@@ -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;
 }
-- 
GitLab