diff --git a/P2/distributedmatrix.cpp b/P2/distributedmatrix.cpp index 3d6d08c198abdd93aa47416b9a0e7f480370b994..e395f042055364cc1fb7acbb79a084c44a042be9 100644 --- a/P2/distributedmatrix.cpp +++ b/P2/distributedmatrix.cpp @@ -79,19 +79,25 @@ int DistributedMatrix::localColIndex(int globalColIndex) const { } 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 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; } } + + // Si aucune condition n'est remplie, cela signifie que globalColIndex appartient au dernier processus return numProcesses - 1; - } + const Matrix& DistributedMatrix::getLocalData() const { return localData; }