SIONlib  1.7.0
Scalable I/O library for parallel access to task-local files
sion_ompi_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 ****************************************************************************/
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <stdarg.h>
18 #include <string.h>
19 #include <time.h>
20 
21 #include <sys/time.h>
22 
23 #include <sys/types.h>
24 #include <fcntl.h>
25 
26 #include <unistd.h>
27 
28 #include "sion.h"
29 #include "sion_debug.h"
30 #include "sion_internal.h"
31 #include "sion_fd.h"
32 #include "sion_filedesc.h"
33 #include "sion_printts.h"
34 
35 
36 
37 #ifdef SION_MPI
38 
39 #ifdef _SION_BGQ
40 
41 #include <firmware/include/personality.h>
42 int sion_get_IO_comm_ompi(MPI_Comm *commSame) {
43 
44  Personality_t personality;
45  int rc, rank, factor, bridgeid;
46 
47  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
48 
49  /* get location information */
50  Kernel_GetPersonality(&personality, sizeof(Personality_t));
51 
52  factor=1;
53  bridgeid = personality.Network_Config.cnBridge_E;
54  factor *= personality.Network_Config.Enodes;
55  bridgeid += personality.Network_Config.cnBridge_D*factor;
56  factor *= personality.Network_Config.Dnodes;
57  bridgeid += personality.Network_Config.cnBridge_C*factor;
58  factor *= personality.Network_Config.Cnodes;
59  bridgeid += personality.Network_Config.cnBridge_B*factor;
60  factor *= personality.Network_Config.Bnodes;
61  bridgeid += personality.Network_Config.cnBridge_A*factor;
62 
63  /* communicator consists of all task working with the same I/O-node */
64  rc=MPI_Comm_split(MPI_COMM_WORLD, bridgeid, rank, commSame);
65  return(rc);
66 }
67 
68 #else
69 /* default */
70 int sion_get_IO_comm_ompi(MPI_Comm *commSame) {
71 
72  int rc;
73  rc=MPI_Comm_dup(MPI_COMM_WORLD, commSame);
74  return(rc);
75 }
76 
77 #endif
78 /* end of ifdef MPI */
79 #endif
Sion Time Stamp Header.