Optimize BSSN surface interpolation fast path
This commit is contained in:
@@ -8,10 +8,11 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <fstream>
|
||||
#include <strstream>
|
||||
#include <cmath>
|
||||
#include <map>
|
||||
using namespace std;
|
||||
#include <strstream>
|
||||
#include <cmath>
|
||||
#include <map>
|
||||
#include <cstdlib>
|
||||
using namespace std;
|
||||
#else
|
||||
#include <iostream.h>
|
||||
#include <iomanip.h>
|
||||
@@ -29,12 +30,26 @@ using namespace std;
|
||||
#include "fadmquantites_bssn.h"
|
||||
#include "getnpem2.h"
|
||||
#include "getnp4.h"
|
||||
#include "parameters.h"
|
||||
|
||||
#define PI M_PI
|
||||
//|============================================================================
|
||||
//| Constructor
|
||||
//|============================================================================
|
||||
#include "parameters.h"
|
||||
|
||||
#define PI M_PI
|
||||
|
||||
namespace
|
||||
{
|
||||
bool amss_surface_timing_enabled()
|
||||
{
|
||||
static int enabled = -1;
|
||||
if (enabled < 0)
|
||||
{
|
||||
const char *env = getenv("AMSS_SURFACE_TIMING");
|
||||
enabled = (env && atoi(env) != 0) ? 1 : 0;
|
||||
}
|
||||
return enabled != 0;
|
||||
}
|
||||
}
|
||||
//|============================================================================
|
||||
//| Constructor
|
||||
//|============================================================================
|
||||
|
||||
surface_integral::surface_integral(int iSymmetry) : Symmetry(iSymmetry),
|
||||
wave_cache_spinw(-1),
|
||||
@@ -3281,6 +3296,8 @@ void surface_integral::surf_WaveMassPAng(double rex, int lev, cgh *GH,
|
||||
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs,
|
||||
double *Rout, monitor *Monitor, bool refresh_mass_fields)
|
||||
{
|
||||
const bool timing = amss_surface_timing_enabled();
|
||||
const double t_start = timing ? MPI_Wtime() : 0.0;
|
||||
if (Symmetry != 0 && Symmetry != 1)
|
||||
{
|
||||
surf_Wave(rex, lev, GH, Rpsi4, Ipsi4, spinw, maxl, NN, RP, IP, Monitor);
|
||||
@@ -3325,6 +3342,7 @@ void surface_integral::surf_WaveMassPAng(double rex, int lev, cgh *GH,
|
||||
Pp = Pp->next;
|
||||
}
|
||||
}
|
||||
const double t_refresh_done = timing ? MPI_Wtime() : 0.0;
|
||||
|
||||
const int InList = 19;
|
||||
const int idx_rpsi4 = 0, idx_ipsi4 = 1;
|
||||
@@ -3380,6 +3398,7 @@ void surface_integral::surf_WaveMassPAng(double rex, int lev, cgh *GH,
|
||||
|
||||
double *shellf = new double[n_tot * InList];
|
||||
GH->PatL[lev]->data->Interp_Points(DG_List, n_tot, pox, shellf, Symmetry, Nmin, Nmax);
|
||||
const double t_interp_done = timing ? MPI_Wtime() : 0.0;
|
||||
|
||||
double *RP_out = new double[NN];
|
||||
double *IP_out = new double[NN];
|
||||
@@ -3496,6 +3515,7 @@ void surface_integral::surf_WaveMassPAng(double rex, int lev, cgh *GH,
|
||||
if (Symmetry == 0)
|
||||
p_outz += f1o8 * Psi * (nx_g[n] * axz + ny_g[n] * ayz + nz_g[n] * azz) * theta_weight;
|
||||
}
|
||||
const double t_integral_done = timing ? MPI_Wtime() : 0.0;
|
||||
|
||||
for (int ii = 0; ii < NN; ii++)
|
||||
{
|
||||
@@ -3534,6 +3554,7 @@ void surface_integral::surf_WaveMassPAng(double rex, int lev, cgh *GH,
|
||||
delete[] reduce_out;
|
||||
delete[] reduce_in;
|
||||
}
|
||||
const double t_reduce_done = timing ? MPI_Wtime() : 0.0;
|
||||
|
||||
#ifdef GaussInt
|
||||
mass = mass * rex * rex * dphi * factor;
|
||||
@@ -3565,6 +3586,19 @@ void surface_integral::surf_WaveMassPAng(double rex, int lev, cgh *GH,
|
||||
Rout[5] = sy;
|
||||
Rout[6] = sz;
|
||||
|
||||
if (timing)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"[AMSS-SURFACE][rank %d] rex=%.6g lev=%d refresh=%.6f interp=%.6f integral=%.6f reduce=%.6f total=%.6f nlocal=%d ntotal=%d modes=%d\n",
|
||||
myrank, rex, lev,
|
||||
t_refresh_done - t_start,
|
||||
t_interp_done - t_refresh_done,
|
||||
t_integral_done - t_interp_done,
|
||||
t_reduce_done - t_integral_done,
|
||||
t_reduce_done - t_start,
|
||||
Nmax - Nmin + 1, n_tot, NN);
|
||||
}
|
||||
|
||||
delete[] pox[0];
|
||||
delete[] pox[1];
|
||||
delete[] pox[2];
|
||||
|
||||
Reference in New Issue
Block a user