Commit 7cf460b1 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Enable optional stage debugging of AM

parent d183b813
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -456,6 +456,7 @@ CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUGFLAGS = @DEBUGFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
+23 −1
Original line number Diff line number Diff line
@@ -669,6 +669,7 @@ OFFLOADFLAGS
BUILDFORTRAN_FALSE
BUILDFORTRAN_TRUE
ENABLE_ILP64
DEBUGFLAGS
HDF5_LDFLAGS
CXXCPP
LT_SYS_LIBRARY_PATH
@@ -813,6 +814,7 @@ with_aix_soname
with_gnu_ld
with_sysroot
enable_libtool_lock
enable_debug
enable_ilp64
enable_fortran
enable_offload
@@ -1479,6 +1481,7 @@ Optional Features:
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --enable-debug=FEATURE  enable debug of FEATURE [default=no]
  --enable-ilp64          enable 64-bit indexing [default=yes]
  --enable-fortran        enable legacy FORTRAN compilation [default=auto]
  --enable-offload        enable target offloading (requires g++ version >=
@@ -24936,6 +24939,25 @@ esac
fi
# Configure the optional features
# Check whether --enable-debug was given.
if test ${enable_debug+y}
then :
  enableval=$enable_debug;
    if test "x$enableval" = "xAM"; then
      DEBUGFLAGS="-DDEBUG_AM"
    fi
else case e in #(
  e)
    DEBUGFLAGS=""
 ;;
esac
fi
# Check whether --enable-ilp64 was given.
if test ${enable_ilp64+y}
then :
@@ -25647,7 +25669,7 @@ else case e in #(
 ;;
esac
fi
CXXFLAGS="$CLANGFLAGS $OPTFLAGS -ggdb $OFFLOADFLAGS $USER_INCLUDE -I$HDF5_INCLUDE $OMPFLAGS $MPIFLAGS $LAPACKFLAGS $MAGMAFLAGS $NVTXFLAGS"
CXXFLAGS="$CLANGFLAGS $OPTFLAGS -ggdb $DEBUGFLAGS $OFFLOADFLAGS $USER_INCLUDE -I$HDF5_INCLUDE $OMPFLAGS $MPIFLAGS $LAPACKFLAGS $MAGMAFLAGS $NVTXFLAGS"
SUBDIRS="cluster libnptm sphere testing trapping"
# Generate the output
+14 −1
Original line number Diff line number Diff line
@@ -405,6 +405,19 @@ AS_IF(
)

# Configure the optional features
AC_ARG_ENABLE(
  [debug],
  [AS_HELP_STRING([--enable-debug=FEATURE], [enable debug of FEATURE [default=no]])],
  [
    if test "x$enableval" = "xAM"; then
      AC_SUBST([DEBUGFLAGS], ["-DDEBUG_AM"])
    fi
  ],
  [
    AC_SUBST([DEBUGFLAGS], [""])
  ]
)

