diff --git a/P2/distributedtests.cpp b/P2/distributedtests.cpp index e3d8ca75431acfd886c7f6011a8bc042db2863d3..cbc483a6fed91eff42feb188f32d2be715608c0a 100644 --- a/P2/distributedtests.cpp +++ b/P2/distributedtests.cpp @@ -6,20 +6,19 @@ #include <cassert> #include <cmath> #include <functional> +#include <nvToolsExt.h> // Pour NVTX - - -// Helper function to test if two doubles are approximately equal +// Fonction utilitaire pour vérifier si deux doubles sont proches bool approxEqual(double a, double b, double epsilon = 1e-10) { return std::abs(a - b) < epsilon; } -// Helper function to test if two matrices are approximately equal +// Fonction utilitaire pour vérifier si deux matrices sont égales bool matricesEqual(const Matrix& a, const Matrix& b, double epsilon = 1e-10) { if (a.numRows() != b.numRows() || a.numCols() != b.numCols()) { return false; } - + for (int i = 0; i < a.numRows(); i++) { for (int j = 0; j < a.numCols(); j++) { if (!approxEqual(a.get(i, j), b.get(i, j), epsilon)) { @@ -27,66 +26,75 @@ bool matricesEqual(const Matrix& a, const Matrix& b, double epsilon = 1e-10) { } } } - + return true; } -// Test multiplyTransposed +// Test multiplyTransposed avec NVTX pour marquage et analyse des performances void testMultiplyTransposed() { int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); - // Create test matrices - Matrix matrix1Full(256, 256); - Matrix matrix2Full(256, 256); - for (int i = 0; i < 256; i++) { - for (int j = 0; j < 256; j++) { + // Créer des matrices de test + Matrix matrix1Full(1024, 1024); // Taille plus petite pour une exécution rapide + Matrix matrix2Full(1024, 1024); + for (int i = 0; i < 1024; i++) { + for (int j = 0; j < 1024; j++) { matrix1Full.set(i, j, i * 5 + j + 1); } } - for (int i = 0; i < 256; i++) { - for (int j = 0; j < 256; j++) { + for (int i = 0; i < 1024; i++) { + for (int j = 0; j < 1024; j++) { matrix2Full.set(i, j, i * 5 + j + 2); } } - - // Create distributed matrices + + // Créer des matrices distribuées int numProcs; MPI_Comm_size(MPI_COMM_WORLD, &numProcs); DistributedMatrix matrix1(matrix1Full, numProcs); DistributedMatrix matrix2(matrix2Full, numProcs); - - // Compute expected result + + // Calculer la matrice attendue (référence) Matrix expectedMatrix = matrix1Full * matrix2Full.transpose(); - // Compute A * B^T + // Profilage avec NVTX pour marquer les sections de calcul + nvtxRangePushA("MPI_Init"); // Début de l'initialisation MPI + + // Profilage du calcul (avant l'opération) + nvtxRangePushA("DistributedMatrix::multiplyTransposed"); + + // Exécuter A * B^T Matrix result = matrix1.multiplyTransposed(matrix2); - - // Check + + nvtxRangePop(); // Fin de l'opération multiplyTransposed + nvtxRangePop(); // Fin de l'initialisation MPI + + // Vérification du résultat assert(matricesEqual(result, expectedMatrix, 1e-8)); - + if (rank == 0) { std::cout << "MultiplyTransposed test passed!" << std::endl; } } int main(int argc, char** argv) { - // Initialize MPI + // Initialiser MPI int initialized; MPI_Initialized(&initialized); if (!initialized) { MPI_Init(&argc, &argv); } - + int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); - + if (rank == 0) { std::cout << "Starting DistributedMatrix tests..." << std::endl; } - + try { - // Run tests + // Lancer le test testMultiplyTransposed(); if (rank == 0) { @@ -99,14 +107,8 @@ int main(int argc, char** argv) { } MPI_Abort(MPI_COMM_WORLD, 1); } - - // Finalize MPI if we initialized it - // int finalized; - // MPI_Finalized(&finalized); - // if (!finalized && initialized) { - // MPI_Finalize(); - // } + // Finaliser MPI si nécessaire MPI_Finalize(); return 0; -} \ No newline at end of file +} diff --git a/P2/profile_mpi_computation.nsys-rep b/P2/profile_mpi_computation.nsys-rep index 8ffd1dbfd35e6e705424d7690dbeac0d19c8e1dd..9591b0509a910c333d80c1e61fe1c11d076a3321 100644 Binary files a/P2/profile_mpi_computation.nsys-rep and b/P2/profile_mpi_computation.nsys-rep differ