diff --git a/src/gpu/VirtualFluids_GPU/Communication/Communicator.h b/src/gpu/VirtualFluids_GPU/Communication/Communicator.h index 91669f48ad1ca0fe2d75fbf54d90d9607d83204c..c52d5af9cacb4d5ae4e46090a263f67d4e63f12d 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/Communicator.h +++ b/src/gpu/VirtualFluids_GPU/Communication/Communicator.h @@ -27,8 +27,7 @@ public: virtual void resetRequest() = 0; ////////////////////////////////////////////////////////////////////////// virtual int mapCudaDevice(const int &rank, const int &size, const std::vector<unsigned int> &devices, const int &maxdev) = 0; - virtual std::vector<double> gatherNUPS(double processNups) = 0; - virtual double sumNups(double processNups) = 0; + virtual double reduceSum(double quantityPerProcess) = 0; ////////////////////////////////////////////////////////////////////////// virtual void receive_send(uint *buffer_receive, int size_buffer_recv, int neighbor_rank_recv, uint *buffer_send, int size_buffer_send, int neighbor_rank_send) const override = 0; diff --git a/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.cpp b/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.cpp index c56dae1dd1bf81a2fe8a68d2649abc35ce208240..8af5931ce92b6fa4904ab3aea7c901773f61a6b3 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.cpp +++ b/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.cpp @@ -216,21 +216,9 @@ int MpiCommunicator::mapCudaDevice(const int &rank, const int &size, const std:: return device; } -std::vector<double> MpiCommunicator::gatherNUPS(double processNups) +double MpiCommunicator::reduceSum(double quantityPerProcess) { - double *buffer_send = &processNups; - double *buffer_recv = (double *)malloc(sizeof(double) * this->numprocs); - - MPI_Gather(buffer_send, 1, MPI_DOUBLE, buffer_recv, 1, MPI_DOUBLE, 0, commGPU); - - if (this->PID == 0) - return std::vector<double>(buffer_recv, buffer_recv + this->numprocs); - return std::vector<double>(); -} - -double MpiCommunicator::sumNups(double processNups) -{ - double *buffer_send = &processNups; + double *buffer_send = &quantityPerProcess; double *buffer_recv = (double *)malloc(sizeof(double)); MPI_Reduce(buffer_send, buffer_recv, 1, MPI_DOUBLE, MPI_SUM, 0, commGPU); diff --git a/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.h b/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.h index 3fc5d1a9418afdec0caae6db1a99fe1f5921ac02..f7f202eb9d0d447fe52924056b637817a141156a 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.h +++ b/src/gpu/VirtualFluids_GPU/Communication/MpiCommunicator.h @@ -55,8 +55,7 @@ public: void exchngDataGeo(int *sbuf_t, int *rbuf_t, int *sbuf_b, int *rbuf_b, int count); MPI_Comm getMpiCommunicator(); int mapCudaDevice(const int &rank, const int &size, const std::vector<unsigned int> &devices, const int &maxdev) override; - std::vector<double> gatherNUPS(double processNups) override; - double sumNups(double processNups) override; + double reduceSum(double quantityPerProcess) override; ////////////////////////////////////////////////////////////////////////// void receive_send(uint *buffer_receive, int size_buffer_recv, int neighbor_rank_recv, uint *buffer_send, int size_buffer_send, int neighbor_rank_send) const override; diff --git a/src/gpu/VirtualFluids_GPU/Output/Timer.cpp b/src/gpu/VirtualFluids_GPU/Output/Timer.cpp index 5a5e010944a776038416386267c3bf6477d47e9f..f6efff58440bd786d57a3ccb44d2271c29761323 100644 --- a/src/gpu/VirtualFluids_GPU/Output/Timer.cpp +++ b/src/gpu/VirtualFluids_GPU/Output/Timer.cpp @@ -52,7 +52,7 @@ void Timer::outputPerformance(uint t, Parameter* para, vf::gpu::Communicator& co // When using multiple GPUs, sum the nups of all processes if (communicator.getNumberOfProcess() > 1) { - double nupsSum = communicator.sumNups(fnups); + double nupsSum = communicator.reduceSum(fnups); if (communicator.getPID() == 0) VF_LOG_INFO("Sum of all {} processes: Nups in Mio: {:.1f}", communicator.getNumberOfProcess(), nupsSum); } diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp index 8109766a36e489bfd903deba2d68d52250c72c8e..6073a4d6dd2aa7ea145bee7f6e0225f90d3ec171 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp +++ b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp @@ -276,11 +276,7 @@ public: { return 0; }; - std::vector<double> gatherNUPS(double processNups) override - { - return {}; - }; - double sumNups(double processNups) override + double reduceSum(double quantityPerProcess) override { return 0; };