AC_ARG_ENABLE(
  [ilp64],
  [AS_HELP_STRING([--enable-ilp64], [enable 64-bit indexing [default=yes]])],
@@ -641,7 +654,7 @@ AS_IF(
  [AC_SUBST([OMPFLAGS], [""])],
  [AC_SUBST([OMPFLAGS], [$OMPFLAGS])]
)
CXXFLAGS="$CLANGFLAGS $OPTFLAGS -ggdb $OFFLOADFLAGS $USER_INCLUDE -I$HDF5_INCLUDE $OMPFLAGS $MPIFLAGS $LAPACKFLAGS $MAGMAFLAGS $NVTXFLAGS"
CXXFLAGS="$CLANGFLAGS $OPTFLAGS -ggdb $DEBUGFLAGS $OFFLOADFLAGS $USER_INCLUDE -I$HDF5_INCLUDE $OMPFLAGS $MPIFLAGS $LAPACKFLAGS $MAGMAFLAGS $NVTXFLAGS"
SUBDIRS="cluster libnptm sphere testing trapping"

# Generate the output
+66 −9
Original line number Diff line number Diff line
@@ -83,10 +83,6 @@
#include "../include/file_io.h"
#endif

#ifndef INCLUDE_UTILS_H_
#include "../include/utils.h"
#endif

using namespace std;

// I would like to put it all in a struct, but then I'd have to write a constructor for it, due to members defined as references, creating a worse nightmare than the one I'd like to simplify...
@@ -374,7 +370,7 @@ void cluster(const string& config_file, const string& data_file, const string& o
      int myjxi488startoffset = 0;
      int myMPIstride = ompnumthreads;
      int myMPIblock = ompnumthreads;
      // Define here shared arrays of virtual ascii and binary files, so that thread 0 will be able to access the all later
      // Define here shared arrays of virtual ascii and binary files, so that thread 0 will be able to access them all later
      VirtualAsciiFile **p_outarray = NULL;
      VirtualBinaryFile **vtppoanarray = NULL;

@@ -766,8 +762,41 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
  interval_start = chrono::high_resolution_clock::now();
#ifdef USE_NVTX
  nvtxRangePush("Calculate inverted matrix");
#endif
#ifdef DEBUG_AM
  /* now, before cms, output am to p_outam0 */
  VirtualAsciiFile *outam0 = new VirtualAsciiFile();
  string outam0_name = output_path + "/c_AM0_JXI" + to_string(jxi488) + ".txt";
  sprintf(virtual_line, " AM matrix before CMS\n");
  outam0->append_line(virtual_line);
  sprintf(virtual_line, " I1+1   I2+1    Real    Imag\n");
  outam0->append_line(virtual_line);
  for (int iam=0; iam<ndit; iam++) {
    for (int jam=0; jam<ndit; jam++) {
      sprintf(virtual_line, " %d   %d   %17.8lE   %17.8lE\n", iam, jam, real(cid->am[iam][jam]), imag(cid->am[iam][jam]));
      outam0->append_line(virtual_line);
    }
  }
  outam0->write_to_disk(outam0_name);
  delete outam0;
#endif
  cms(cid->am, cid->c1, cid->c1ao, cid->c4, cid->c6);
#ifdef DEBUG_AM
  VirtualAsciiFile *outam1 = new VirtualAsciiFile();
  string outam1_name = output_path + "/c_AM1_JXI" + to_string(jxi488) + ".txt";
  sprintf(virtual_line, " AM matrix after CMS before LUCIN\n");
  outam1->append_line(virtual_line);
  sprintf(virtual_line, " I1+1   I2+1    Real    Imag\n");
  outam1->append_line(virtual_line);
  for (int iam=0; iam<ndit; iam++) {
    for (int jam=0; jam<ndit; jam++) {
      sprintf(virtual_line, " %d   %d   %17.8lE   %17.8lE\n", iam, jam, real(cid->am[iam][jam]), imag(cid->am[iam][jam]));
      outam1->append_line(virtual_line);
    }
  }
  outam1->write_to_disk(outam1_name);
  delete outam1;
#endif
#ifdef USE_NVTX
  nvtxRangePop();
#endif
@@ -775,15 +804,27 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
  elapsed = interval_end - interval_start;
  message = "INFO: matrix calculation for scale " + to_string(jxi488) + " took " + to_string(elapsed.count()) + "s.\n";
  logger->log(message);
  if (jxi488 == 1) {
    string am_file_name = "c_am_jxi_1.txt";
    write_dcomplex_matrix(am_file_name, cid->am, 624, 624);
  }
  interval_start = chrono::high_resolution_clock::now();
#ifdef USE_NVTX
  nvtxRangePush("Invert the matrix");
#endif
  invert_matrix(cid->am, ndit, jer, mxndm, cid->proc_device);
#ifdef DEBUG_AM
  VirtualAsciiFile *outam2 = new VirtualAsciiFile();
  string outam2_name = output_path + "/c_AM2_JXI" + to_string(jxi488) + ".txt";
  sprintf(virtual_line, " AM matrix after LUCIN before ZTM\n");
  outam2->append_line(virtual_line);
  sprintf(virtual_line, " I1+1   I2+1    Real    Imag\n");
  outam2->append_line(virtual_line);
  for (int iam=0; iam<ndit; iam++) {
    for (int jam=0; jam<ndit; jam++) {
      sprintf(virtual_line, " %d   %d   %17.8lE   %17.8lE\n", iam, jam, real(cid->am[iam][jam]), imag(cid->am[iam][jam]));
      outam2->append_line(virtual_line);
    }
  }
  outam2->write_to_disk(outam2_name);
  delete outam2;
#endif
#ifdef USE_NVTX
  nvtxRangePop();
#endif
@@ -802,6 +843,22 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
  nvtxRangePush("Average calculation");
#endif
  ztm(cid->am, cid->c1, cid->c1ao, cid->c4, cid->c6, cid->c9);
#ifdef DEBUG_AM
  VirtualAsciiFile *outam3 = new VirtualAsciiFile();
  string outam3_name = output_path + "/c_AM3_JXI" + to_string(jxi488) + ".txt";
  sprintf(virtual_line, " AM matrix after ZTM\n");
  outam3->append_line(virtual_line);
  sprintf(virtual_line, " I1+1   I2+1    Real    Imag\n");
  outam3->append_line(virtual_line);
  for (int iam=0; iam<ndit; iam++) {
    for (int jam=0; jam<ndit; jam++) {
      sprintf(virtual_line, " %d   %d   %17.8lE   %17.8lE\n", iam, jam, real(cid->am[iam][jam]), imag(cid->am[iam][jam]));
      outam3->append_line(virtual_line);
    }
  }
  outam3->write_to_disk(outam3_name);
  delete outam3;
#endif
  if (idfc >= 0) {
    if (jxi488 == jwtm) {
      int nlemt = 2 * cid->c4->nlem;