1
1

merging VampirTrace-5.4.4.5 into the main branch

This commit was SVN r17821.
Этот коммит содержится в:
Matthias Jurenz 2008-03-14 16:23:52 +00:00
родитель 0fbb399f13
Коммит 6fe53bb5c2
9 изменённых файлов: 102 добавлений и 41 удалений

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

@ -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
//
int cmprc = p1->name.compare( p2->name );
if( cmprc == 0 )
return p1->deftoken < p2->deftoken; 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);

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

@ -1159,6 +1159,7 @@ void vt_def_mpi_comm(uint32_t cid,
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);
} }
/* /*