merging VampirTrace-5.4.4.5 into the main branch
This commit was SVN r17821.
Этот коммит содержится в:
родитель
0fbb399f13
Коммит
6fe53bb5c2
@ -17,3 +17,7 @@
|
|||||||
+++ NEC SX-8 (High Performance Computing Center Stuttgart)
|
+++ NEC SX-8 (High Performance Computing Center Stuttgart)
|
||||||
./configure CC=sxcc CXX=sxc++ F77=sxf90 FC=sxf90 AR=sxar MPICC=sxmpicc CXX_FOR_BUILD=c++ RANLIB="sxar st" OMPFLAG=-Popenmp --build=ia64-unknown-linux-gnu --host=sx8-nec-superux15.1 --with-otf-lib=-lotf
|
./configure CC=sxcc CXX=sxc++ F77=sxf90 FC=sxf90 AR=sxar MPICC=sxmpicc CXX_FOR_BUILD=c++ RANLIB="sxar st" OMPFLAG=-Popenmp --build=ia64-unknown-linux-gnu --host=sx8-nec-superux15.1 --with-otf-lib=-lotf
|
||||||
|
|
||||||
|
|
||||||
|
+++ Sun Fire E6900 (RWTH Aachen)
|
||||||
|
./configure CC=cc CXX=CC F77=f90 F90=f90 CFLAGS="-xtarget=ultra4 -fast -xarch=v9a" CXXFLAGS="-xtarget=ultra4 -fast -xarch=v9a" FCFLAGS="-xtarget=ultra4 -fast -xarch=v9a" FFLAGS="-xtarget=ultra4 -fast -xarch=v9a" --with-mpi-lib=-lmpi_mt --with-pmpi-lib=-lmpi_mt --enable-fmpi-lib
|
||||||
|
|
||||||
|
@ -198,8 +198,9 @@
|
|||||||
maximum number of buffer flushes was reached
|
maximum number of buffer flushes was reached
|
||||||
- fixed a bug in the compiler wrappers: added check for SUN's OpenMP
|
- fixed a bug in the compiler wrappers: added check for SUN's OpenMP
|
||||||
compiler flag (-xopenmp)
|
compiler flag (-xopenmp)
|
||||||
- cleanup call stack when maximum number of flushes was reached
|
|
||||||
- fixed a bug for determining the timer-resolution for ITC
|
- fixed a bug for determining the timer-resolution for ITC
|
||||||
|
- added process group definition for MPI communicator MPI_COMM_SELF
|
||||||
|
- cleanup call stack when maximum number of flushes was reached
|
||||||
- added check if we can link '-lz' in order to pass either '-lotf -lz'
|
- added check if we can link '-lz' in order to pass either '-lotf -lz'
|
||||||
or just '-lotf' as OTF link option
|
or just '-lotf' as OTF link option
|
||||||
- renamed configure's option '--with[out]-mpi-io' to
|
- renamed configure's option '--with[out]-mpi-io' to
|
||||||
|
@ -307,11 +307,12 @@ AC_DEFUN([ACVT_CONF_SUBTITLE],
|
|||||||
|
|
||||||
AC_DEFUN([ACVT_CONF_EXPAND_VARS],
|
AC_DEFUN([ACVT_CONF_EXPAND_VARS],
|
||||||
[
|
[
|
||||||
$2=$1
|
var=$1
|
||||||
var=`echo $$2 | sed s/^.*\$\{// | sed s/\}.*$//`
|
|
||||||
while test x"$var" != x"$$2"; do
|
while :
|
||||||
$2=`echo $$2 | sed s:\$\{$var\}:${!var}:g`
|
do
|
||||||
var=`echo $$2 | sed s/^.*\$\{// | sed s/\}.*$//`
|
$2=`eval echo $var`
|
||||||
|
AS_IF([test $$2 == $var], [break], [var=$$2])
|
||||||
done
|
done
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -134,6 +134,7 @@ GlobDefsCmp( Definitions::DefRec_Base_struct * a,
|
|||||||
// ... sort to this order:
|
// ... sort to this order:
|
||||||
// Nodes
|
// Nodes
|
||||||
// MPI_COMM_WORLD
|
// MPI_COMM_WORLD
|
||||||
|
// MPI_COMM_SELFs
|
||||||
// remaining MPI communicators
|
// remaining MPI communicators
|
||||||
// OpenMP Thread Teams
|
// OpenMP Thread Teams
|
||||||
// Rest
|
// Rest
|
||||||
@ -165,17 +166,31 @@ GlobDefsCmp( Definitions::DefRec_Base_struct * a,
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// p1 == TYPE_MPI_COMM && p2 != TYPE_MPI_COMM
|
// p1 == TYPE_MPI_COMM_SELF && p2 != TYPE_MPI_COMM_SELF
|
||||||
else if(
|
else if(
|
||||||
p1->type == Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM
|
p1->type == Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_SELF
|
||||||
&& p2->type != Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM )
|
&& p2->type != Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_SELF )
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// p1 != TYPE_MPI_COMM && p2 == TYPE_MPI_COMM
|
// p1 != TYPE_MPI_COMM_SELF && p2 == TYPE_MPI_COMM_SELF
|
||||||
else if(
|
else if(
|
||||||
p1->type != Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM
|
p1->type != Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_SELF
|
||||||
&& p2->type == Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM )
|
&& p2->type == Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_SELF )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// p1 == TYPE_MPI_COMM_USER && p2 != TYPE_MPI_COMM_USER
|
||||||
|
else if(
|
||||||
|
p1->type == Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER
|
||||||
|
&& p2->type != Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// p1 != TYPE_MPI_COMM_USER && p2 == TYPE_MPI_COMM_USER
|
||||||
|
else if(
|
||||||
|
p1->type != Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER
|
||||||
|
&& p2->type == Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -195,13 +210,8 @@ GlobDefsCmp( Definitions::DefRec_Base_struct * a,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// sort by names if not equal; otherwise sort by token
|
// sort by token, if process group types are equal
|
||||||
//
|
return p1->deftoken < p2->deftoken;
|
||||||
int cmprc = p1->name.compare( p2->name );
|
|
||||||
if( cmprc == 0 )
|
|
||||||
return p1->deftoken < p2->deftoken;
|
|
||||||
else
|
|
||||||
return cmprc < 0 ? true : false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// both record types are Definitions::DEF_REC_TYPE__DefinitionComment ? ...
|
// both record types are Definitions::DEF_REC_TYPE__DefinitionComment ? ...
|
||||||
@ -510,6 +520,7 @@ Definitions::createGlobal( const std::vector<DefRec_Base_struct*> *
|
|||||||
bool error = false;
|
bool error = false;
|
||||||
|
|
||||||
uint32_t omp_comm_idx = 0;
|
uint32_t omp_comm_idx = 0;
|
||||||
|
uint32_t mpi_comm_self_idx = 0;
|
||||||
|
|
||||||
for( uint32_t i = 0; i < p_vecLocDefs->size(); i++ )
|
for( uint32_t i = 0; i < p_vecLocDefs->size(); i++ )
|
||||||
{
|
{
|
||||||
@ -593,9 +604,9 @@ Definitions::createGlobal( const std::vector<DefRec_Base_struct*> *
|
|||||||
addProc2NodeGroup( p_loc_def_entry->name.substr(9),
|
addProc2NodeGroup( p_loc_def_entry->name.substr(9),
|
||||||
p_loc_def_entry->members[0] );
|
p_loc_def_entry->members[0] );
|
||||||
}
|
}
|
||||||
// MPI communicator (except MPI_COMM_WORLD)?
|
// MPI communicator (except MPI_COMM_WORLD and MPI_COMM_SELF)
|
||||||
else if( p_loc_def_entry->type ==
|
else if( p_loc_def_entry->type ==
|
||||||
DefRec_DefProcessGroup_struct::TYPE_MPI_COMM )
|
DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER )
|
||||||
{
|
{
|
||||||
addMPIComm( p_loc_def_entry->loccpuid,
|
addMPIComm( p_loc_def_entry->loccpuid,
|
||||||
p_loc_def_entry->deftoken,
|
p_loc_def_entry->deftoken,
|
||||||
@ -625,12 +636,28 @@ Definitions::createGlobal( const std::vector<DefRec_Base_struct*> *
|
|||||||
p_loc_def_entry->members );
|
p_loc_def_entry->members );
|
||||||
|
|
||||||
char new_name[256];
|
char new_name[256];
|
||||||
if( p_loc_def_entry->name.compare( "__OMP_TEAM__" ) == 0 )
|
if( p_loc_def_entry->type ==
|
||||||
|
DefRec_DefProcessGroup_struct::TYPE_OMP_TEAM )
|
||||||
|
{
|
||||||
snprintf( new_name, sizeof( new_name ),
|
snprintf( new_name, sizeof( new_name ),
|
||||||
"OMP Thread Team %d", omp_comm_idx++ );
|
"OMP Thread Team %d", omp_comm_idx++ );
|
||||||
|
}
|
||||||
|
else if( p_loc_def_entry->type ==
|
||||||
|
DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_WORLD )
|
||||||
|
{
|
||||||
|
strcpy( new_name, "MPI_COMM_WORLD" );
|
||||||
|
}
|
||||||
|
else if( p_loc_def_entry->type ==
|
||||||
|
DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_SELF )
|
||||||
|
{
|
||||||
|
snprintf( new_name, sizeof( new_name ),
|
||||||
|
"MPI_COMM_SELF %d", mpi_comm_self_idx++ );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
strncpy( new_name, p_loc_def_entry->name.c_str(),
|
strncpy( new_name, p_loc_def_entry->name.c_str(),
|
||||||
sizeof( new_name ) );
|
sizeof( new_name ) );
|
||||||
|
}
|
||||||
|
|
||||||
// add new definition to vector of global definitions
|
// add new definition to vector of global definitions
|
||||||
p_vecGlobDefs->push_back( new DefRec_DefProcessGroup_struct(
|
p_vecGlobDefs->push_back( new DefRec_DefProcessGroup_struct(
|
||||||
@ -1598,7 +1625,7 @@ Definitions::addMPIComms2Global( std::vector<DefRec_Base_struct*> *
|
|||||||
p_vecGlobDefs->push_back( new DefRec_DefProcessGroup_struct(
|
p_vecGlobDefs->push_back( new DefRec_DefProcessGroup_struct(
|
||||||
0,
|
0,
|
||||||
global_token,
|
global_token,
|
||||||
DefRec_DefProcessGroup_struct::TYPE_MPI_COMM,
|
DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER,
|
||||||
comm_name,
|
comm_name,
|
||||||
vec_members ) );
|
vec_members ) );
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ public:
|
|||||||
|
|
||||||
// definition record types
|
// definition record types
|
||||||
//
|
//
|
||||||
typedef enum { DEF_REC_TYPE__DefinitionComment,
|
typedef enum { DEF_REC_TYPE__DefCreator,
|
||||||
DEF_REC_TYPE__DefCreator,
|
DEF_REC_TYPE__DefinitionComment,
|
||||||
DEF_REC_TYPE__DefTimerResolution,
|
DEF_REC_TYPE__DefTimerResolution,
|
||||||
DEF_REC_TYPE__DefProcess,
|
DEF_REC_TYPE__DefProcess,
|
||||||
DEF_REC_TYPE__DefProcessGroup,
|
DEF_REC_TYPE__DefProcessGroup,
|
||||||
@ -126,8 +126,8 @@ public:
|
|||||||
//
|
//
|
||||||
struct DefRec_DefProcessGroup_struct : DefRec_Base_struct
|
struct DefRec_DefProcessGroup_struct : DefRec_Base_struct
|
||||||
{
|
{
|
||||||
typedef enum { TYPE_NODE, TYPE_MPI_COMM_WORLD,
|
typedef enum { TYPE_NODE, TYPE_MPI_COMM_WORLD, TYPE_MPI_COMM_SELF,
|
||||||
TYPE_MPI_COMM, TYPE_OMP_TEAM, TYPE_OTHER }
|
TYPE_MPI_COMM_USER, TYPE_OMP_TEAM, TYPE_OTHER }
|
||||||
ProcessGroupTypeT;
|
ProcessGroupTypeT;
|
||||||
|
|
||||||
DefRec_DefProcessGroup_struct()
|
DefRec_DefProcessGroup_struct()
|
||||||
|
@ -80,10 +80,12 @@ Handle_DefProcessGroup( std::vector<Definitions::DefRec_Base_struct*>*
|
|||||||
|
|
||||||
if( strncmp( name, "__NODE__", 8 ) == 0 )
|
if( strncmp( name, "__NODE__", 8 ) == 0 )
|
||||||
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_NODE;
|
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_NODE;
|
||||||
else if( strcmp( name, "__MPI_COMM__" ) == 0 )
|
else if( strcmp( name, "__MPI_COMM_USER__" ) == 0 )
|
||||||
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM;
|
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_USER;
|
||||||
else if( strcmp( name, "MPI_COMM_WORLD" ) == 0 )
|
else if( strcmp( name, "__MPI_COMM_WORLD__" ) == 0 )
|
||||||
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_WORLD;
|
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_WORLD;
|
||||||
|
else if( strcmp( name, "__MPI_COMM_SELF__" ) == 0 )
|
||||||
|
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_MPI_COMM_SELF;
|
||||||
else if( strcmp( name, "__OMP_TEAM__" ) == 0 )
|
else if( strcmp( name, "__OMP_TEAM__" ) == 0 )
|
||||||
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_OMP_TEAM;
|
type = Definitions::DefRec_DefProcessGroup_struct::TYPE_OMP_TEAM;
|
||||||
else
|
else
|
||||||
|
@ -65,7 +65,7 @@ struct VTComm
|
|||||||
uint32_t cid;
|
uint32_t cid;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int currcid = 1;
|
static int currcid = 2; /* 0/1 reserved for MPI_COMM_WORLD/MPI_COMM_SELF */
|
||||||
static int last_comm = 0;
|
static int last_comm = 0;
|
||||||
static int* ranks;
|
static int* ranks;
|
||||||
static struct VTComm comms[VT_MAX_COMM];
|
static struct VTComm comms[VT_MAX_COMM];
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <mpi.h>
|
#include <mpi.h>
|
||||||
|
|
||||||
static MPI_Status *my_status_array = 0;
|
static MPI_Status *my_status_array = 0;
|
||||||
@ -75,8 +76,9 @@ int vt_mpi_trace_is_on = 1;
|
|||||||
|
|
||||||
int MPI_Init( int *argc, char ***argv )
|
int MPI_Init( int *argc, char ***argv )
|
||||||
{
|
{
|
||||||
int returnVal, numprocs, i;
|
int returnVal, numprocs, me, i;
|
||||||
unsigned char* grpv;
|
unsigned char* grpv;
|
||||||
|
uint32_t grpc;
|
||||||
uint64_t time;
|
uint64_t time;
|
||||||
|
|
||||||
/* shall I trace MPI events? */
|
/* shall I trace MPI events? */
|
||||||
@ -105,12 +107,21 @@ int MPI_Init( int *argc, char ***argv )
|
|||||||
vt_mpi_init();
|
vt_mpi_init();
|
||||||
|
|
||||||
PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
|
PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
|
||||||
|
PMPI_Comm_rank(MPI_COMM_WORLD, &me);
|
||||||
|
|
||||||
|
grpc = numprocs / 8 + (numprocs % 8 ? 1 : 0);
|
||||||
|
|
||||||
/* define communicator for MPI_COMM_WORLD */
|
/* define communicator for MPI_COMM_WORLD */
|
||||||
grpv = (unsigned char*)calloc(numprocs / 8 + (numprocs % 8 ? 1 : 0), sizeof(unsigned char));
|
grpv = (unsigned char*)calloc(grpc, sizeof(unsigned char));
|
||||||
for (i = 0; i < numprocs; i++)
|
for (i = 0; i < numprocs; i++)
|
||||||
grpv[i / 8] |= (1 << (i % 8));
|
grpv[i / 8] |= (1 << (i % 8));
|
||||||
vt_def_mpi_comm(0, numprocs / 8 + (numprocs % 8 ? 1 : 0), grpv);
|
vt_def_mpi_comm(0, grpc, grpv);
|
||||||
|
|
||||||
|
memset(grpv, 0, grpc);
|
||||||
|
|
||||||
|
/* define communicator for MPI_COMM_SELF */
|
||||||
|
grpv[me / 8] |= (1 << (me % 8));
|
||||||
|
vt_def_mpi_comm(1, grpc, grpv);
|
||||||
|
|
||||||
free(grpv);
|
free(grpv);
|
||||||
|
|
||||||
@ -130,12 +141,21 @@ int MPI_Init( int *argc, char ***argv )
|
|||||||
vt_mpi_init();
|
vt_mpi_init();
|
||||||
|
|
||||||
PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
|
PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
|
||||||
|
PMPI_Comm_rank(MPI_COMM_WORLD, &me);
|
||||||
|
|
||||||
|
grpc = numprocs / 8 + (numprocs % 8 ? 1 : 0);
|
||||||
|
|
||||||
/* define communicator for MPI_COMM_WORLD */
|
/* define communicator for MPI_COMM_WORLD */
|
||||||
grpv = (unsigned char*)calloc(numprocs / 8 + (numprocs % 8 ? 1 : 0), sizeof(unsigned char));
|
grpv = (unsigned char*)calloc(grpc, sizeof(unsigned char));
|
||||||
for (i = 0; i < numprocs; i++)
|
for (i = 0; i < numprocs; i++)
|
||||||
grpv[i / 8] |= (1 << (i % 8));
|
grpv[i / 8] |= (1 << (i % 8));
|
||||||
vt_def_mpi_comm(0, numprocs / 8 + (numprocs % 8 ? 1 : 0), grpv);
|
vt_def_mpi_comm(0, grpc, grpv);
|
||||||
|
|
||||||
|
memset(grpv, 0, grpc);
|
||||||
|
|
||||||
|
/* define communicator for MPI_COMM_SELF */
|
||||||
|
grpv[me / 8] |= (1 << (me % 8));
|
||||||
|
vt_def_mpi_comm(1, grpc, grpv);
|
||||||
|
|
||||||
free(grpv);
|
free(grpv);
|
||||||
|
|
||||||
|
@ -1152,13 +1152,14 @@ uint32_t vt_def_counter(const char* cname,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void vt_def_mpi_comm(uint32_t cid,
|
void vt_def_mpi_comm(uint32_t cid,
|
||||||
uint32_t grpc,
|
uint32_t grpc,
|
||||||
uint8_t grpv[])
|
uint8_t grpv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
uint32_t cgrpc;
|
uint32_t cgrpc;
|
||||||
uint32_t* cgrpv;
|
uint32_t* cgrpv;
|
||||||
|
char cname[20];
|
||||||
|
|
||||||
vt_check_thrd_id(VT_MY_THREAD);
|
vt_check_thrd_id(VT_MY_THREAD);
|
||||||
|
|
||||||
@ -1178,10 +1179,15 @@ void vt_def_mpi_comm(uint32_t cid,
|
|||||||
if(grpv[i] & 0x80) cgrpv[cgrpc++] = (i * 8) + 8;
|
if(grpv[i] & 0x80) cgrpv[cgrpc++] = (i * 8) + 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cid == 0)
|
||||||
|
strcpy(cname, "__MPI_COMM_WORLD__");
|
||||||
|
else if(cid == 1)
|
||||||
|
strcpy(cname, "__MPI_COMM_SELF__");
|
||||||
|
else
|
||||||
|
strcpy(cname, "__MPI_COMM_USER__");
|
||||||
|
|
||||||
VTGen_write_DEF_PROCESS_GROUP(VTTHRD_GEN(thrdv[VT_MY_THREAD]),
|
VTGen_write_DEF_PROCESS_GROUP(VTTHRD_GEN(thrdv[VT_MY_THREAD]),
|
||||||
cid+1,
|
cid+1, cname, cgrpc, cgrpv);
|
||||||
cid == 0 ? "MPI_COMM_WORLD" : "__MPI_COMM__",
|
|
||||||
cgrpc, cgrpv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user