Implement deleting Vppph

This commit is contained in:
Alejandro Gallo 2022-04-05 17:16:11 +02:00
parent 7d37bd9f8b
commit fed19ff52c
7 changed files with 196 additions and 181 deletions

View File

@ -2955,6 +2955,7 @@ namespace atrip {
GROUP_AND_SORT, GROUP_AND_SORT,
}; };
ADD_ATTRIBUTE(bool, deleteVppph, false)
ADD_ATTRIBUTE(bool, rankRoundRobin, false) ADD_ATTRIBUTE(bool, rankRoundRobin, false)
ADD_ATTRIBUTE(bool, chrono, false) ADD_ATTRIBUTE(bool, chrono, false)
ADD_ATTRIBUTE(bool, barrier, false) ADD_ATTRIBUTE(bool, barrier, false)
@ -3063,14 +3064,6 @@ Atrip::Output Atrip::run(Atrip::Input<F> const& in) {
MPI_Comm_size(child_comm, &child_size); MPI_Comm_size(child_comm, &child_size);
} }
// BUILD SLICES PARAMETRIZED BY NV ==================================={{{1
WITH_CHRONO("nv-slices",
LOG(0,"Atrip") << "BUILD NV-SLICES\n";
TAPHH<F> taphh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
HHHA<F> hhha(*in.Vhhhp, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
)
// BUILD SLICES PARAMETRIZED BY NV x NV =============================={{{1 // BUILD SLICES PARAMETRIZED BY NV x NV =============================={{{1
WITH_CHRONO("nv-nv-slices", WITH_CHRONO("nv-nv-slices",
LOG(0,"Atrip") << "BUILD NV x NV-SLICES\n"; LOG(0,"Atrip") << "BUILD NV x NV-SLICES\n";
@ -3079,6 +3072,18 @@ Atrip::Output Atrip::run(Atrip::Input<F> const& in) {
TABHH<F> tabhh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe); TABHH<F> tabhh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
) )
// delete the Vppph so that we don't have a HWM situation for the NV slices
if (in.deleteVppph) {
delete in.Vppph;
}
// BUILD SLICES PARAMETRIZED BY NV ==================================={{{1
WITH_CHRONO("nv-slices",
LOG(0,"Atrip") << "BUILD NV-SLICES\n";
TAPHH<F> taphh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
HHHA<F> hhha(*in.Vhhhp, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
)
// all tensors // all tensors
std::vector< SliceUnion<F>* > unions = {&taphh, &hhha, &abph, &abhh, &tabhh}; std::vector< SliceUnion<F>* > unions = {&taphh, &hhha, &abph, &abhh, &tabhh};
@ -3251,12 +3256,12 @@ Atrip::Output Atrip::run(Atrip::Input<F> const& in) {
const double doublesFlops const double doublesFlops
= double(No) = double(No)
* double(No) ,* double(No)
* double(No) ,* double(No)
* (double(No) + double(Nv)) ,* (double(No) + double(Nv))
* 2.0 ,* 2.0
* (traits::isComplex<F>() ? 2.0 : 1.0) ,* (traits::isComplex<F>() ? 2.0 : 1.0)
* 6.0 ,* 6.0
/ 1e9 / 1e9
; ;

View File

@ -17,13 +17,15 @@ int main(int argc, char** argv) {
MPI_Init(&argc, &argv); MPI_Init(&argc, &argv);
int no(10), nv(10), itMod(-1), percentageMod(10); int no(10), nv(10), itMod(-1), percentageMod(10);
bool nochrono(false), barrier(false), rankRoundRobin(false); bool nochrono(false), barrier(false), rankRoundRobin(false),
keepVppph(false);
std::string tuplesDistributionString = "naive"; std::string tuplesDistributionString = "naive";
CLI::App app{"Main bench for atrip"}; CLI::App app{"Main bench for atrip"};
app.add_option("--no", no, "Occupied orbitals"); app.add_option("--no", no, "Occupied orbitals");
app.add_option("--nv", nv, "Virtual orbitals"); app.add_option("--nv", nv, "Virtual orbitals");
app.add_option("--mod", itMod, "Iteration modifier"); app.add_option("--mod", itMod, "Iteration modifier");
app.add_flag("--keep-vppph", keepVppph, "Do not delete Vppph");
app.add_flag("--nochrono", nochrono, "Do not print chrono"); app.add_flag("--nochrono", nochrono, "Do not print chrono");
app.add_flag("--rank-round-robin", rankRoundRobin, "Do rank round robin"); app.add_flag("--rank-round-robin", rankRoundRobin, "Do rank round robin");
app.add_flag("--barrier", barrier, "Use the first barrier"); app.add_flag("--barrier", barrier, "Use the first barrier");
@ -38,7 +40,8 @@ int main(int argc, char** argv) {
constexpr double elem_to_gb = 8.0 / 1024.0 / 1024.0 / 1024.0; constexpr double elem_to_gb = 8.0 / 1024.0 / 1024.0 / 1024.0;
// USER PRINTING TEST BEGIN // USER PRINTING TEST BEGIN
const double doublesFlops = no * no * no const double doublesFlops
= no * no * no
* (no + nv) * (no + nv)
* 2.0 * 2.0
* 6.0 * 6.0
@ -110,7 +113,8 @@ int main(int argc, char** argv) {
Vppph.fill_random(0, 1); Vppph.fill_random(0, 1);
atrip::Atrip::init(); atrip::Atrip::init();
const auto in = atrip::Atrip::Input<double>() const auto in
= atrip::Atrip::Input<double>()
// Tensors // Tensors
.with_epsilon_i(&ei) .with_epsilon_i(&ei)
.with_epsilon_a(&ea) .with_epsilon_a(&ea)
@ -120,6 +124,7 @@ int main(int argc, char** argv) {
.with_Vijka(&Vhhhp) .with_Vijka(&Vhhhp)
.with_Vabci(&Vppph) .with_Vabci(&Vppph)
// some options // some options
.with_deleteVppph(!keepVppph)
.with_barrier(barrier) .with_barrier(barrier)
.with_chrono(!nochrono) .with_chrono(!nochrono)
.with_rankRoundRobin(rankRoundRobin) .with_rankRoundRobin(rankRoundRobin)

View File

@ -60,6 +60,7 @@ namespace atrip {
GROUP_AND_SORT, GROUP_AND_SORT,
}; };
ADD_ATTRIBUTE(bool, deleteVppph, false)
ADD_ATTRIBUTE(bool, rankRoundRobin, false) ADD_ATTRIBUTE(bool, rankRoundRobin, false)
ADD_ATTRIBUTE(bool, chrono, false) ADD_ATTRIBUTE(bool, chrono, false)
ADD_ATTRIBUTE(bool, barrier, false) ADD_ATTRIBUTE(bool, barrier, false)

View File

@ -96,14 +96,6 @@ Atrip::Output Atrip::run(Atrip::Input<F> const& in) {
MPI_Comm_size(child_comm, &child_size); MPI_Comm_size(child_comm, &child_size);
} }
// BUILD SLICES PARAMETRIZED BY NV ==================================={{{1
WITH_CHRONO("nv-slices",
LOG(0,"Atrip") << "BUILD NV-SLICES\n";
TAPHH<F> taphh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
HHHA<F> hhha(*in.Vhhhp, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
)
// BUILD SLICES PARAMETRIZED BY NV x NV =============================={{{1 // BUILD SLICES PARAMETRIZED BY NV x NV =============================={{{1
WITH_CHRONO("nv-nv-slices", WITH_CHRONO("nv-nv-slices",
LOG(0,"Atrip") << "BUILD NV x NV-SLICES\n"; LOG(0,"Atrip") << "BUILD NV x NV-SLICES\n";
@ -112,6 +104,18 @@ Atrip::Output Atrip::run(Atrip::Input<F> const& in) {
TABHH<F> tabhh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe); TABHH<F> tabhh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
) )
// delete the Vppph so that we don't have a HWM situation for the NV slices
if (in.deleteVppph) {
delete in.Vppph;
}
// BUILD SLICES PARAMETRIZED BY NV ==================================={{{1
WITH_CHRONO("nv-slices",
LOG(0,"Atrip") << "BUILD NV-SLICES\n";
TAPHH<F> taphh(*in.Tpphh, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
HHHA<F> hhha(*in.Vhhhp, (size_t)No, (size_t)Nv, (size_t)np, child_comm, universe);
)
// all tensors // all tensors
std::vector< SliceUnion<F>* > unions = {&taphh, &hhha, &abph, &abhh, &tabhh}; std::vector< SliceUnion<F>* > unions = {&taphh, &hhha, &abph, &abhh, &tabhh};