SIONlib  1.7.0
Scalable I/O library for parallel access to task-local files
sion_mpi_util.c
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <stdarg.h>
17 #include <string.h>
18 #include <time.h>
19 
20 #include <sys/time.h>
21 
22 #include <sys/types.h>
23 #include <fcntl.h>
24 
25 #include <unistd.h>
26 
27 #include "sion.h"
28 #include "sion_debug.h"
29 #include "sion_internal.h"
30 #include "sion_fd.h"
31 #include "sion_filedesc.h"
32 #include "sion_printts.h"
33 
34 
35 
36 #ifdef SION_MPI
37 
38 #ifdef _SION_BGQ
39 
40 #include <firmware/include/personality.h>
41 int sion_get_IO_comm_mpi(MPI_Comm *commSame) {
42 
43  Personality_t personality;
44  int rc, rank, factor, bridgeid;
45 
46  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
47 
48  /* get location information */
49  Kernel_GetPersonality(&personality, sizeof(Personality_t));
50 
51  factor=1;
52  bridgeid = personality.Network_Config.cnBridge_E;
53  factor *= personality.Network_Config.Enodes;
54  bridgeid += personality.Network_Config.cnBridge_D*factor;
55  factor *= personality.Network_Config.Dnodes;
56  bridgeid += personality.Network_Config.cnBridge_C*factor;
57  factor *= personality.Network_Config.Cnodes;
58  bridgeid += personality.Network_Config.cnBridge_B*factor;
59  factor *= personality.Network_Config.Bnodes;
60  bridgeid += personality.Network_Config.cnBridge_A*factor;
61 
62  /* communicator consists of all task working with the same I/O-node */
63  rc=MPI_Comm_split(MPI_COMM_WORLD, bridgeid, rank, commSame);
64  return(rc);
65 }
66 
67 #else
68 /* default */
69 int sion_get_IO_comm_mpi(MPI_Comm *commSame) {
70 
71  int rc;
72  rc=MPI_Comm_dup(MPI_COMM_WORLD, commSame);
73  return(rc);
74 }
75 
76 #endif
77 /* end of ifdef MPI */
78 #endif
Sion Time Stamp Header.