From 228ae5a027d86c260198cbe345a24340a1e1ea97 Mon Sep 17 00:00:00 2001 From: Sriramkrishnan Muralikrishnan <sriramkrishnan.muralikrishnan@psi.ch> Date: Mon, 21 Feb 2022 09:40:04 +0100 Subject: [PATCH 1/3] Solve warmup added and timings reorganized --- alpine/BumponTailInstability.cpp | 7 +++++++ alpine/LandauDamping.cpp | 6 ++++++ alpine/PenningTrap.cpp | 23 ++++++++++++++++------- alpine/UniformPlasmaTest.cpp | 11 +++++++---- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/alpine/BumponTailInstability.cpp b/alpine/BumponTailInstability.cpp index c8f1e3d1..4e98bebd 100644 --- a/alpine/BumponTailInstability.cpp +++ b/alpine/BumponTailInstability.cpp @@ -183,6 +183,7 @@ int main(int argc, char *argv[]){ static IpplTimings::TimerRef PTimer = IpplTimings::getTimer("kick"); static IpplTimings::TimerRef RTimer = IpplTimings::getTimer("drift"); static IpplTimings::TimerRef updateTimer = IpplTimings::getTimer("update"); + static IpplTimings::TimerRef DummySolveTimer = IpplTimings::getTimer("solveWarmup"); static IpplTimings::TimerRef SolveTimer = IpplTimings::getTimer("solve"); static IpplTimings::TimerRef domainDecomposition = IpplTimings::getTimer("domainDecomp"); @@ -366,6 +367,12 @@ int main(int argc, char *argv[]){ //The update after the particle creation is not needed as the //particles are generated locally + IpplTimings::startTimer(DummySolveTimer); + P->rho_m = 0.0; + P->solver_mp->solve(); + IpplTimings::stopTimer(DummySolveTimer); + + P->scatterCIC(totalP, 0, hr); IpplTimings::startTimer(SolveTimer); diff --git a/alpine/LandauDamping.cpp b/alpine/LandauDamping.cpp index 98b7eb15..4febc3bd 100644 --- a/alpine/LandauDamping.cpp +++ b/alpine/LandauDamping.cpp @@ -168,6 +168,7 @@ int main(int argc, char *argv[]){ static IpplTimings::TimerRef PTimer = IpplTimings::getTimer("kick"); static IpplTimings::TimerRef RTimer = IpplTimings::getTimer("drift"); static IpplTimings::TimerRef updateTimer = IpplTimings::getTimer("update"); + static IpplTimings::TimerRef DummySolveTimer = IpplTimings::getTimer("solveWarmup"); static IpplTimings::TimerRef SolveTimer = IpplTimings::getTimer("solve"); static IpplTimings::TimerRef domainDecomposition = IpplTimings::getTimer("domainDecomp"); @@ -315,6 +316,11 @@ int main(int argc, char *argv[]){ //The update after the particle creation is not needed as the //particles are generated locally + IpplTimings::startTimer(DummySolveTimer); + P->rho_m = 0.0; + P->solver_mp->solve(); + IpplTimings::stopTimer(DummySolveTimer); + P->scatterCIC(totalP, 0, hr); IpplTimings::startTimer(SolveTimer); diff --git a/alpine/PenningTrap.cpp b/alpine/PenningTrap.cpp index 35437b01..fbbdfd3d 100644 --- a/alpine/PenningTrap.cpp +++ b/alpine/PenningTrap.cpp @@ -168,7 +168,18 @@ int main(int argc, char *argv[]){ }; static IpplTimings::TimerRef mainTimer = IpplTimings::getTimer("mainTimer"); + static IpplTimings::TimerRef particleCreation = IpplTimings::getTimer("particlesCreation"); + static IpplTimings::TimerRef dumpDataTimer = IpplTimings::getTimer("dumpData"); + static IpplTimings::TimerRef PTimer = IpplTimings::getTimer("kick"); + static IpplTimings::TimerRef RTimer = IpplTimings::getTimer("drift"); + static IpplTimings::TimerRef updateTimer = IpplTimings::getTimer("update"); + static IpplTimings::TimerRef DummySolveTimer = IpplTimings::getTimer("solveWarmup"); + static IpplTimings::TimerRef SolveTimer = IpplTimings::getTimer("Solve"); + static IpplTimings::TimerRef domainDecomposition = IpplTimings::getTimer("domainDecomp"); + + IpplTimings::startTimer(mainTimer); + size_type totalP = std::atol(argv[4]); const unsigned int nt = std::atoi(argv[5]); @@ -217,13 +228,6 @@ int main(int argc, char *argv[]){ P->nr_m = nr; - static IpplTimings::TimerRef particleCreation = IpplTimings::getTimer("particlesCreation"); - static IpplTimings::TimerRef updateTimer = IpplTimings::getTimer("update"); - static IpplTimings::TimerRef domainDecomposition = IpplTimings::getTimer("domainDecomp"); - static IpplTimings::TimerRef SolveTimer = IpplTimings::getTimer("Solve"); - static IpplTimings::TimerRef dumpDataTimer = IpplTimings::getTimer("dumpData"); - static IpplTimings::TimerRef PTimer = IpplTimings::getTimer("velocityPush"); - static IpplTimings::TimerRef RTimer = IpplTimings::getTimer("positionPush"); Vector_t length = rmax - rmin; @@ -333,6 +337,11 @@ int main(int argc, char *argv[]){ //The update after the particle creation is not needed as the //particles are generated locally + IpplTimings::startTimer(DummySolveTimer); + P->rho_m = 0.0; + P->solver_mp->solve(); + IpplTimings::stopTimer(DummySolveTimer); + P->scatterCIC(totalP, 0, hr); IpplTimings::startTimer(SolveTimer); diff --git a/alpine/UniformPlasmaTest.cpp b/alpine/UniformPlasmaTest.cpp index d740a705..6a662d6d 100644 --- a/alpine/UniformPlasmaTest.cpp +++ b/alpine/UniformPlasmaTest.cpp @@ -92,12 +92,12 @@ int main(int argc, char *argv[]){ static IpplTimings::TimerRef mainTimer = IpplTimings::getTimer("mainTimer"); static IpplTimings::TimerRef particleCreation = IpplTimings::getTimer("particlesCreation"); - static IpplTimings::TimerRef FirstUpdateTimer = IpplTimings::getTimer("initialisation"); static IpplTimings::TimerRef dumpDataTimer = IpplTimings::getTimer("dumpData"); static IpplTimings::TimerRef PTimer = IpplTimings::getTimer("kick"); static IpplTimings::TimerRef temp = IpplTimings::getTimer("randomMove"); static IpplTimings::TimerRef RTimer = IpplTimings::getTimer("drift"); static IpplTimings::TimerRef updateTimer = IpplTimings::getTimer("update"); + static IpplTimings::TimerRef DummySolveTimer = IpplTimings::getTimer("solveWarmup"); static IpplTimings::TimerRef SolveTimer = IpplTimings::getTimer("solve"); static IpplTimings::TimerRef domainDecomposition = IpplTimings::getTimer("domainDecomp"); @@ -172,7 +172,6 @@ int main(int argc, char *argv[]){ P->P = 0.0; IpplTimings::stopTimer(particleCreation); - IpplTimings::startTimer(FirstUpdateTimer); P->E_m.initialize(mesh, FL); P->rho_m.initialize(mesh, FL); @@ -188,7 +187,12 @@ int main(int argc, char *argv[]){ P->initSolver(); P->time_m = 0.0; P->loadbalancefreq_m = std::atoi(argv[7]); - + + IpplTimings::startTimer(DummySolveTimer); + P->rho_m = 0.0; + P->solver_mp->solve(); + IpplTimings::stopTimer(DummySolveTimer); + P->scatterCIC(totalP, 0, hr); P->initializeORB(FL, mesh); @@ -205,7 +209,6 @@ int main(int argc, char *argv[]){ P->gatherStatistics(totalP); IpplTimings::stopTimer(dumpDataTimer); - IpplTimings::stopTimer(FirstUpdateTimer); // begin main timestep loop msg << "Starting iterations ..." << endl; -- GitLab From 12e19c52bdf3dc5829251b9b431bbd374709fa65 Mon Sep 17 00:00:00 2001 From: Sriramkrishnan Muralikrishnan <sriramkrishnan.muralikrishnan@psi.ch> Date: Mon, 7 Mar 2022 12:05:27 +0100 Subject: [PATCH 2/3] Changes needed for comping with latest intel 2021.3.0 compiler --- alpine/LandauDamping.cpp | 2 +- src/Particle/ParticleAttrib.h | 4 +- src/Particle/ParticleBase.hpp | 4 +- src/Solver/FFTPeriodicPoissonSolver.h | 2 +- src/Utility/ParameterList.h | 62 +++++++++++++-------------- test/particle/PIC3d.cpp | 2 +- test/serialization/serialize01.cpp | 2 +- 7 files changed, 39 insertions(+), 39 deletions(-) diff --git a/alpine/LandauDamping.cpp b/alpine/LandauDamping.cpp index 4febc3bd..f8fdc1be 100644 --- a/alpine/LandauDamping.cpp +++ b/alpine/LandauDamping.cpp @@ -199,7 +199,7 @@ int main(int argc, char *argv[]){ // create mesh and layout objects for this problem domain Vector_t kw = {0.5, 0.5, 0.5}; - double alpha = 0.05; + double alpha = 0.5; Vector_t rmin(0.0); Vector_t rmax = 2 * pi / kw ; double dx = rmax[0] / nr[0]; diff --git a/src/Particle/ParticleAttrib.h b/src/Particle/ParticleAttrib.h index 16a05513..99276a82 100644 --- a/src/Particle/ParticleAttrib.h +++ b/src/Particle/ParticleAttrib.h @@ -79,11 +79,11 @@ namespace ippl { virtual ~ParticleAttrib() = default; - size_type size() const { + size_type size() const override { return dview_m.extent(0); } - size_type packedSize(const size_type count) const { + size_type packedSize(const size_type count) const override { return count * sizeof(value_type); } diff --git a/src/Particle/ParticleBase.hpp b/src/Particle/ParticleBase.hpp index c7ffc972..71e9d033 100644 --- a/src/Particle/ParticleBase.hpp +++ b/src/Particle/ParticleBase.hpp @@ -116,7 +116,7 @@ namespace ippl { auto nextID = this->nextID_m; auto numNodes = this->numNodes_m; Kokkos::parallel_for("ParticleBase<PLayout, Properties...>::create(size_t)", - Kokkos::RangePolicy(localNum_m, nLocal), + Kokkos::RangePolicy<size_type>(localNum_m, nLocal), KOKKOS_LAMBDA(const std::int64_t i) { pIDs(i) = nextID + numNodes * i; }); @@ -208,7 +208,7 @@ namespace ippl { // Find the indices of the valid particles in the invalid region Kokkos::parallel_scan("Second scan in ParticleBase::destroy()", - Kokkos::RangePolicy(localNum_m - destroyNum, localNum_m), + Kokkos::RangePolicy<size_type>(localNum_m - destroyNum, localNum_m), KOKKOS_LAMBDA(const size_t i, int& idx, const bool final) { if (final && !invalid(i)) locKeepIndex(idx) = i; diff --git a/src/Solver/FFTPeriodicPoissonSolver.h b/src/Solver/FFTPeriodicPoissonSolver.h index 91d29945..85b00732 100644 --- a/src/Solver/FFTPeriodicPoissonSolver.h +++ b/src/Solver/FFTPeriodicPoissonSolver.h @@ -60,7 +60,7 @@ namespace ippl { //~FFTPeriodicPoissonSolver() {} - void setRhs(rhs_type& rhs); + void setRhs(rhs_type& rhs) override; void solve() override; diff --git a/src/Utility/ParameterList.h b/src/Utility/ParameterList.h index 74cea3ce..cd857d58 100644 --- a/src/Utility/ParameterList.h +++ b/src/Utility/ParameterList.h @@ -133,37 +133,37 @@ namespace ippl { // Disable parameter list printing for Cuda builds until // the lambda issue is resolved -#ifndef KOKKOS_ENABLE_CUDA - /*! - * Print this parameter list. - */ - friend - std::ostream& operator<<(std::ostream& os, const ParameterList& sp) { - static int indent = -4; - - indent += 4; - if (indent > 0) { - os << '\n'; - } - for (const auto& [key, value] : sp.params_m) { - std::visit([&](auto&& arg){ - // 21 March 2021 - // https://stackoverflow.com/questions/15884284/c-printing-spaces-or-tabs-given-a-user-input-integer - os << std::string(indent, ' ') - << std::left << std::setw(20) << key - << " " << arg; - }, value); - // 21 March 2021 - // https://stackoverflow.com/questions/289715/last-key-in-a-stdmap - if (key != std::prev(sp.params_m.end())->first) { - os << '\n'; - } - } - indent -= 4; - - return os; - } -#endif +//#ifndef KOKKOS_ENABLE_CUDA +// /*! +// * Print this parameter list. +// */ +// friend +// std::ostream& operator<<(std::ostream& os, const ParameterList& sp) { +// static int indent = -4; +// +// indent += 4; +// if (indent > 0) { +// os << '\n'; +// } +// for (const auto& [key, value] : sp.params_m) { +// std::visit([&](auto&& arg){ +// // 21 March 2021 +// // https://stackoverflow.com/questions/15884284/c-printing-spaces-or-tabs-given-a-user-input-integer +// os << std::string(indent, ' ') +// << std::left << std::setw(20) << key +// << " " << arg; +// }, value); +// // 21 March 2021 +// // https://stackoverflow.com/questions/289715/last-key-in-a-stdmap +// if (key != std::prev(sp.params_m.end())->first) { +// os << '\n'; +// } +// } +// indent -= 4; +// +// return os; +// } +//#endif private: std::map<std::string, variant_t> params_m; diff --git a/test/particle/PIC3d.cpp b/test/particle/PIC3d.cpp index e2b1a1d5..fb04e1c5 100644 --- a/test/particle/PIC3d.cpp +++ b/test/particle/PIC3d.cpp @@ -249,7 +249,7 @@ public: val += viewqm(i); }, lqm); - double lQ = lq / this->EFDMag_m.sum(); + //double lQ = lq / this->EFDMag_m.sum(); } void initFields() { diff --git a/test/serialization/serialize01.cpp b/test/serialization/serialize01.cpp index 97eb90ac..0df7dbc3 100644 --- a/test/serialization/serialize01.cpp +++ b/test/serialization/serialize01.cpp @@ -105,7 +105,7 @@ public: auto& this_view = this->getView(j); Kokkos::parallel_for("assign", - Kokkos::RangePolicy(5, 15), KOKKOS_LAMBDA(const size_t i) { + Kokkos::RangePolicy<size_t>(5, 15), KOKKOS_LAMBDA(const size_t i) { bview(i-5) = this_view(i); }); } -- GitLab From 3e61e84c82fcc11c8c151c35d995d279fea47d3e Mon Sep 17 00:00:00 2001 From: Sriramkrishnan Muralikrishnan <sriramkrishnan.muralikrishnan@psi.ch> Date: Mon, 4 Jul 2022 12:31:36 +0200 Subject: [PATCH 3/3] Comment added to Parameter list and a commented portion removed --- alpine/LandauDamping.cpp | 2 +- src/Utility/ParameterList.h | 1 + test/particle/PIC3d.cpp | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/alpine/LandauDamping.cpp b/alpine/LandauDamping.cpp index f8fdc1be..4febc3bd 100644 --- a/alpine/LandauDamping.cpp +++ b/alpine/LandauDamping.cpp @@ -199,7 +199,7 @@ int main(int argc, char *argv[]){ // create mesh and layout objects for this problem domain Vector_t kw = {0.5, 0.5, 0.5}; - double alpha = 0.5; + double alpha = 0.05; Vector_t rmin(0.0); Vector_t rmax = 2 * pi / kw ; double dx = rmax[0] / nr[0]; diff --git a/src/Utility/ParameterList.h b/src/Utility/ParameterList.h index cd857d58..edd986fe 100644 --- a/src/Utility/ParameterList.h +++ b/src/Utility/ParameterList.h @@ -131,6 +131,7 @@ namespace ippl { params_m[key] = value; } +// The following commented portion has compiler errors with Intel and Clang // Disable parameter list printing for Cuda builds until // the lambda issue is resolved //#ifndef KOKKOS_ENABLE_CUDA diff --git a/test/particle/PIC3d.cpp b/test/particle/PIC3d.cpp index fb04e1c5..dd507bd6 100644 --- a/test/particle/PIC3d.cpp +++ b/test/particle/PIC3d.cpp @@ -249,7 +249,6 @@ public: val += viewqm(i); }, lqm); - //double lQ = lq / this->EFDMag_m.sum(); } void initFields() { -- GitLab