1
1
- configure:
		- fixed passing FCFLAGS to the Fortran compiler when building libvt-fmpi
		- temporary disabled memory allocation tracing for multi-threaded applications (introduced in v5.14.1) due to broken counter values when memory is freed in a different thread than where it was allocated
		- do not build the unification library when building with HP/Platform MPI (needs linking libmpiCC, even if the C++ MPI interface isn't used)
		- removed 'libfmpi' from list of MPI Fortran libraries to be searched (causes that 'libvt-fmpi' will be built when configuring for HP/Platform MPI)
		- do not build the MPI Fortran library 'libvt-fmpi' when building VT inside Open MPI
	- Java tracing:
		- minor performance improvment: call vt_java_check_error (now vt_java_error) only if a JVMTI function returns an error

This commit was SVN r28228.
Этот коммит содержится в:
Matthias Jurenz 2013-03-27 10:04:33 +00:00
родитель cfd023bcda
Коммит 00fd159d02
11 изменённых файлов: 2477 добавлений и 2420 удалений

Просмотреть файл

@ -4,6 +4,10 @@
- fixed build error when using the Intel MPI compiler wrappers
- prepend cross-prefix to the compiler wrappers *only* if
'--with-cross-prefix[=PREFIX]' is given
- fixed passing FCFLAGS to the Fortran compiler when building libvt-fmpi
- temporary disabled memory allocation tracing for multi-threaded
applications (introduced in v5.14.1) due to broken counter values
when memory is freed in a different thread than where it was allocated
- fixed a potential minor bug in CUPTI activity stream handling
- workaround for CUDA 5.0 bug: do not call cuDeviceSynchronize(), if
stream reuse is enabled and a CUDA stream is about to be destroyed

Просмотреть файл

@ -92,12 +92,15 @@ AC_DEFUN([ACVT_MPI],
[AS_IF([test x"$MPIDIR" != x], [MPILIBDIR="-L$MPIDIR"lib/])])
AC_ARG_WITH(hpmpi,
AC_HELP_STRING([--with-hpmpi], [set MPI-libs for HP MPI]),
AC_HELP_STRING([--with-hpmpi], [set MPI-libs for HP MPI]))
AC_ARG_WITH(pcmpi,
AC_HELP_STRING([--with-pcmpi], [set MPI-libs for Platform MPI]))
AS_IF([test x"$with_hpmpi" = "xyes" -o x"$with_pcmpi" = "xyes"],
[
AS_IF([test x"$withval" = "xyes" -a x"$inside_openmpi" = "xno"],
AS_IF([test x"$inside_openmpi" = "xno"],
[
MPILIB="-lmtmpi"
PMPILIB="-lmtpmpi"
MPILIB="-lmpi"
PMPILIB="$MPILIB"
FMPILIB="-lvt-fmpi"
check_mpi2_thread="no"; have_mpi2_thread="yes"
check_mpi2_1sided="no"; have_mpi2_1sided="yes"
@ -496,19 +499,16 @@ dnl check for MPICXX
dnl check for MPILIB
AS_IF([test "$MPICC" = "$CC"],
AS_IF([test "$MPICC" = "$CC" -a x"$MPILIB" = x -a x"$mpi_error" = "xno"],
[
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpi_r"
AC_MSG_CHECKING([whether linking with -lmpi_r works])
AC_TRY_LINK([],[],
[AC_MSG_RESULT([yes]); MPILIB=-lmpi_r],[AC_MSG_RESULT([no])])
LIBS=$sav_LIBS
])
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpi_r"
AC_MSG_CHECKING([whether linking with -lmpi_r works])
AC_TRY_LINK([],[],
[AC_MSG_RESULT([yes]); MPILIB=-lmpi_r],[AC_MSG_RESULT([no])])
LIBS=$sav_LIBS
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$MPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpi"
@ -528,7 +528,7 @@ dnl check for MPILIB
])
])
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$MPILIB" = x],
[
AS_IF([test x"$MPILIBDIR" = x],
[pmilibdir="-L/usr/lib/pmi"], [pmilibdir="$MPILIBDIR/pmi"])
@ -542,7 +542,7 @@ dnl check for MPILIB
LIBS=$sav_LIBS
])
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$MPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpich"
@ -554,7 +554,7 @@ dnl check for MPILIB
[MPICFLAGS="$MPICFLAGS -DMPICH_IGNORE_CXX_SEEK"])
])
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$MPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpichg2"
@ -566,7 +566,7 @@ dnl check for MPILIB
[MPICFLAGS="$MPICFLAGS -DMPICH_IGNORE_CXX_SEEK"])
])
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$MPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lhpmpi"
@ -585,7 +585,7 @@ dnl check for MPILIB
])
])
AS_IF([test x"$MPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$MPILIB" = x],
[
AC_MSG_NOTICE([error: no libmpi_r, libmpi, liblam, libmpich, or libhpmpi found; check path for MPI package first...])
mpi_error="yes"
@ -606,7 +606,7 @@ dnl check for PMPILIB
[AC_MSG_RESULT([yes]); PMPILIB=-lpmpich],[AC_MSG_RESULT([no])])
LIBS=$sav_LIBS
AS_IF([test x"$PMPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$PMPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lpmpichg2 $MPILIB"
@ -618,7 +618,7 @@ dnl check for PMPILIB
dnl Do not check for libpmpi. When using the Open MPI compiler wrapper, this check
dnl succeeds even if this library isn't present.
dnl AS_IF([test x"$PMPILIB" = x -a x"$mpi_error" = "xno"],
dnl AS_IF([test x"$PMPILIB" = x],
dnl [
dnl sav_LIBS=$LIBS
dnl LIBS="$LIBS $MPILIBDIR -lpmpi $MPILIB"
@ -637,8 +637,11 @@ dnl LIBS=$sav_LIBS
dnl ])
dnl ])
AS_IF([test x"$PMPILIB" = x -a x"$mpi_error" = "xno"],
[PMPILIB="$MPILIB"])
AS_IF([test x"$PMPILIB" = x -a x"$MPILIB" != x],
[
PMPILIB="$MPILIB"
AC_MSG_NOTICE([no libpmpich or libpmpichg2 found; assume $MPILIB])
])
CC=$sav_CC
])
@ -657,7 +660,7 @@ dnl check for FMPILIB
[AC_MSG_RESULT([yes]); FMPILIB=-lmpi_f77],[AC_MSG_RESULT([no])])
LIBS=$sav_LIBS
AS_IF([test x"$FMPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$FMPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpi_mpifh $MPILIB"
@ -667,7 +670,7 @@ dnl check for FMPILIB
LIBS=$sav_LIBS
])
AS_IF([test x"$FMPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$FMPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lmpibinding_f77 $MPILIB"
@ -677,7 +680,7 @@ dnl check for FMPILIB
LIBS=$sav_LIBS
])
AS_IF([test x"$FMPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$FMPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lfmpich $MPILIB"
@ -687,7 +690,7 @@ dnl check for FMPILIB
LIBS=$sav_LIBS
])
AS_IF([test x"$FMPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$FMPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -llamf77mpi $MPILIB"
@ -697,42 +700,23 @@ dnl check for FMPILIB
LIBS=$sav_LIBS
])
AS_IF([test x"$FMPILIB" = x -a x"$mpi_error" = "xno"],
AS_IF([test x"$FMPILIB" = x],
[
sav_LIBS=$LIBS
LIBS="$LIBS $MPILIBDIR -lfmpi"
AC_MSG_CHECKING([whether linking with -lfmpi works])
AC_TRY_LINK([],[],
[AC_MSG_RESULT([yes]); FMPILIB=-lfmpi],[AC_MSG_RESULT([no])])
LIBS=$sav_LIBS
])
AS_IF([test x"$mpi_error" = "xno"],
[
AS_IF([test x"$FMPILIB" = x],
[
AS_IF([test x"$check_fmpiwraplib" = "xyes"],
[
AC_MSG_WARN([no libmpi_f77, libmpi_mpifh, libmpibinding_f77, libfmpich, liblamf77mpi, or libfmpi found; build libvt-fmpi])
FMPILIB="-lvt-fmpi"
])
],
[
AS_IF([test x"$FMPILIB" = "x-lvt-fmpi"],
[
AS_IF([test x"$check_fmpiwraplib" = "xno"],
[FMPILIB=])
],
[
AS_IF([test x"$force_fmpiwraplib" = "xyes"],
[FMPILIB="-lvt-fmpi"], [check_fmpiwraplib="no"])
])
])
AC_MSG_NOTICE([no libmpi_f77, libmpi_mpifh, libmpibinding_f77, libfmpich, or liblamf77mpi found; build libvt-fmpi])
FMPILIB="-lvt-fmpi"
])
CC=$sav_CC
])
AS_IF([test x"$FMPILIB" = "x-lvt-fmpi"],
[
AS_IF([test x"$check_fmpiwraplib" = "xno"], [FMPILIB=])
],
[
check_fmpiwraplib="no"
])
dnl check for MPI-2
AS_IF([test x"$mpi_error" = "xno"],

Просмотреть файл

@ -24,6 +24,20 @@ AC_DEFUN([ACVT_MPIUNIFYLIB],
mpiunifylib_error="yes"
])
AS_IF([test x"$mpiunifylib_error" = "xno" -a x"$inside_openmpi" = "xno"],
[
bad_mpi="no"
AC_CHECK_DECL([PLATFORM_MPI], [bad_mpi="yes"],
[AC_CHECK_DECL([HP_MPI], [bad_mpi="yes"], [], [#include "mpi.h"])],
[], [#include "mpi.h"])
AS_IF([test "$bad_mpi" = "yes"],
[
AC_MSG_NOTICE([error: The MPI trace unification library cannot be built with HP/Platform MPI])
mpiunifylib_error="yes"
])
])
AS_IF([test x"$mpiunifylib_error" = "xno"],
[
AS_IF([test x"$have_unimci" = "xyes" -a x"$unimci_checker_name" = "xMARMOT"],

Просмотреть файл

@ -23,6 +23,12 @@ MPI_Win_set_errhandler
# conflicting argument types with SGI-MPT (noticed on version 1.26)
MPI_Grequest_complete
# conflicting argument types with Platform MPI (noticed on version 7.1)
MPI_Info_delete
MPI_Info_get
MPI_Info_get_valuelen
MPI_Info_set
# implemented MPI functions
MPI_Allgather
MPI_Allgatherv

Просмотреть файл

@ -355,20 +355,20 @@ OpenMP events, and performance counters.
<P>
After a successful tracing run, VampirTrace writes all collected data to a
trace file in the Open Trace Format (OTF)<A NAME="tex2html1"
HREF="#foot1599"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1601"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
As a result, the information is available for post-mortem analysis and
visualization by various tools.
Most notably, VampirTrace provides the input data for the Vampir analysis
and visualization tool<A NAME="tex2html2"
HREF="#foot1600"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1602"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
<P>
VampirTrace is included in OpenMPI&nbsp;1.3 and later versions.
If not disabled explicitly, VampirTrace is built automatically when installing
OpenMPI<A NAME="tex2html3"
HREF="#foot1601"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1603"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
<P>
@ -1185,7 +1185,7 @@ in a single file, that
The names in between may contain wildcards as ``?'', ``*', and ``#'', each entry gets a new line.
The lists end with <TT>END[_FILE]_&lt;INCLUDE|EXCLUDE&gt;_LIST</TT>. For further information on selective
profiling have a look at the TAU documentation<A NAME="tex2html4"
HREF="#foot1625"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1627"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
To announce the file through the compiler wrapper use the option <TT>-vt:tau</TT>:
<PRE>
@ -1202,7 +1202,7 @@ Binary Instrumentation Using Dyninst
The option <TT>-vt:inst dyninst</TT> is used with the compiler wrapper to
instrument the application during runtime (binary instrumentation), by using
Dyninst<A NAME="tex2html5"
HREF="#foot1626"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1628"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
Recompiling is not necessary for this kind of instrumentation,
but relinking:
@ -1353,7 +1353,7 @@ Tracing Calls to 3rd-Party Libraries
VampirTrace is also capable to trace calls to third party libraries, which come with
at least one C header file even without the library's source code. If VampirTrace was
built with support for library tracing (the CTool library<A NAME="tex2html6"
HREF="#foot1627"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1629"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A> is required), the tool <TT>vtlibwrapgen</TT> can be used to
generate a wrapper library to intercept each call to the actual library functions.
This wrapper library can be linked to the application or used in combination with the
@ -2029,7 +2029,7 @@ for the enhanced timer synchronization:
<UL>
<LI>CLAPACK <A NAME="tex2html7"
HREF="#foot1637"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1639"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>
</LI>
<LI>AMD ACML
@ -2271,6 +2271,14 @@ The gathered information will be saved as counter which indicates the current me
<P>
<H4><A NAME="SECTION00530010000000000000">
Note:</A>
</H4>
VampirTrace currently does not support memory allocation tracing for threaded programs, e.g.,
programs parallelized with OpenMP or Pthreads!
<P>
<H1><A NAME="SECTION00540000000000000000"></A>
<A NAME="sec:cpu_id_counter"></A>
<BR>
@ -3689,7 +3697,7 @@ default: automatically by configure.
enable support for Dyninst instrumentation,
default: enable if found by configure.
<SPAN CLASS="textbf">Note:</SPAN> Requires Dyninst<A NAME="tex2html8"
HREF="#foot1665"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1667"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A> version 6.1 or higher!
<P>
@ -3711,9 +3719,9 @@ enable support for automatic source code
instrumentation by using TAU, default: enable if
found by configure.
<SPAN CLASS="textbf">Note:</SPAN> Requires PDToolkit<A NAME="tex2html9"
HREF="#foot1666"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1668"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A> or TAU<A NAME="tex2html10"
HREF="#foot1667"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1669"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>!
<P>
@ -4124,6 +4132,13 @@ Use the following options to specify your MPI-implementation
<BR>
set MPI-libs for HP MPI
<P>
</DD>
<DT><STRONG><TT>-with-pcmpi</TT></STRONG></DT>
<DD>&nbsp;
<BR>
set MPI-libs for Platform MPI
<P>
</DD>
<DT><STRONG><TT>-with-intelmpi</TT></STRONG></DT>
@ -4304,7 +4319,7 @@ give the path for JVMTI-include files, default:
<P>
To enable support for generating wrapper for 3th-Party libraries the C code parser CTool<A NAME="tex2html11"
HREF="#foot1668"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot1670"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A> is needed:
<P>
@ -5466,7 +5481,7 @@ Since IOFSL servers can handle multiple clients, an N:M mapping of clients to se
<P>
When using the IOFSL integration, all write requests in OTF are issued using the zoidfs API<A NAME="tex2html12"
HREF="#foot3273"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot3279"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>. Those writes are handled by the IOFSL forwarding servers and aggregated into a single file using the atomic append feature. The offset in the multifile is returned to OTF and stored in a second file, the so called index file, in order to maintain the mapping between written blocks and streams. For any block of a stream written into the multifile, the index file contains the ID of the stream, the start of the block, and its length. This allows for an efficient reading of blocks since only the index file has to be scanned for entries for a given stream ID. Additionally, a large number of logical files (streams) can be stored using only two physical files.
<P>
@ -5478,7 +5493,7 @@ Installation</A>
<P>
In order to use this setup, IOFSL and VampirTrace have to be compiled in order.
In the following sections, the directory <TT>&lt;install_dir&gt;</TT> should be replaced with a - possibly user-local - directory used for installation, e.g. <TT>$HOME/local</TT><A NAME="tex2html13"
HREF="#foot3277"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot3283"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
The installation procedure for IOFSL is described at https://trac.mcs.anl.gov/projects/iofsl/wiki/Building.
Currently the <TT>iofsl_vampir</TT> git branch is required.
@ -5657,7 +5672,7 @@ They will be launched on dedicated compute nodes that are part of the batch Job
PBS Options</A>
</H4>
It is important to reserve a sufficient number of processor cores. The number of cores requested must be large enough to contain the number of application cores plus the number of cores required for the IOFSL server instances. Each IOFSL server will run on a dedicated node<A NAME="tex2html14"
HREF="#foot3321"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot3327"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.Thus N_allocated &#8805;((N_IOFSL * 16) + N_Application) must hold.
<P>
Example using 64 server instances:
@ -5754,10 +5769,10 @@ Configuring the Server</A>
The server is configured using a configuration file.
At server start-up, this file is provided using the <TT>-config</TT> argument.
The cray XK6 configuration file is provided in the package<A NAME="tex2html15"
HREF="#foot3461"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot3467"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
For more information about the options available please refer to the IOFSL documentation<A NAME="tex2html16"
HREF="#foot3462"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
HREF="#foot3468"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A>.
The most important option is the <TT>serverlist</TT> entry in the <TT>bmi</TT> section which takes a list of server addresses, e.g. :
<PRE>
@ -6163,99 +6178,99 @@ If you provide us with your additions afterwards we will consider merging them
into the official VampirTrace package.
<BR><HR><H4>Footnotes</H4>
<DL>
<DT><A NAME="foot1599">... (OTF)</A><A
<DT><A NAME="foot1601">... (OTF)</A><A
HREF="#tex2html1"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.tu-dresden.de/zih/otf
</DD>
<DT><A NAME="foot1600">... tool </A><A
<DT><A NAME="foot1602">... tool </A><A
HREF="#tex2html2"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.vampir.eu
</DD>
<DT><A NAME="foot1601">...
<DT><A NAME="foot1603">...
Open MPI </A><A
HREF="#tex2html3"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.open-mpi.org/faq/?category=vampirtrace
</DD>
<DT><A NAME="foot1625">... documentation </A><A
<DT><A NAME="foot1627">... documentation </A><A
HREF="#tex2html4"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.cs.uoregon.edu/Research/tau/docs/newguide/bk05ch02.html#d0e3770
</DD>
<DT><A NAME="foot1626">...
<DT><A NAME="foot1628">...
Dyninst </A><A
HREF="#tex2html5"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.dyninst.org
</DD>
<DT><A NAME="foot1627">... library </A><A
<DT><A NAME="foot1629">... library </A><A
HREF="#tex2html6"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://sourceforge.net/projects/ctool
</DD>
<DT><A NAME="foot1637">... CLAPACK</A><A
<DT><A NAME="foot1639">... CLAPACK</A><A
HREF="#tex2html7"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>www.netlib.org/clapack
</DD>
<DT><A NAME="foot1665">... Dyninst </A><A
<DT><A NAME="foot1667">... Dyninst </A><A
HREF="#tex2html8"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.dyninst.org
</DD>
<DT><A NAME="foot1666">... PDToolkit </A><A
<DT><A NAME="foot1668">... PDToolkit </A><A
HREF="#tex2html9"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://www.cs.uoregon.edu/research/pdt/home.php
</DD>
<DT><A NAME="foot1667">... TAU </A><A
<DT><A NAME="foot1669">... TAU </A><A
HREF="#tex2html10"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://tau.uoregon.edu
</DD>
<DT><A NAME="foot1668">... CTool </A><A
<DT><A NAME="foot1670">... CTool </A><A
HREF="#tex2html11"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>http://sourceforge.net/projects/ctool
</DD>
<DT><A NAME="foot3273">... API</A><A
<DT><A NAME="foot3279">... API</A><A
HREF="#tex2html12"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>The OTF master control file is written using POSIX I/O in any case.
</DD>
<DT><A NAME="foot3277">...$HOME/local</A><A
<DT><A NAME="foot3283">...$HOME/local</A><A
HREF="#tex2html13"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>The software packages can be installed in different directories.
</DD>
<DT><A NAME="foot3321">... node</A><A
<DT><A NAME="foot3327">... node</A><A
HREF="#tex2html14"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>The server makes use of all the nodes resources by multithreading and allocating large I/O buffers
</DD>
<DT><A NAME="foot3461">... package</A><A
<DT><A NAME="foot3467">... package</A><A
HREF="#tex2html15"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD><TT>tools/vtiofsl/platform/crayxk6-iofwd.cf</TT>
</DD>
<DT><A NAME="foot3462">... documentation</A><A
<DT><A NAME="foot3468">... documentation</A><A
HREF="#tex2html16"><SUP><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
SRC="/usr/share/latex2html/icons/footnote.png"></SUP></A></DT>
<DD>https://trac.mcs.anl.gov/projects/iofsl/wiki/ConfigurationFile

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1450,10 +1450,12 @@ parseCommandLine( int argc, char** argv )
else if( arg.compare( 0, 5, "-lmpi" ) == 0 ||
arg.compare( 0, 7, "-lmtmpi" ) == 0 ||
arg.compare( 0, 7, "-lhpmpi" ) == 0 ||
arg.compare( 0, 7, "-lpcmpi" ) == 0 ||
arg.compare( 0, 7, "-lscmpi" ) == 0 ||
arg.find( "libmpi" ) != std::string::npos ||
arg.find( "libmtmpi" ) != std::string::npos ||
arg.find( "libhpmpi" ) != std::string::npos ||
arg.find( "libpcmpi" ) != std::string::npos ||
arg.find( "libscmpi" ) != std::string::npos )
{
Config.setUsesMpi( true );

Просмотреть файл

@ -488,7 +488,6 @@ libvt_mt_la_CFLAGS = \
$(GPUCFLAGS) \
$(IOWRAPCFLAGS) \
$(LIBWRAPCFLAGS) \
$(MALLOCWRAPCFLAGS) \
$(OMPCFLAGS) \
$(PTHREADCFLAGS) \
$(THRDCFLAGS)
@ -505,7 +504,6 @@ libvt_mt_la_SOURCES = \
$(GPUSOURCES) \
$(IOWRAPSOURCES) \
$(LIBWRAPSOURCES) \
$(MALLOCWRAPSOURCES) \
$(OMPSOURCES) \
$(PTHREADSOURCES) \
$(THRDSOURCES)
@ -521,7 +519,6 @@ libvt_hyb_la_CFLAGS = \
$(IOFSLCFLAGS) \
$(IOWRAPCFLAGS) \
$(LIBWRAPCFLAGS) \
$(MALLOCWRAPCFLAGS) \
$(MPICFLAGS) \
$(MPIINCDIR) \
$(OMPCFLAGS) \
@ -552,7 +549,6 @@ libvt_hyb_la_SOURCES = \
$(IOFSLSOURCES) \
$(IOWRAPSOURCES) \
$(LIBWRAPSOURCES) \
$(MALLOCWRAPSOURCES) \
$(MPI2IOSOURCES) \
$(OMPSOURCES) \
$(PTHREADSOURCES) \
@ -592,6 +588,7 @@ libvt_fmpi_la_CFLAGS = \
$(libvt_mpi_la_CFLAGS)
libvt_fmpi_la_FFLAGS = \
$(FMPIINCDIR) \
$(FCFLAGS) \
$(MPIFCFLAGS)
libvt_fmpi_la_SOURCES = \
vt_fmpiconst.h \

Просмотреть файл

@ -349,25 +349,25 @@ static void get_method_info(jvmtiEnv* jvmti, jmethodID method,
/* check whether method is native */
error = (*jvmti)->IsMethodNative(jvmti, method, &is_native);
vt_java_check_error(jvmti, error, "IsMethodNative");
VT_JAVA_CHECK_ERROR(jvmti, error, "IsMethodNative");
methodInfo->is_native = (is_native) ? 1 : 0;
/* check whether method is synthetic */
error = (*jvmti)->IsMethodSynthetic(jvmti, method, &is_synthetic);
vt_java_check_error(jvmti, error, "IsMethodSynthetic");
VT_JAVA_CHECK_ERROR(jvmti, error, "IsMethodSynthetic");
methodInfo->is_synthetic = (is_synthetic) ? 1 : 0;
/* get method name */
error = (*jvmti)->GetMethodName(jvmti, method, &method_name, NULL, NULL);
vt_java_check_error(jvmti, error, "GetMethodName");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetMethodName");
/* get class object that declaring method */
error = (*jvmti)->GetMethodDeclaringClass(jvmti, method, &class);
vt_java_check_error(jvmti, error, "GetMethodDeclaringClass");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetMethodDeclaringClass");
/* get class signature */
error = (*jvmti)->GetClassSignature(jvmti, class, &class_signature, NULL);
vt_java_check_error(jvmti, error, "GetClassSignature");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetClassSignature");
/* "demangle" class signature, if available */
@ -494,7 +494,7 @@ static void lock_agent(jvmtiEnv* jvmti)
jvmtiError error;
error = (*jvmti)->RawMonitorEnter(jvmti, vt_jvmti_agent->lock);
vt_java_check_error(jvmti, error, "RawMonitorEnter");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorEnter");
}
static void unlock_agent(jvmtiEnv *jvmti)
@ -502,7 +502,7 @@ static void unlock_agent(jvmtiEnv *jvmti)
jvmtiError error;
error = (*jvmti)->RawMonitorExit(jvmti, vt_jvmti_agent->lock);
vt_java_check_error(jvmti, error, "RawMonitorExit");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorExit");
}
/* Callback for JVMTI_EVENT_VM_START */
@ -536,22 +536,22 @@ static void JNICALL cbVMInit(jvmtiEnv* jvmti, JNIEnv* env, jthread thread)
error =
(*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_THREAD_START, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_THREAD_START]");
error =
(*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_THREAD_END, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_THREAD_END]");
error =
(*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_METHOD_ENTRY, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_METHOD_ENTRY]");
error =
(*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_METHOD_EXIT, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_METHOD_EXIT]");
/* read filter specifications for threads and methods */
@ -677,7 +677,7 @@ static void JNICALL cbMethodEntry(jvmtiEnv* jvmti, JNIEnv* env,
/* get thread identifier */
error = (*jvmti)->GetThreadLocalStorage(jvmti, thread, (void**)&threadid);
vt_java_check_error(jvmti, error, "GetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetThreadLocalStorage");
/* return immediately, if thread is excluded (no thread ID assigned) */
if ( threadid == NULL ) return;
@ -715,7 +715,7 @@ static void JNICALL cbMethodExit(jvmtiEnv* jvmti, JNIEnv* env,
/* get thread identifier */
error = (*jvmti)->GetThreadLocalStorage(jvmti, thread, (void**)&threadid);
vt_java_check_error(jvmti, error, "GetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetThreadLocalStorage");
/* return immediately, if thread is excluded (no thread ID assigned) */
if ( threadid == NULL ) return;
@ -739,9 +739,6 @@ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
jvmtiCapabilities capabilities;
jvmtiEventCallbacks callbacks;
/* not used */
(void)options; (void)reserved;
memset((void*)&agent, 0, sizeof(agent));
vt_jvmti_agent = &agent;
@ -758,7 +755,7 @@ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
/* get JVMTI's version number */
error = (*jvmti)->GetVersionNumber(jvmti, &version);
vt_java_check_error(jvmti, error, "GetVersionNumber");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetVersionNumber");
agent.jvmti_version = version;
/* set capabilities */
@ -771,7 +768,7 @@ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
capabilities.can_get_synthetic_attribute = 1;
error = (*jvmti)->AddCapabilities(jvmti, &capabilities);
vt_java_check_error(jvmti, error, "AddCapabilities");
VT_JAVA_CHECK_ERROR(jvmti, error, "AddCapabilities");
/* set event callbacks */
@ -786,26 +783,26 @@ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
error = (*jvmti)->SetEventCallbacks(jvmti, &callbacks,
(jint)sizeof(callbacks));
vt_java_check_error(jvmti, error, "SetEventCallbacks");
VT_JAVA_CHECK_ERROR(jvmti, error, "SetEventCallbacks");
/* set event notification modes */
error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_VM_START, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_VM_START]");
error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_VM_INIT, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_VM_INIT]");
error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
JVMTI_EVENT_VM_DEATH, NULL);
vt_java_check_error(jvmti, error,
VT_JAVA_CHECK_ERROR(jvmti, error,
"SetEventNotificationMode[JVMTI_EVENT_VM_DEATH]");
/* create raw monitor for this agent to protect critical sections of code */
error = (*jvmti)->CreateRawMonitor(jvmti, "agent", &(vt_jvmti_agent->lock));
vt_java_check_error(jvmti, error, "CreateRawMonitor[agent]");
VT_JAVA_CHECK_ERROR(jvmti, error, "CreateRawMonitor[agent]");
vt_cntl_msg(2, "JVMTI: VM agent loaded");
@ -838,7 +835,7 @@ void vt_java_get_thread_name(jvmtiEnv* jvmti, jthread thread,
/* get thread information */
memset(&thread_info,0, sizeof(thread_info));
error = (*jvmti)->GetThreadInfo(jvmti, thread, &thread_info);
vt_java_check_error(jvmti, error, "GetThreadInfo");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetThreadInfo");
/* copy thread name into tname, if possible */
if ( thread_info.name != NULL ) {
@ -850,19 +847,20 @@ void vt_java_get_thread_name(jvmtiEnv* jvmti, jthread thread,
}
}
void vt_java_check_error(jvmtiEnv* jvmti, jvmtiError error, const char* str)
void vt_java_error(jvmtiEnv* jvmti, jvmtiError error, const char* prefix)
{
if ( jvmti == NULL ) jvmti = vt_jvmti_agent->jvmti;
vt_libassert(jvmti != NULL);
char* error_str = NULL;
if ( error != JVMTI_ERROR_NONE )
{
char* error_str = NULL;
(*jvmti)->GetErrorName(jvmti, error, &error_str);
vt_error_msg("JVMTI: %s%s%d(%s)",
(str == NULL ? "" : str),
(str == NULL ? " " : ": "),
error,
(error_str == NULL ? "Unknown" : error_str));
}
if ( jvmti == NULL )
jvmti = vt_jvmti_agent->jvmti;
vt_libassert(jvmti != NULL);
vt_libassert(error != JVMTI_ERROR_NONE);
(*jvmti)->GetErrorName(jvmti, error, &error_str);
vt_error_msg("JVMTI: %s%s%d(%s)",
(prefix == NULL ? "" : prefix),
(prefix == NULL ? " " : ": "),
error,
(error_str == NULL ? "Unknown" : error_str));
}

Просмотреть файл

@ -21,6 +21,10 @@
#include "vt_jvmti.h"
#define VT_JAVA_CHECK_ERROR(jvmti, error, prefix) \
if ( error != JVMTI_ERROR_NONE ) \
vt_java_error((jvmti), (error), (prefix));
typedef struct
{
jvmtiEnv* jvmti;
@ -35,8 +39,8 @@ typedef struct
EXTERN void vt_java_get_thread_name(jvmtiEnv* jvmti, jthread thread,
char* tname, int maxlen);
EXTERN void vt_java_check_error(jvmtiEnv* jvmti, jvmtiError error,
const char* str);
EXTERN void vt_java_error(jvmtiEnv* jvmti, jvmtiError error,
const char* prefix);
EXTERN VTJVMAgent* vt_jvmti_agent;

Просмотреть файл

@ -52,12 +52,12 @@ void VTThrd_initJava()
/* put thread-ID to thread-specific data */
error = (*jvmti)->SetThreadLocalStorage(jvmti, NULL, (void*)tid);
vt_java_check_error(jvmti, error, "SetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "SetThreadLocalStorage");
/* create raw monitor for mutex init */
error = (*jvmti)->CreateRawMonitor(jvmti, "mutex init",
&mutexInitMutex);
vt_java_check_error(jvmti, error, "CreateRawMonitor[mutex init]");
VT_JAVA_CHECK_ERROR(jvmti, error, "CreateRawMonitor[mutex init]");
#if defined(VT_METR)
/* if (vt_metric_num() > 0)
@ -80,7 +80,7 @@ void VTThrd_registerThread(jthread thread, const char* tname)
/* check whether an ID is already created for this thread */
error = (*jvmti)->GetThreadLocalStorage(jvmti, thread, (void**)&tid);
vt_java_check_error(jvmti, error, "GetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetThreadLocalStorage");
if (tid == NULL)
{
/* create new thread-ID */
@ -90,7 +90,7 @@ void VTThrd_registerThread(jthread thread, const char* tname)
/* put new thread-ID to thread-specific data */
error = (*jvmti)->SetThreadLocalStorage(jvmti, thread, (void*)tid);
vt_java_check_error(jvmti, error, "SetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "SetThreadLocalStorage");
/* open thread associated trace file */
VTThrd_open(*tid);
@ -104,7 +104,7 @@ uint8_t VTThrd_isAlive()
/* get thread-ID from thread-specific data */
error = (*jvmti)->GetThreadLocalStorage(jvmti, NULL, (void**)&tid);
vt_java_check_error(jvmti, error, "GetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetThreadLocalStorage");
if (tid || vt_jvmti_agent->vm_is_dead)
return 1;
@ -119,7 +119,7 @@ uint32_t VTThrd_getThreadId()
/* get thread-ID from thread-specific data */
error = (*jvmti)->GetThreadLocalStorage(jvmti, NULL, (void**)&tid);
vt_java_check_error(jvmti, error, "GetThreadLocalStorage");
VT_JAVA_CHECK_ERROR(jvmti, error, "GetThreadLocalStorage");
if (tid == NULL && vt_jvmti_agent->vm_is_dead)
return 0;
@ -136,7 +136,7 @@ void VTThrd_createMutex(VTThrdMutex** mutex)
vt_libassert(mutexInitMutex != NULL);
error = (*jvmti)->RawMonitorEnter(jvmti, mutexInitMutex);
vt_java_check_error(jvmti, error, "RawMonitorEnter");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorEnter");
if (*mutex == NULL)
{
static uint8_t rawmon_id = 0;
@ -150,10 +150,10 @@ void VTThrd_createMutex(VTThrdMutex** mutex)
error = (*jvmti)->CreateRawMonitor(jvmti, rawmon_name,
&((*mutex)->m));
vt_java_check_error(jvmti, error, "CreateRawMonitor");
VT_JAVA_CHECK_ERROR(jvmti, error, "CreateRawMonitor");
}
error = (*jvmti)->RawMonitorExit(jvmti, mutexInitMutex);
vt_java_check_error(jvmti, error, "RawMonitorExit");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorExit");
}
void VTThrd_deleteMutex(VTThrdMutex** mutex)
@ -163,16 +163,16 @@ void VTThrd_deleteMutex(VTThrdMutex** mutex)
if (*mutex == NULL) return;
error = (*jvmti)->RawMonitorEnter(jvmti, mutexInitMutex);
vt_java_check_error(jvmti, error, "RawMonitorEnter");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorEnter");
if (*mutex != NULL )
{
error = (*jvmti)->DestroyRawMonitor(jvmti, (*mutex)->m);
vt_java_check_error(jvmti, error, "DestroyRawMonitor");
VT_JAVA_CHECK_ERROR(jvmti, error, "DestroyRawMonitor");
free(*mutex);
*mutex = NULL;
}
error = (*jvmti)->RawMonitorExit(jvmti, mutexInitMutex);
vt_java_check_error(jvmti, error, "RawMonitorExit");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorExit");
}
void VTThrd_lock(VTThrdMutex** mutex)
@ -183,7 +183,7 @@ void VTThrd_lock(VTThrdMutex** mutex)
VTThrd_createMutex(mutex);
error = (*jvmti)->RawMonitorEnter(jvmti, (*mutex)->m);
vt_java_check_error(jvmti, error, "RawMonitorEnter");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorEnter");
}
void VTThrd_unlock(VTThrdMutex** mutex)
@ -193,5 +193,5 @@ void VTThrd_unlock(VTThrdMutex** mutex)
vt_libassert(*mutex != NULL);
error = (*jvmti)->RawMonitorExit(jvmti, (*mutex)->m);
vt_java_check_error(jvmti, error, "RawMonitorExit");
VT_JAVA_CHECK_ERROR(jvmti, error, "RawMonitorExit");
}