1 /* ---------------------------------------------------------------- */ 2 /* (C)Copyright IBM Corp. 2007, 2008 */ 3 /* ---------------------------------------------------------------- */ 4 /** 5 * \file ad_bg_pset.h 6 * \brief ??? 7 */ 8 9 /* File: ad_bg_pset.h 10 * 11 * Defines two structures that keep BlueGene PSET specific information and their public interfaces: 12 * . ADIOI_BG_ProcInfo_t object keeps specific information to each process 13 * . ADIOI_BG_ConfInfo_t object keeps general information for the whole communicator, only kept 14 * on process 0. 15 */ 16 17 #ifndef AD_BG_PSET_H_ 18 #define AD_BG_PSET_H_ 19 20 21 /* Keeps specific information to each process, will be exchanged among processes */ 22 typedef struct { 23 int ioNodeIndex; /* similar to psetNum on BGL/BGP */ 24 int rank; /* my rank */ 25 int ionID; /* ion id this cn is using */ 26 /* int myCoords[5]; */ 27 int bridgeRank; /* my bridge node (or proxy) rank */ 28 unsigned char threadID; /* unlikely to be useful but better than just padding */ 29 unsigned char __cpad[2]; 30 int myIOSize; /* number of ranks sharing my bridge/IO 31 node, i.e. psetsize*/ 32 int iamBridge; /* am *I* the bridge rank? */ 33 int __ipad[2]; 34 unsigned nodeRank; /* torus coords converted to an integer for use with gpfsmpio_bridgeringagg */ 35 unsigned numNodesInPartition; /* number of physical nodes in the job partition */ 36 unsigned manhattanDistanceToBridge; /* number of hops between this rank and the bridge node */ 37 } ADIOI_BG_ProcInfo_t __attribute__((aligned(16))); 38 39 /* Keeps general information for the whole communicator, only on process 0 */ 40 typedef struct { 41 int ioMinSize; /* Smallest number of ranks shareing 1 bridge node */ 42 int ioMaxSize; /* Largest number of ranks sharing 1 bridge node */ 43 /* ioMaxSize will be the "psetsize" */ 44 int nAggrs; 45 int numBridgeRanks; 46 /*int virtualPsetSize; ppn * pset size */ 47 int nProcs; 48 int cpuIDsize; /* num ppn */ 49 float aggRatio; 50 51 } ADIOI_BG_ConfInfo_t __attribute__((aligned(16))); 52 53 54 #undef MIN 55 #define MIN(a,b) (((a)<(b) ? (a) : (b))) 56 57 58 59 60 /* public funcs for ADIOI_BG_ProcInfo_t objects */ 61 ADIOI_BG_ProcInfo_t * ADIOI_BG_ProcInfo_new(); 62 ADIOI_BG_ProcInfo_t * ADIOI_BG_ProcInfo_new_n( int n ); 63 void ADIOI_BG_ProcInfo_free( ADIOI_BG_ProcInfo_t *info ); 64 65 66 /* public funcs for ADIOI_BG_ConfInfo_t objects */ 67 ADIOI_BG_ConfInfo_t * ADIOI_BG_ConfInfo_new (); 68 void ADIOI_BG_ConfInfo_free( ADIOI_BG_ConfInfo_t *info ); 69 70 71 /* public funcs for a pair of ADIOI_BG_ConfInfo_t and ADIOI_BG_ProcInfo_t objects */ 72 int BGQ_IO_node_id (); 73 void ADIOI_BG_persInfo_init( ADIOI_BG_ConfInfo_t *conf, 74 ADIOI_BG_ProcInfo_t *proc, 75 int s, int r, int n_aggrs, MPI_Comm comm); 76 void ADIOI_BG_persInfo_free( ADIOI_BG_ConfInfo_t *conf, 77 ADIOI_BG_ProcInfo_t *proc ); 78 79 80 #endif /* AD_BG_PSET_H_ */