libsc 2.8.5.210-64a7
The SC library provides support for parallel scientific applications.
sc_mpi.h
Go to the documentation of this file.
1/*
2 This file is part of the SC Library.
3 The SC Library provides support for parallel scientific applications.
4
5 Copyright (C) 2010 The University of Texas System
6 Additional copyright (C) 2011 individual authors
7
8 The SC Library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 The SC Library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with the SC Library; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA.
22*/
23
66#ifndef SC_MPI_H
67#define SC_MPI_H
68
69/* this works both standalone and when included from sc.h */
70#include <sc_config.h>
71#ifdef SC_ENABLE_MPI
72#include <mpi.h>
73#endif
74
75SC_EXTERN_C_BEGIN;
76
78typedef enum
79{
80 SC_TAG_FIRST = 's' + 'c',
104
105#ifdef SC_ENABLE_MPI
106
107/* constants */
108#define sc_MPI_SUCCESS MPI_SUCCESS
109#define sc_MPI_ERR_ARG MPI_ERR_ARG
110#define sc_MPI_ERR_UNKNOWN MPI_ERR_UNKNOWN
111#define sc_MPI_ERR_OTHER MPI_ERR_OTHER
112#define sc_MPI_ERR_NO_MEM MPI_ERR_NO_MEM
113#define sc_MPI_MAX_ERROR_STRING MPI_MAX_ERROR_STRING
114
115#ifdef SC_ENABLE_MPIIO
116
117#define sc_MPI_ERR_FILE MPI_ERR_FILE
118#define sc_MPI_ERR_NOT_SAME MPI_ERR_NOT_SAME
119#define sc_MPI_ERR_AMODE MPI_ERR_AMODE
120#define sc_MPI_ERR_UNSUPPORTED_DATAREP MPI_ERR_UNSUPPORTED_DATAREP
121#define sc_MPI_ERR_UNSUPPORTED_OPERATION MPI_ERR_UNSUPPORTED_OPERATION
122#define sc_MPI_ERR_NO_SUCH_FILE MPI_ERR_NO_SUCH_FILE
123#define sc_MPI_ERR_FILE_EXISTS MPI_ERR_FILE_EXISTS
124#define sc_MPI_ERR_BAD_FILE MPI_ERR_BAD_FILE
125#define sc_MPI_ERR_ACCESS MPI_ERR_ACCESS
126#define sc_MPI_ERR_NO_SPACE MPI_ERR_NO_SPACE
127#define sc_MPI_ERR_QUOTA MPI_ERR_QUOTA
128#define sc_MPI_ERR_READ_ONLY MPI_ERR_READ_ONLY
129#define sc_MPI_ERR_FILE_IN_USE MPI_ERR_FILE_IN_USE
130#define sc_MPI_ERR_DUP_DATAREP MPI_ERR_DUP_DATAREP
131#define sc_MPI_ERR_CONVERSION MPI_ERR_CONVERSION
132#define sc_MPI_ERR_IO MPI_ERR_IO
133
134#define sc_MPI_ERR_LASTCODE MPI_ERR_LASTCODE
135
136#else /* !SC_ENABLE_MPIIO */
137
138typedef enum sc_MPI_IO_Errorcode
139{
140 /* only MPI I/O error classes */
141 sc_MPI_ERR_FILE = MPI_ERR_LASTCODE,
156 sc_MPI_ERR_COUNT,
159}
160sc_MPI_IO_Errorcode_t;
161
162#endif /* !SC_ENABLE_MPIIO */
163
164#define sc_MPI_COMM_NULL MPI_COMM_NULL
165#define sc_MPI_COMM_WORLD MPI_COMM_WORLD
166#define sc_MPI_COMM_SELF MPI_COMM_SELF
167#define sc_MPI_COMM_TYPE_SHARED MPI_COMM_TYPE_SHARED
168
169#define sc_MPI_GROUP_NULL MPI_GROUP_NULL
170#define sc_MPI_GROUP_EMPTY MPI_GROUP_EMPTY
171
172#define sc_MPI_IDENT MPI_IDENT
173#define sc_MPI_CONGRUENT MPI_CONGRUENT
174#define sc_MPI_SIMILAR MPI_SIMILAR
175#define sc_MPI_UNEQUAL MPI_UNEQUAL
176
177#define sc_MPI_ANY_SOURCE MPI_ANY_SOURCE
178#define sc_MPI_ANY_TAG MPI_ANY_TAG
179#define sc_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
180#define sc_MPI_STATUSES_IGNORE MPI_STATUSES_IGNORE
181
182#define sc_MPI_REQUEST_NULL MPI_REQUEST_NULL
183
184#define sc_MPI_DATATYPE_NULL MPI_DATATYPE_NULL
185#define sc_MPI_CHAR MPI_CHAR
186#define sc_MPI_SIGNED_CHAR MPI_SIGNED_CHAR
187#define sc_MPI_UNSIGNED_CHAR MPI_UNSIGNED_CHAR
188#define sc_MPI_BYTE MPI_BYTE
189#define sc_MPI_SHORT MPI_SHORT
190#define sc_MPI_UNSIGNED_SHORT MPI_UNSIGNED_SHORT
191#define sc_MPI_INT MPI_INT
192#define sc_MPI_2INT MPI_2INT
193#define sc_MPI_UNSIGNED MPI_UNSIGNED
194#define sc_MPI_LONG MPI_LONG
195#define sc_MPI_UNSIGNED_LONG MPI_UNSIGNED_LONG
196#define sc_MPI_LONG_LONG_INT MPI_LONG_LONG_INT
197#define sc_MPI_UNSIGNED_LONG_LONG MPI_UNSIGNED_LONG_LONG
198#define sc_MPI_FLOAT MPI_FLOAT
199#define sc_MPI_DOUBLE MPI_DOUBLE
200#define sc_MPI_LONG_DOUBLE MPI_LONG_DOUBLE
201
202#define sc_MPI_OP_NULL MPI_OP_NULL
203#define sc_MPI_MAX MPI_MAX
204#define sc_MPI_MIN MPI_MIN
205#define sc_MPI_LAND MPI_LAND
206#define sc_MPI_BAND MPI_BAND
207#define sc_MPI_LOR MPI_LOR
208#define sc_MPI_BOR MPI_BOR
209#define sc_MPI_LXOR MPI_LXOR
210#define sc_MPI_BXOR MPI_BXOR
211#define sc_MPI_MINLOC MPI_MINLOC
212#define sc_MPI_MAXLOC MPI_MAXLOC
213#define sc_MPI_REPLACE MPI_REPLACE
214#define sc_MPI_SUM MPI_SUM
215#define sc_MPI_PROD MPI_PROD
216
217#define sc_MPI_UNDEFINED MPI_UNDEFINED
218
219#define sc_MPI_KEYVAL_INVALID MPI_KEYVAL_INVALID
220
221/* types */
222
223#define sc_MPI_Comm MPI_Comm
224#define sc_MPI_Group MPI_Group
225#define sc_MPI_Datatype MPI_Datatype
226#define sc_MPI_Op MPI_Op
227#define sc_MPI_Request MPI_Request
228#define sc_MPI_Status MPI_Status
229#define sc_MPI_Info MPI_Info
230
231/* MPI info arguments */
232
233#define sc_MPI_INFO_NULL MPI_INFO_NULL
234
235/* MPI functions */
236
237#define sc_MPI_Init MPI_Init
238/* sc_MPI_Init_thread is handled below */
239#define sc_MPI_Finalize MPI_Finalize
240#define sc_MPI_Abort MPI_Abort
241#define sc_MPI_Alloc_mem MPI_Alloc_mem
242#define sc_MPI_Free_mem MPI_Free_mem
243#define sc_MPI_Comm_set_attr MPI_Comm_set_attr
244#define sc_MPI_Comm_get_attr MPI_Comm_get_attr
245#define sc_MPI_Comm_delete_attr MPI_Comm_delete_attr
246#define sc_MPI_Comm_create_keyval MPI_Comm_create_keyval
247#define sc_MPI_Comm_dup MPI_Comm_dup
248#define sc_MPI_Comm_create MPI_Comm_create
249#define sc_MPI_Comm_split MPI_Comm_split
250#define sc_MPI_Comm_split_type MPI_Comm_split_type
251#define sc_MPI_Comm_free MPI_Comm_free
252#define sc_MPI_Comm_size MPI_Comm_size
253#define sc_MPI_Comm_rank MPI_Comm_rank
254#define sc_MPI_Comm_compare MPI_Comm_compare
255#define sc_MPI_Comm_group MPI_Comm_group
256#define sc_MPI_Group_free MPI_Group_free
257#define sc_MPI_Group_size MPI_Group_size
258#define sc_MPI_Group_rank MPI_Group_rank
259#define sc_MPI_Group_translate_ranks MPI_Group_translate_ranks
260#define sc_MPI_Group_compare MPI_Group_compare
261#define sc_MPI_Group_union MPI_Group_union
262#define sc_MPI_Group_intersection MPI_Group_intersection
263#define sc_MPI_Group_difference MPI_Group_difference
264#define sc_MPI_Group_incl MPI_Group_incl
265#define sc_MPI_Group_excl MPI_Group_excl
266#define sc_MPI_Group_range_incl MPI_Group_range_incl
267#define sc_MPI_Group_range_excl MPI_Group_range_excl
268#define sc_MPI_Barrier MPI_Barrier
269#define sc_MPI_Bcast MPI_Bcast
270#define sc_MPI_Gather MPI_Gather
271#define sc_MPI_Gatherv MPI_Gatherv
272#define sc_MPI_Allgather MPI_Allgather
273#define sc_MPI_Allgatherv MPI_Allgatherv
274#define sc_MPI_Alltoall MPI_Alltoall
275#define sc_MPI_Reduce MPI_Reduce
276#define sc_MPI_Reduce_scatter_block MPI_Reduce_scatter_block
277#define sc_MPI_Allreduce MPI_Allreduce
278#define sc_MPI_Scan MPI_Scan
279#define sc_MPI_Exscan MPI_Exscan
280#define sc_MPI_Recv MPI_Recv
281#define sc_MPI_Irecv MPI_Irecv
282#define sc_MPI_Send MPI_Send
283#define sc_MPI_Isend MPI_Isend
284#define sc_MPI_Probe MPI_Probe
285#define sc_MPI_Iprobe MPI_Iprobe
286#define sc_MPI_Get_count MPI_Get_count
287#define sc_MPI_Wtime MPI_Wtime
288#define sc_MPI_Wait MPI_Wait
289/* The MPI_Waitsome, MPI_Waitall and MPI_Testall functions are wrapped. */
290#define sc_MPI_Type_size MPI_Type_size
291
292#else /* !SC_ENABLE_MPI */
293#include <sc3_mpi_types.h>
294
295/* constants */
296
297#define sc_MPI_SUCCESS SC3_MPI_SUCCESS
298#define sc_MPI_ERR_ARG SC3_MPI_ERR_ARG
299#define sc_MPI_ERR_UNKNOWN SC3_MPI_ERR_UNKNOWN
300#define sc_MPI_ERR_OTHER SC3_MPI_ERR_OTHER
301#define sc_MPI_ERR_NO_MEM SC3_MPI_ERR_NO_MEM
302#define sc_MPI_ERR_FILE SC3_MPI_ERR_FILE
303#define sc_MPI_ERR_NOT_SAME SC3_MPI_ERR_NOT_SAME
304#define sc_MPI_ERR_AMODE SC3_MPI_ERR_AMODE
306#define sc_MPI_ERR_UNSUPPORTED_DATAREP SC3_MPI_ERR_UNSUPPORTED_DATAREP
308#define sc_MPI_ERR_UNSUPPORTED_OPERATION SC3_MPI_ERR_UNSUPPORTED_OPERATION
310#define sc_MPI_ERR_NO_SUCH_FILE SC3_MPI_ERR_NO_SUCH_FILE
311#define sc_MPI_ERR_FILE_EXISTS SC3_MPI_ERR_FILE_EXISTS
312#define sc_MPI_ERR_BAD_FILE SC3_MPI_ERR_BAD_FILE
313#define sc_MPI_ERR_ACCESS SC3_MPI_ERR_ACCESS
314#define sc_MPI_ERR_NO_SPACE SC3_MPI_ERR_NO_SPACE
315#define sc_MPI_ERR_QUOTA SC3_MPI_ERR_QUOTA
316#define sc_MPI_ERR_READ_ONLY SC3_MPI_ERR_READ_ONLY
317#define sc_MPI_ERR_FILE_IN_USE SC3_MPI_ERR_FILE_IN_USE
318#define sc_MPI_ERR_DUP_DATAREP SC3_MPI_ERR_DUP_DATAREP
319#define sc_MPI_ERR_CONVERSION SC3_MPI_ERR_CONVERSION
320#define sc_MPI_ERR_IO SC3_MPI_ERR_IO
321#define sc_MPI_ERR_LASTCODE SC3_MPI_ERR_LASTCODE
324#define sc_MPI_MAX_ERROR_STRING SC3_MPI_MAX_ERROR_STRING
325
326#define sc_MPI_COMM_NULL SC3_MPI_COMM_NULL
327#define sc_MPI_COMM_WORLD SC3_MPI_COMM_WORLD
328#define sc_MPI_COMM_SELF SC3_MPI_COMM_SELF
331#define sc_MPI_GROUP_NULL ((sc_MPI_Group) 0x54000000) /* TODO change val */
333#define sc_MPI_GROUP_EMPTY ((sc_MPI_Group) 0x54000001) /* TODO change val */
334
336#define sc_MPI_IDENT (1) /* TODO change val */
337#define sc_MPI_CONGRUENT (2) /* TODO change val */
338#define sc_MPI_SIMILAR (3) /* TODO change val */
339#define sc_MPI_UNEQUAL (-1) /* TODO change val */
340
341#define sc_MPI_ANY_SOURCE (-2)
342#define sc_MPI_ANY_TAG (-1)
343#define sc_MPI_STATUS_IGNORE (sc_MPI_Status *) 1
344#define sc_MPI_STATUSES_IGNORE (sc_MPI_Status *) 1
345
346#define sc_MPI_REQUEST_NULL ((sc_MPI_Request) 0x2c000000)
347#define sc_MPI_DATATYPE_NULL SC3_MPI_DATATYPE_NULL
348
349#define sc_MPI_CHAR ((sc_MPI_Datatype) 0x4c000101)
350#define sc_MPI_SIGNED_CHAR ((sc_MPI_Datatype) 0x4c000118)
351#define sc_MPI_UNSIGNED_CHAR ((sc_MPI_Datatype) 0x4c000102)
352#define sc_MPI_BYTE SC3_MPI_BYTE
353#define sc_MPI_SHORT ((sc_MPI_Datatype) 0x4c000203)
354#define sc_MPI_UNSIGNED_SHORT ((sc_MPI_Datatype) 0x4c000204)
355#define sc_MPI_INT SC3_MPI_INT
356#define sc_MPI_2INT SC3_MPI_2INT
357#define sc_MPI_UNSIGNED SC3_MPI_UNSIGNED
358#define sc_MPI_LONG SC3_MPI_LONG
359#define sc_MPI_UNSIGNED_LONG ((sc_MPI_Datatype) 0x4c000408)
360#define sc_MPI_LONG_LONG_INT SC3_MPI_LONG_LONG
361#define sc_MPI_UNSIGNED_LONG_LONG ((sc_MPI_Datatype) 0x4c000409)
362#define sc_MPI_FLOAT SC3_MPI_FLOAT
363#define sc_MPI_DOUBLE SC3_MPI_DOUBLE
364#define sc_MPI_DOUBLE_INT SC3_MPI_DOUBLE_INT
365#define sc_MPI_LONG_DOUBLE ((sc_MPI_Datatype) 0x4c000c0c)
366
367#define sc_MPI_OP_NULL SC3_MPI_OP_NULL
368#define sc_MPI_MINLOC SC3_MPI_MINLOC
369#define sc_MPI_MAXLOC SC3_MPI_MAXLOC
370#define sc_MPI_LOR SC3_MPI_LOR
371#define sc_MPI_LAND SC3_MPI_LAND
372#define sc_MPI_LXOR SC3_MPI_LXOR
373#define sc_MPI_BOR SC3_MPI_BOR
374#define sc_MPI_BAND SC3_MPI_BAND
375#define sc_MPI_BXOR SC3_MPI_BXOR
376#define sc_MPI_REPLACE SC3_MPI_REPLACE
377#define sc_MPI_PROD SC3_MPI_PROD
380#define sc_MPI_MIN SC3_MPI_MIN
381#define sc_MPI_MAX SC3_MPI_MAX
382#define sc_MPI_SUM SC3_MPI_SUM
385#define sc_MPI_UNDEFINED SC3_MPI_UNDEFINED
386
387/* types */
388
389typedef int sc_MPI_Group;
390typedef int sc_MPI_Request;
397typedef struct sc_MPI_Status
398{
399 int count;
404}
406
407/* MPI info arguments */
408
409#define sc_MPI_INFO_NULL NULL
411/* These functions are valid and functional for a single process. */
412
417int sc_MPI_Init (int *argc, char ***argv);
418
421
426int sc_MPI_Abort (sc_MPI_Comm mpicomm, int ecode)
427 __attribute__ ((noreturn));
428
434 sc_MPI_Comm *dupcomm);
435
440
446int sc_MPI_Type_size (sc_MPI_Datatype datatype, int *size);
447
452int sc_MPI_Comm_size (sc_MPI_Comm mpicomm, int *mpisize);
453
458int sc_MPI_Comm_rank (sc_MPI_Comm mpicomm, int *mpirank);
459
464int sc_MPI_Group_size (sc_MPI_Group mpigroup, int *size);
465
470int sc_MPI_Group_rank (sc_MPI_Group mpigroup, int *rank);
471
476
478int sc_MPI_Bcast (void *, int, sc_MPI_Datatype, int,
480
481int sc_MPI_Gather (void *, int, sc_MPI_Datatype, void *, int,
483int sc_MPI_Gatherv (void *, int, sc_MPI_Datatype, void *,
484 int *, int *, sc_MPI_Datatype, int,
486
488int sc_MPI_Allgather (void *, int, sc_MPI_Datatype, void *,
490
492int sc_MPI_Allgatherv (void *, int, sc_MPI_Datatype, void *,
493 int *, int *, sc_MPI_Datatype,
495
497int sc_MPI_Alltoall (void *, int, sc_MPI_Datatype, void *,
499
501int sc_MPI_Reduce (void *, void *, int, sc_MPI_Datatype,
502 sc_MPI_Op, int, sc_MPI_Comm);
503
504int sc_MPI_Reduce_scatter_block (void *, void *,
505 int, sc_MPI_Datatype,
507
509int sc_MPI_Allreduce (void *, void *, int, sc_MPI_Datatype,
511
513int sc_MPI_Scan (void *, void *, int, sc_MPI_Datatype,
515
517int sc_MPI_Exscan (void *, void *, int, sc_MPI_Datatype,
519
522double sc_MPI_Wtime (void);
523
528
529/* These functions will run but their results/actions are not defined. */
530
531int sc_MPI_Comm_create (sc_MPI_Comm, sc_MPI_Group,
532 sc_MPI_Comm *);
533int sc_MPI_Comm_compare (sc_MPI_Comm, sc_MPI_Comm, int *);
534int sc_MPI_Comm_group (sc_MPI_Comm, sc_MPI_Group *);
535
536int sc_MPI_Group_free (sc_MPI_Group *);
537int sc_MPI_Group_translate_ranks (sc_MPI_Group, int, int *,
538 sc_MPI_Group, int *);
539int sc_MPI_Group_compare (sc_MPI_Group, sc_MPI_Group, int *);
540int sc_MPI_Group_union (sc_MPI_Group, sc_MPI_Group,
541 sc_MPI_Group *);
542int sc_MPI_Group_intersection (sc_MPI_Group, sc_MPI_Group,
543 sc_MPI_Group *);
544int sc_MPI_Group_difference (sc_MPI_Group, sc_MPI_Group,
545 sc_MPI_Group *);
546int sc_MPI_Group_incl (sc_MPI_Group, int, int *,
547 sc_MPI_Group *);
548int sc_MPI_Group_excl (sc_MPI_Group, int, int *,
549 sc_MPI_Group *);
550int sc_MPI_Group_range_incl (sc_MPI_Group, int,
551 int ranges[][3], sc_MPI_Group *);
552int sc_MPI_Group_range_excl (sc_MPI_Group, int,
553 int ranges[][3], sc_MPI_Group *);
554
555/* These functions will abort. */
556
557int sc_MPI_Recv (void *, int, sc_MPI_Datatype, int, int,
559int sc_MPI_Irecv (void *, int, sc_MPI_Datatype, int, int,
561int sc_MPI_Send (void *, int, sc_MPI_Datatype, int, int,
563int sc_MPI_Isend (void *, int, sc_MPI_Datatype, int, int,
565int sc_MPI_Probe (int, int, sc_MPI_Comm, sc_MPI_Status *);
566int sc_MPI_Iprobe (int, int, sc_MPI_Comm, int *,
567 sc_MPI_Status *);
568int sc_MPI_Get_count (sc_MPI_Status *, sc_MPI_Datatype,
569 int *);
570
571/* This function is only allowed to be called with NULL requests. */
572
573int sc_MPI_Wait (sc_MPI_Request *, sc_MPI_Status *);
574
575#endif /* !SC_ENABLE_MPI */
576
577/* Without SC_ENABLE_MPI, only allowed to be called with NULL requests. */
578
579int sc_MPI_Waitsome (int, sc_MPI_Request *,
580 int *, int *, sc_MPI_Status *);
581int sc_MPI_Waitall (int, sc_MPI_Request *, sc_MPI_Status *);
582int sc_MPI_Testall (int, sc_MPI_Request *, int *,
583 sc_MPI_Status *);
584
585#if defined SC_ENABLE_MPI && defined SC_ENABLE_MPITHREAD
586
587#define sc_MPI_THREAD_SINGLE MPI_THREAD_SINGLE
588#define sc_MPI_THREAD_FUNNELED MPI_THREAD_FUNNELED
589#define sc_MPI_THREAD_SERIALIZED MPI_THREAD_SERIALIZED
590#define sc_MPI_THREAD_MULTIPLE MPI_THREAD_MULTIPLE
591
592#define sc_MPI_Init_thread MPI_Init_thread
593
594#else
595
597#define sc_MPI_THREAD_SINGLE 0
598#define sc_MPI_THREAD_FUNNELED 1
599#define sc_MPI_THREAD_SERIALIZED 2
600#define sc_MPI_THREAD_MULTIPLE 3
603int sc_MPI_Init_thread (int *argc, char ***argv,
604 int required, int *provided);
605
606#endif /* !(SC_ENABLE_MPI && SC_ENABLE_MPITHREAD) */
607
608#ifdef SC_ENABLE_MPIIO
609
610/* file access modes */
611
612#define sc_MPI_MODE_RDONLY MPI_MODE_RDONLY
613#define sc_MPI_MODE_RDWR MPI_MODE_RDWR
614#define sc_MPI_MODE_WRONLY MPI_MODE_WRONLY
615#define sc_MPI_MODE_CREATE MPI_MODE_CREATE
616#define sc_MPI_MODE_EXCL MPI_MODE_EXCL
617#define sc_MPI_MODE_DELETE_ON_CLOSE MPI_MODE_DELETE_ON_CLOSE
618#define sc_MPI_MODE_UNIQUE_OPEN MPI_MODE_UNIQUE_OPEN
619#define sc_MPI_MODE_SEQUENTIAL MPI_MODE_SEQUENTIAL
620#define sc_MPI_MODE_APPEND MPI_MODE_APPEND
621
622/* file seek parameters */
623
624#define sc_MPI_SEEK_SET MPI_SEEK_SET
625#define sc_MPI_SEEK_CUR MPI_SEEK_CUR
626#define sc_MPI_SEEK_END MPI_SEEK_END
627
628/* MPI I/O related types and functions */
629
630#define sc_MPI_Offset MPI_Offset
631
632#define sc_MPI_File MPI_File
633#define sc_MPI_FILE_NULL MPI_FILE_NULL
634
635#define sc_MPI_File_open MPI_File_open
636#define sc_MPI_File_close MPI_File_close
637
638#define sc_MPI_File_get_view MPI_File_get_view
639#define sc_MPI_File_set_view MPI_File_set_view
640
641#define sc_MPI_File_write_all MPI_File_write_all
642#define sc_MPI_File_read_all MPI_File_read_all
643
644#define sc_MPI_File_write_at_all MPI_File_write_at_all
645#define sc_MPI_File_read_at_all MPI_File_read_at_all
646
647#define sc_MPI_File_get_size MPI_File_get_size
648#define sc_MPI_File_set_size MPI_File_set_size
649
650#else
651
652typedef long sc_MPI_Offset;
658{
660 const char *filename;
661 FILE *file;
664};
665
668
669#define sc_MPI_FILE_NULL NULL
671#endif /* !SC_ENABLE_MPIIO */
672
685int sc_MPI_Error_class (int errorcode, int *errorclass);
686
694int sc_MPI_Error_string (int errorcode, char *string,
695 int *resultlen);
696
702
718void sc_mpi_comm_attach_node_comms (sc_MPI_Comm comm,
719 int processes_per_node);
720
729void sc_mpi_comm_detach_node_comms (sc_MPI_Comm comm);
730
738void sc_mpi_comm_get_node_comms (sc_MPI_Comm comm,
739 sc_MPI_Comm * intranode,
740 sc_MPI_Comm * internode);
741
748int sc_mpi_comm_get_and_attach (sc_MPI_Comm comm);
749
752SC_EXTERN_C_END;
753
754#endif /* !SC_MPI_H */
We provide MPI replacement data types for configuring without MPI.
enum sc3_MPI_Op sc3_MPI_Op_t
We wrap the MPI operation types we use.
struct sc3_MPI_Info * sc3_MPI_Info_t
Wrapped MPI info object.
Definition: sc3_mpi_types.h:155
enum sc3_MPI_Datatype sc3_MPI_Datatype_t
We wrap the MPI datatypes we use.
struct sc3_MPI_Comm * sc3_MPI_Comm_t
Wrapped MPI communicator.
Definition: sc3_mpi_types.h:151
#define sc_MPI_ERR_NO_SUCH_FILE
Emulate SC_MPI_ERR_NO_SUCH_FILE.
Definition: sc_mpi.h:310
int sc_MPI_Comm_free(sc_MPI_Comm *freecomm)
Free a previously created MPI communicator.
int sc_MPI_Error_class(int errorcode, int *errorclass)
Turn an MPI error code into its error class.
#define sc_MPI_ERR_LASTCODE
Emulate SC_MPI_ERR_LASTCODE.
Definition: sc_mpi.h:321
size_t sc_mpi_sizeof(sc_MPI_Datatype t)
Return the size of MPI data types.
#define sc_MPI_ERR_CONVERSION
Emulate SC_MPI_ERR_CONVERSION.
Definition: sc_mpi.h:319
int sc_MPI_Group_size(sc_MPI_Group mpigroup, int *size)
Query size of an MPI group.
#define sc_MPI_ERR_BAD_FILE
Emulate SC_MPI_ERR_BAD_FILE.
Definition: sc_mpi.h:312
int sc_MPI_Allreduce(void *, void *, int, sc_MPI_Datatype, sc_MPI_Op, sc_MPI_Comm)
Execute the MPI_Allreduce algorithm.
#define sc_MPI_ERR_FILE
Emulate SC_MPI_ERR_FILE.
Definition: sc_mpi.h:302
sc3_MPI_Datatype_t sc_MPI_Datatype
Emulate MPI datatypes.
Definition: sc_mpi.h:393
int sc_MPI_Reduce(void *, void *, int, sc_MPI_Datatype, sc_MPI_Op, int, sc_MPI_Comm)
Execute the MPI_Reduce algorithm.
#define sc_MPI_ERR_READ_ONLY
Emulate SC_MPI_ERR_READ_ONLY.
Definition: sc_mpi.h:316
int sc_MPI_Bcast(void *, int, sc_MPI_Datatype, int, sc_MPI_Comm)
Execute the MPI_Bcast algorithm.
int sc_MPI_Type_size(sc_MPI_Datatype datatype, int *size)
Return size of an MPI datatype.
struct sc_no_mpiio_file * sc_MPI_File
Replacement object for an MPI file.
Definition: sc_mpi.h:667
int sc_MPI_Exscan(void *, void *, int, sc_MPI_Datatype, sc_MPI_Op, sc_MPI_Comm)
Execute the MPI_Exscan algorithm.
#define sc_MPI_ERR_DUP_DATAREP
Emulate SC_MPI_ERR_DUP_DATAREP.
Definition: sc_mpi.h:318
int sc_MPI_Alltoall(void *, int, sc_MPI_Datatype, void *, int, sc_MPI_Datatype, sc_MPI_Comm)
Execute the MPI_Alltoall algorithm.
int sc_MPI_Finalize(void)
MPI finalization.
#define sc_MPI_ERR_UNSUPPORTED_DATAREP
Emulate SC_MPI_ERR_UNSUPPORTED_DATAREP.
Definition: sc_mpi.h:306
#define sc_MPI_ERR_QUOTA
Emulate SC_MPI_ERR_QUOTA.
Definition: sc_mpi.h:315
int sc_MPI_Group_rank(sc_MPI_Group mpigroup, int *rank)
Query rank of an MPI process within a group.
sc_tag_t
Enumerate all MPI tags used internally to the sc library.
Definition: sc_mpi.h:79
@ SC_TAG_AG_ALLTOALL
Used in MPI alltoall replacement.
Definition: sc_mpi.h:81
@ SC_TAG_REDUCE
Used in MPI reduce replacement.
Definition: sc_mpi.h:98
@ SC_TAG_AG_RECURSIVE_C
Internal tag; do not use.
Definition: sc_mpi.h:84
@ SC_TAG_LAST
End marker of tag enumeration.
Definition: sc_mpi.h:101
@ SC_TAG_NOTIFY_RANGES
Internal tag to sc_notify.
Definition: sc_mpi.h:91
@ SC_TAG_PSORT_LO
Internal tag to sc_psort.
Definition: sc_mpi.h:99
@ SC_TAG_AG_RECURSIVE_A
Internal tag; do not use.
Definition: sc_mpi.h:82
@ SC_TAG_NOTIFY_CENSUSV
Internal tag to sc_notify.
Definition: sc_mpi.h:86
@ SC_TAG_NOTIFY_WRAPPERV
Internal tag to sc_notify.
Definition: sc_mpi.h:90
@ SC_TAG_NOTIFY_RECURSIVE
Internal tag to sc_notify.
Definition: sc_mpi.h:95
@ SC_TAG_NOTIFY_NBXV
Internal tag to sc_notify.
Definition: sc_mpi.h:88
@ SC_TAG_NOTIFY_WRAPPER
Internal tag to sc_notify.
Definition: sc_mpi.h:89
@ SC_TAG_NOTIFY_NBX
Internal tag to sc_notify.
Definition: sc_mpi.h:87
@ SC_TAG_NOTIFY_CENSUS
Internal tag to sc_notify.
Definition: sc_mpi.h:85
@ SC_TAG_NOTIFY_SUPER_EXTRA
Internal tag to sc_notify.
Definition: sc_mpi.h:94
@ SC_TAG_NOTIFY_SUPER_TRUE
Internal tag to sc_notify.
Definition: sc_mpi.h:93
@ SC_TAG_FIRST
Anything really.
Definition: sc_mpi.h:80
@ SC_TAG_NOTIFY_NARY
Internal tag to sc_notify.
Definition: sc_mpi.h:97
@ SC_TAG_AG_RECURSIVE_B
Internal tag; do not use.
Definition: sc_mpi.h:83
@ SC_TAG_NOTIFY_PAYLOAD
Internal tag to sc_notify.
Definition: sc_mpi.h:92
@ SC_TAG_PSORT_HI
Internal tag to sc_psort.
Definition: sc_mpi.h:100
int sc_MPI_Group
Emulate an MPI group.
Definition: sc_mpi.h:389
int sc_MPI_Barrier(sc_MPI_Comm mpicomm)
Execute a parallel barrier.
sc3_MPI_Comm_t sc_MPI_Comm
Emulate an MPI communicator.
Definition: sc_mpi.h:391
int sc_MPI_Abort(sc_MPI_Comm mpicomm, int ecode)
Abort an MPI program.
#define sc_MPI_ERR_FILE_IN_USE
Emulate SC_MPI_ERR_FILE_IN_USE.
Definition: sc_mpi.h:317
int sc_MPI_Comm_rank(sc_MPI_Comm mpicomm, int *mpirank)
Query rank of an MPI process within a communicator.
double sc_MPI_Wtime(void)
Execute the MPI_Wtime function.
int sc_MPI_Allgatherv(void *, int, sc_MPI_Datatype, void *, int *, int *, sc_MPI_Datatype, sc_MPI_Comm)
Execute the MPI_Allgatherv algorithm.
sc3_MPI_Info_t sc_MPI_Info
Emulate an MPI Info object.
Definition: sc_mpi.h:392
#define sc_MPI_ERR_AMODE
Emulate SC_MPI_ERR_AMODE .
Definition: sc_mpi.h:304
#define sc_MPI_ERR_IO
Emulate SC_MPI_ERR_IO.
Definition: sc_mpi.h:320
int sc_MPI_Allgather(void *, int, sc_MPI_Datatype, void *, int, sc_MPI_Datatype, sc_MPI_Comm)
Execute the MPI_Allgather algorithm.
int sc_MPI_Init(int *argc, char ***argv)
MPI initialization.
#define sc_MPI_ERR_FILE_EXISTS
Emulate SC_MPI_ERR_FILE_EXISTS.
Definition: sc_mpi.h:311
int sc_MPI_Request
Emulate an MPI request.
Definition: sc_mpi.h:390
int sc_MPI_Scan(void *, void *, int, sc_MPI_Datatype, sc_MPI_Op, sc_MPI_Comm)
Execute the MPI_Scan algorithm.
#define sc_MPI_ERR_ACCESS
Emulate SC_MPI_ERR_ACCESS.
Definition: sc_mpi.h:313
long sc_MPI_Offset
Emulate the MPI offset type.
Definition: sc_mpi.h:652
sc3_MPI_Op_t sc_MPI_Op
Emulate MPI operations.
Definition: sc_mpi.h:394
#define sc_MPI_ERR_NOT_SAME
Emulate SC_MPI_ERR_NOT_SAME.
Definition: sc_mpi.h:303
int sc_MPI_Comm_split(sc_MPI_Comm, int, int, sc_MPI_Comm *)
Return the input communicator in lieu of splitting.
struct sc_MPI_Status sc_MPI_Status
Replacement of MPI_Status for non-MPI configuration.
int sc_MPI_Comm_size(sc_MPI_Comm mpicomm, int *mpisize)
Query size of an MPI communicator.
#define sc_MPI_ERR_UNSUPPORTED_OPERATION
Emulate SC_MPI_ERR_UNSUPPORTED_OPERATION.
Definition: sc_mpi.h:308
#define sc_MPI_ERR_NO_SPACE
Emulate SC_MPI_ERR_NO_SPACE.
Definition: sc_mpi.h:314
int sc_MPI_Error_string(int errorcode, char *string, int *resultlen)
Turn MPI error code into a string.
int sc_MPI_Comm_dup(sc_MPI_Comm mpicomm, sc_MPI_Comm *dupcomm)
Duplicate an MPI communicator.
Replacement of MPI_Status for non-MPI configuration.
Definition: sc_mpi.h:398
int MPI_ERROR
Error occurred.
Definition: sc_mpi.h:403
int MPI_TAG
Tag of the message.
Definition: sc_mpi.h:402
int cancelled
Cancellation occurred.
Definition: sc_mpi.h:400
int count
Bytes sent/received.
Definition: sc_mpi.h:399
int MPI_SOURCE
Rank of the source.
Definition: sc_mpi.h:401
Replacement structure for MPI_File.
Definition: sc_mpi.h:658
FILE * file
Underlying file object.
Definition: sc_mpi.h:661
const char * filename
Name of the file.
Definition: sc_mpi.h:660
int mpirank
Rank of this process.
Definition: sc_mpi.h:663
int mpisize
Ranks in communicator.
Definition: sc_mpi.h:662
sc_MPI_Comm mpicomm
The MPI communicator.
Definition: sc_mpi.h:659