diff --git a/examples/ex_eigs_dparTests.c b/examples/ex_eigs_dparTests.c index 90d36909..44f57705 100644 --- a/examples/ex_eigs_dparTests.c +++ b/examples/ex_eigs_dparTests.c @@ -237,6 +237,7 @@ int main (int argc, char *argv[]) { fprintf(primme.outputFile, "Iterations: %-" PRIMME_INT_P "\n", primme.stats.numOuterIterations); fprintf(primme.outputFile, "Restarts : %-" PRIMME_INT_P "\n", primme.stats.numRestarts); fprintf(primme.outputFile, "Matvecs : %-" PRIMME_INT_P "\n", primme.stats.numMatvecs); + fprintf(primme.outputFile, "Sketched Matvecs : %-" PRIMME_INT_P "\n", primme.stats.numSketchedMatvecs); fprintf(primme.outputFile, "Preconds : %-" PRIMME_INT_P "\n", primme.stats.numPreconds); fprintf(primme.outputFile, "Elapsed Time : %-22.10E\n", primme.stats.elapsedTime); fprintf(primme.outputFile, "MatVec Time : %-22.10E\n", primme.stats.timeMatvec); diff --git a/include/primme_eigs.h b/include/primme_eigs.h index 8aa2c2f6..409e51ac 100644 --- a/include/primme_eigs.h +++ b/include/primme_eigs.h @@ -127,6 +127,7 @@ typedef struct primme_stats { PRIMME_INT numOuterIterations; PRIMME_INT numRestarts; PRIMME_INT numMatvecs; + PRIMME_INT numSketchedMatvecs; PRIMME_INT numPreconds; PRIMME_INT numGlobalSum; /* times called globalSumReal */ PRIMME_INT numBroadcast; /* times called broadcastReal */ @@ -417,7 +418,8 @@ typedef enum { PRIMME_queue = 88 , PRIMME_profile = 89 , PRIMME_expansionParams_expansion = 90 , - PRIMME_residualParams_residual = 91 + PRIMME_residualParams_residual = 91 , + PRIMME_stats_numSketchedMatvecs = 92 } primme_params_label; /* Hermitian operator */ diff --git a/src/eigs/lanczos.c b/src/eigs/lanczos.c index 67d4be1c..92ad347e 100644 --- a/src/eigs/lanczos.c +++ b/src/eigs/lanczos.c @@ -67,6 +67,7 @@ int print_lanczos_timings_Sprimme(PRIMME_INT basisSize, primme_context ctx) { printf("Iterations: %-" PRIMME_INT_P "\n", primme->stats.numOuterIterations); printf("Restarts : %-" PRIMME_INT_P "\n", primme->stats.numRestarts); printf("Matvecs : %-" PRIMME_INT_P "\n", primme->stats.numMatvecs); + printf("Sketched Matvecs : %-" PRIMME_INT_P "\n", primme->stats.numSketchedMatvecs); printf("Preconds : %-" PRIMME_INT_P "\n", primme->stats.numPreconds); printf("Elapsed Time : %-22.10E\n", primme->stats.elapsedTime); printf("MatVec Time : %-22.10E\n", primme->stats.timeMatvec); @@ -204,6 +205,7 @@ int lanczos_Sprimme(HEVAL *evals, SCALAR *evecs, PRIMME_INT ldevecs, primme->stats.numOuterIterations = 0; primme->stats.numRestarts = 0; primme->stats.numMatvecs = 0; + primme->stats.numSketchedMatvecs = 0; primme->stats.numPreconds = 0; primme->stats.numGlobalSum = 0; primme->stats.numBroadcast = 0; diff --git a/src/eigs/main_iter.c b/src/eigs/main_iter.c index 314ef1cb..60495d15 100644 --- a/src/eigs/main_iter.c +++ b/src/eigs/main_iter.c @@ -125,6 +125,7 @@ int print_timings_Sprimme(PRIMME_INT basisSize, primme_context ctx) { printf("Iterations: %-" PRIMME_INT_P "\n", primme->stats.numOuterIterations); printf("Restarts : %-" PRIMME_INT_P "\n", primme->stats.numRestarts); printf("Matvecs : %-" PRIMME_INT_P "\n", primme->stats.numMatvecs); + printf("Sketched Matvecs : %-" PRIMME_INT_P "\n", primme->stats.numSketchedMatvecs); printf("Preconds : %-" PRIMME_INT_P "\n", primme->stats.numPreconds); printf("Elapsed Time : %-22.10E\n", primme->stats.elapsedTime); printf("MatVec Time : %-22.10E\n", primme->stats.timeMatvec); @@ -397,6 +398,7 @@ int main_iter_Sprimme(HEVAL *evals, SCALAR *evecs, PRIMME_INT ldevecs, primme->stats.numOuterIterations = 0; primme->stats.numRestarts = 0; primme->stats.numMatvecs = 0; + primme->stats.numSketchedMatvecs = 0; primme->stats.numPreconds = 0; primme->stats.numGlobalSum = 0; primme->stats.numBroadcast = 0; @@ -1685,6 +1687,7 @@ int sketched_main_iter_Sprimme(HEVAL *evals, SCALAR *evecs, PRIMME_INT ldevecs, primme->stats.numOuterIterations = 0; primme->stats.numRestarts = 0; primme->stats.numMatvecs = 0; + primme->stats.numSketchedMatvecs = 0; primme->stats.numPreconds = 0; primme->stats.numGlobalSum = 0; primme->stats.numBroadcast = 0; diff --git a/src/eigs/primme_interface.c b/src/eigs/primme_interface.c index ce4dbfdf..d68dc363 100644 --- a/src/eigs/primme_interface.c +++ b/src/eigs/primme_interface.c @@ -178,6 +178,7 @@ void primme_initialize(primme_params *primme) { primme->stats.numOuterIterations = 0; primme->stats.numRestarts = 0; primme->stats.numMatvecs = 0; + primme->stats.numSketchedMatvecs = 0; primme->stats.numPreconds = 0; primme->stats.numGlobalSum = 0; primme->stats.flopsDense = 0.0; @@ -984,6 +985,9 @@ int primme_get_member(primme_params *primme, primme_params_label label, case PRIMME_stats_numMatvecs: *(PRIMME_INT*)value = primme->stats.numMatvecs; break; + case PRIMME_stats_numSketchedMatvecs: + *(PRIMME_INT*)value = primme->stats.numSketchedMatvecs; + break; case PRIMME_stats_numPreconds: *(PRIMME_INT*)value = primme->stats.numPreconds; break; @@ -1312,6 +1316,9 @@ int primme_set_member(primme_params *primme, primme_params_label label, case PRIMME_stats_numMatvecs: primme->stats.numMatvecs = *(PRIMME_INT*)value; break; + case PRIMME_stats_numSketchedMatvecs: + primme->stats.numSketchedMatvecs = *(PRIMME_INT*)value; + break; case PRIMME_stats_numPreconds: primme->stats.numPreconds = *(PRIMME_INT*)value; break; @@ -1504,6 +1511,7 @@ int primme_member_info(primme_params_label *label, const char **label_name, IF_IS(stats_numOuterIterations , stats_numOuterIterations); IF_IS(stats_numRestarts , stats_numRestarts); IF_IS(stats_numMatvecs , stats_numMatvecs); + IF_IS(stats_numSketchedMatvecs , stats_numSketchedMatvecs); IF_IS(stats_numPreconds , stats_numPreconds); IF_IS(stats_numGlobalSum , stats_numGlobalSum); IF_IS(stats_volumeGlobalSum , stats_volumeGlobalSum); @@ -1582,6 +1590,7 @@ int primme_member_info(primme_params_label *label, const char **label_name, case PRIMME_stats_numOuterIterations: case PRIMME_stats_numRestarts: case PRIMME_stats_numMatvecs: + case PRIMME_stats_numSketchedMatvecs: case PRIMME_stats_numPreconds: case PRIMME_stats_numGlobalSum: case PRIMME_stats_volumeGlobalSum: diff --git a/src/eigs/sketch.c b/src/eigs/sketch.c index 68798bdd..c51c96d3 100644 --- a/src/eigs/sketch.c +++ b/src/eigs/sketch.c @@ -169,7 +169,10 @@ int sketch_basis_Sprimme(SCALAR *V, PRIMME_INT ldV, SCALAR *SV, PRIMME_INT ldSV, CHKERR(Bortho_local_Sprimme(Q, ldQ, T, ldT, basisSize, basisSize+blockSize-1, NULL, 0, 0, ldQ, NULL, 0, primme->iseed, ctx)); } - if (primme) primme->stats.timeSketchMatvec += primme_wTimer() - t0; + if (primme) { + primme->stats.timeSketchMatvec += primme_wTimer() - t0; + primme->stats.numSketchedMatvecs += blockSize; + } return 0; }