-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathREADME
More file actions
1712 lines (1443 loc) · 89 KB
/
README
File metadata and controls
1712 lines (1443 loc) · 89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=======================================================================
=======================================================================
*** GASNet-EX Software Release ***
GASNet-EX is the next generation of the GASNet-1 communication system.
The GASNet interfaces are being redesigned to accommodate the emerging
needs of exascale supercomputing, providing communication services to a
variety of PGAS programming models on current and future HPC architectures.
GASNet-EX is a work-in-progress.
Many features remain to be specified, implemented, and/or tuned.
Users interested in learning what's new in GASNet-EX are recommended to peruse
the ChangeLog file in this directory for a summary of recent developments.
The docs/GASNet-EX.txt file provides more detailed information about
the evolving EX specification.
GASNet-EX notably includes a backwards-compatibility layer to assist in
migration of current GASNet-1 client software. Existing GASNet clients can
get started by relying on this layer (provided in gasnet.h), and incrementally
add calls to the new gex_* interfaces (defined in gasnetex.h, which is
automatically included by gasnet.h) to access new EX features and capabilities.
For details, see docs/gasnet1_differences.md.
Feedback or questions on any matters related to the GASNet-EX project are
welcomed at: gasnet-devel@lbl.gov
=======================================================================
=======================================================================
README file for GASNet
https://gasnet.lbl.gov
This is a user manual for GASNet. Anyone planning on using GASNet (either
directly or indirectly) should consult this file for usage instructions.
Other documentation:
* In this README the "docs directory" means either docs/ in the source
directory or ${prefix}/share/doc/gasnet/ in an installation of GASNet.
* For GASNet licensing and usage terms, see license.txt.
* For documentation on a particular GASNet conduit, see the README file in the
conduit directory (also installed as README-<conduit> in the docs directory).
* For documentation on job spawning mechanisms, see the README file in the
corresponding other/*-spawner directory (also installed as README-*-spawner
in the docs directory).
* For documentation on the communication-independent GASNet-tools library,
see README-tools.
* Additional information, including the GASNet specification and our bug
tracking database, is available from https://gasnet.lbl.gov
* Anyone planning to modify or add to the GASNet code base should also read
the developer documents, available in the GASNet git repository, which
can be browsed online: https://bitbucket.org/berkeleylab/gasnet/src/develop
+ README-devel: GASNet design information and coding standards
+ README-git: Rules developers are expected to follow when committing
+ template-conduit: A fill-in-the-blanks conduit code skeleton
Contents of this file:
* Introduction
* Building and Installing GASNet
* Manual control over compile and link flags
* Basic Usage Information
* Conduit Status
* Launching/Running GASNet Applications
* Single-node Development Options
* Supported Platforms
* Recognized Environment Variables
* GASNet exit
* GASNet tracing & statistical collection
* GASNet Collectives
* GASNet debug malloc services
* GASNet inter-Process SHared Memory (PSHM)
* MPI Interoperability
* Contact Info and Support
Introduction
============
GASNet is a language-independent, low-level networking layer that provides
network-independent, high-performance communication primitives tailored for
implementing parallel global address space SPMD languages and libraries such as
UPC, UPC++, Co-Array Fortran, Legion, Chapel, and many others. The interface is
primarily intended as a compilation target and for use by runtime library
writers (as opposed to end users), and the primary goals are high performance,
interface portability, and expressiveness. GASNet stands for "Global-Address
Space Networking".
The GASNet API is defined in the specification, which is included with this
archive in docs/, and the definitive version is located on the GASNet webpage:
https://gasnet.lbl.gov/
This README accompanies the GASNet source distribution, which includes
implementations of the GASNet API for various popular HPC and general-purpose
network hardwares. We use the term "conduit" to refer to any complete
implementation of the GASNet API which targets a specific network device or
lower-level networking layer. A conduit is comprised of any required headers,
source files and supporting libraries necessary to provide the functionality of
the GASNet API to GASNet clients. This distribution additionally includes
a library of communication-independent portability tools called the "GASNet tools",
which are used in the conduit implementations and also made available to clients
(see README-tools for details).
System Requirements
===================
GASNet is extremely portable, and runs on most systems that are relevant to HPC
production or development (and many that are not).
The minimum system requirements are:
* A POSIX-like environment, e.g. Linux or another version of Unix.
For Mac systems, the free 'Xcode command-line tools' from the Apple Store.
For Windows systems one needs either of two options:
+ The free 'Cygwin' toolkit (https://www.cygwin.com/)
+ Windows 10 Subsystem for Linux, a.k.a. WSL
(https://docs.microsoft.com/en-us/windows/wsl/)
* GNU make (version 3.79 or newer).
* Perl (version 5.005 or newer).
* The following standard Unix tools: 'awk', 'sed', 'env', 'basename', 'dirname',
and a Bourne-compatible shell (e.g. bash).
* A C compiler with at least minimal C99 support.
We explicitly support most OS's, architectures and compilers in widespread use today.
See the 'Supported Platforms' section for details on systems we've recently validated.
Most distributed-memory GASNet conduits have additional requirements, based on their
interactions with network hardware and other implementation details. For example:
* mpi-conduit requires an MPI-1.1 or newer compliant MPI implementation.
* udp-conduit requires POSIX socket libraries and a C++98 or newer compiler.
See each conduit README for additional details on system requirements.
Building and Installing GASNet
==============================
Here are the steps to build GASNet:
* Step 0 (optional): ./Bootstrap
Runs the autoconf tools to build a configure script (this can be done on any
system and may already have been done for you).
If you are keeping a copy of the GASNet sources in your own source control
repository (CVS, svn, Hg, Git, etc.), then please also see "Source Control and
GASNet" in README-devel (in the GASNet git repo).
* Step 1: ./configure (options)
Generate the Makefiles tailored to your system, creating a build tree in the
current working directory. You can run configure from a different directory to
place your build files somewhere other than inside the source tree (a nice
option when maintaining several build trees on the same source tree).
Any compiler flags required for correct operation on your system (e.g. to
select the correct ABI) should be included in the values of CC, CXX and MPI_CC.
For example to build 32-bit code when your gcc and g++ default to 64-bit:
configure CC='gcc -m32' CXX='g++ -m32' MPI_CC='mpicc -m32'
or similarly, if you want libgasnet to contain debugging symbols:
configure CC='gcc -g' CXX='g++ -g' (however also see --enable-debug, below)
Some of the useful configure options:
--help - display all available configure options
--prefix=/install/path - set the directory where GASNet will be installed
--enable-debug - build GASNet in a debugging mode. This turns on C-level
debugger options and also enables extensive error and sanity checking
system-wide, which is highly recommended for developing and debugging
GASNet clients (but should NEVER be used for performance testing).
--enable-debug also implies --enable-{trace,stats,debug-malloc},
but these can still be selectively --disable'd.
--enable-trace - turn on GASNet tracing (see usage info below)
--enable-stats - turn on GASNet statistical collection (see usage info below)
--enable-debug-malloc - use GASNet debugging malloc (see usage info below)
--enable-segment-{fast,large,everything} - select a GASNet segment
configuration (see the GASNet spec for more info)
--enable-pshm - Build GASNet with inter-Process SHared Memory (PSHM) support.
This feature uses shared memory communication among the processes (aka
GASNet nodes) within a single compute node (where the other alternatives
are multi-threading via a PAR or PARSYNC build; or use of the conduit's
API to perform the communication).
Note that not all conduits and operating systems support this feature.
For more information, see the section below entitled "GASNet inter-Process
SHared Memory (PSHM)".
--with-max-segsize=<val> - configure-time default value for GASNET_MAX_SEGSIZE,
which is used when GASNET_MAX_SEGSIZE is not set at runtime. See the description
of the GASNET_MAX_SEGSIZE environment variable below for details.
Configure will detect various interesting features about your system and
compilers, including which GASNet conduits are supported.
For cross-compilation support, look for an appropriate cross configure
script in other/contrib/ and link it into your top-level source directory and
invoke it in place of configure. Example for the Cray XC with slurm:
cd <path-to-gasnet-src>
ln -s other/contrib/cross-configure-cray-xc-slurm .
cd <your-build-dir>
<path-to-gasnet-src>/cross-configure-cray-xc-slurm (configure_options)
For cross-compilation support on platforms without scripts in other/contrib
see the instructions in other/cross-configure-help.c.
[NOTE: We currently don't distribute the cross-configure-help.c in our
normal distribution. If you think you need it, contact us at gasnet-devel@lbl.gov]
On HPE Cray EX (aka "Shasta") systems, we recommend the following configure
arguments to use the vendor's compiler wrappers:
--with-cc=cc --with-cxx=CC --with-mpi-cc=cc
Additionally, exactly one of the following is recommended to ensure that
ofi-conduit is built for the appropriate libfabric provider:
* HPE Cray EX with Slingshot-10 (100Gbps) NICs: --with-ofi-provider=verbs
* HPE Cray EX with Slingshot-11 (200Gbps) NICs: --with-ofi-provider=cxi
* HPE Cray EX with BOTH NIC types: --with-ofi-provider=generic
On Linux clusters with Omni-Path networks from Intel or Cornelis Networks, we
recommend the following configure arguments to avoid using ibv-conduit over
an emulated libibverbs:
--disable-ibv --enable-ofi --with-ofi-provider=psm2
On Linux InfiniBand clusters with InfiniPath HCAs from PathScale/QLogic or
True Scale HCAs from Intel, we recommend the following configure arguments to
use mpi-conduit (and to avoid using ibv-conduit or ofi-conduit):
--enable-mpi --disable-ibv --disable-ofi
* Step 2: make all
Build the GASNet libraries. A number of other useful makefile targets
are available from the top-level:
make {seq,par,parsync}
build the conduit libraries in a given mode
make tests-{seq,par,parsync}
build all the GASNet tests in a given mode
make run-tests-{seq,par,parsync}
build and run all the GASNet tests in a given mode
make (run-)tests-installed-{seq,par,parsync}
use the installed library to build (and run) all the GASNet tests
make run-tests
run whatever tests are already built in the conduit directories
make run-tests TESTS="test1 test2..."
run specifically-listed tests that are already built in the conduit directories
make DO_WHAT="<makefile target>"
build selected makefile target in all supported conduit directories
Each conduit directory also has several useful makefile targets:
make {seq,par,parsync}
build the conduit libraries in a given mode
make tests-{seq,par,parsync}
build the conduit tests in a given mode
make testXXX
build just testXXX, in SEQ mode
make testXXX-{seq,par,parsync}
build just testXXX, in a given mode
make run-tests-{seq,par,parsync}
build and run the conduit tests in a given mode
make (run-)tests-installed-{seq,par,parsync}
use the installed library to build (and run) all the GASNet tests
make run-tests
run whatever tests are already built in the conduit directory
make run-tests TESTS="test1 test2..."
run specifically-listed tests that are already built in the conduit directory
make run-testexit
build a script to run the testexit tester and run it
Compilation and linker flags for the GASNet libraries and tests can be
augmented from the command-line by setting the following variables in the make
command, as described in more detail in the next section:
make MANUAL_CFLAGS=... Flags to add on the C compile for GASNet libs, clients & tests
make MANUAL_CXXFLAGS=... Flags to add on the C++ compile for GASNet libs, clients & tests
make MANUAL_MPICFLAGS=... Flags to add on the mpicc compile for GASNet libs, clients & tests
make MANUAL_DEFINES=... Flags to add on all compiles for GASNet libs, clients & tests
make MANUAL_LDFLAGS=... Linker flags to add for GASNet clients & tests
make MANUAL_LIBS=... Linker library flags to add for GASNet clients & tests
Note this feature should be used sparingly, as some flags can invalidate the
results of tests performed at configure time. The preferred way to add arbitrary
flags is in the $CC, $CXX and $MPI_CC variables passed to configure.
The following misc make variables can also be set to affect GASNet compilation:
make SEPARATE_CC=1
Build libgasnet using separate C compiler invocations, rather than one big one.
make KEEPTMPS=1
Keep temporary files generated by the C compiler, if supported.
* Step 3 (optional): make install
Install GASNet to the directory chosen at configure time. This will create an
include directory with a sub-directory for each supported conduit, and a lib
directory containing a library file for each supported conduit, as well as any
supporting libraries.
GASNet may also be used directly from the build directory, as a convenience to
eliminate steps if you are making changes to GASNet or its configuration.
Manual control over compile and link flags
==========================================
As described in the previous section, the recommended mechanism for passing
flags to the compilers used by GASNet is to include them in the definition of
the compiler variable itself (e.g. CC='gcc -m64'). These will be followed on
the command line by flags chosen by GASNet's configure script instead of using
the standard CFLAGS and CXXFLAGS make variables. If there is a need to pass
flags that override ones chosen by configure, then one may set MANUAL_CFLAGS,
MANUAL_CXXFLAGS and MANUAL_MPICFLAGS on the 'make' command line, and these are
guaranteed to appear on the compilation command line after the ones chosen by
configure. Additionally, MANUAL_DEFINES is provided to pass flags to all
three compilers, but its order on the command line is not guaranteed (since it
is intended for position-independent command line options such as '-Dfoo=10').
Note that GASNet does not assume that MPI_CC is the same compiler as CC
(though that is recommended), and therefore invokes it using a distinct
MANUAL_MPICFLAGS, instead of MANUAL_CFLAGS. The MPI C compiler is used to
compile a portion of mpi-conduit (AMMPI) and the MPI-based spawner code used
by several conduits; and to link executables for mpi-conduit and any conduit
in which the MPI-based spawner is enabled. Similarly, the C++ compiler is
used to compile a portion of udp-conduit (AMUDP) and to link udp-conduit
executables.
Finally, the make variables MANUAL_LDFLAGS and MANUAL_LIBS are provided to add
to the link command lines, after the respective configure-detected settings.
They are intended for flags such as '-Ldir' and '-lfoo', respectively. Since
they do not have compiler-specific variants, their use is limited to
compiler-independent flags unless special care is taken with the selection of
the make target to ensure that make only invokes one compiler as a linker.
All of the MANUAL_* make variables described above are honored by the Makefile
infrastructure used to build GASNet's libraries and tests. Additionally, the
makefile fragments (next section) use these variables when compiling client
code.
Basic Usage Information
=======================
See the README for each GASNet conduit implementation for specific usage
information, but generally client programs should #include <gasnetex.h>
(and nothing else), and use the conduit-provided compilation settings.
The best way to get the correct compiler flags for your GASNet client is to
"include" the appropriate makefile fragment for the conduit and configuration
you want in your Makefile, and use the variables it defines in the Makefile
rules for your GASNet client code.
For example:
----------------------------
include $(gasnet_prefix)/include/mpi-conduit/mpi-seq.mak
.c.o:
$(GASNET_CC) $(GASNET_CPPFLAGS) $(GASNET_CFLAGS) -c -o $@ $<
.cc.o:
$(GASNET_CXX) $(GASNET_CXXCPPFLAGS) $(GASNET_CXXFLAGS) -c -o $@ $<
myprog: myprog.o
$(GASNET_LD) $(GASNET_LDFLAGS) -o $@ $< $(GASNET_LIBS)
----------------------------
See tests/Makefile for another example of compiling GASNet client code.
For more fine-grained control, the flags variables break-down as follows:
GASNET_CFLAGS is an alias for:
$(GASNET_OPT_CFLAGS) $(GASNET_MISC_CFLAGS)
GASNET_CPPFLAGS is an alias for:
$(GASNET_MISC_CPPFLAGS) $(GASNET_DEFINES) $(GASNET_INCLUDES)
GASNET_CXXFLAGS is an alias for:
$(GASNET_OPT_CXXFLAGS) $(GASNET_MISC_CXXFLAGS)
GASNET_CXXCPPFLAGS is an alias for:
$(GASNET_MISC_CXXCPPFLAGS) $(GASNET_DEFINES) $(GASNET_INCLUDES)
The content of these variables follow these general guidelines:
* GASNET_[CC,CXX] contain the configure-detected C and C++ compilers used to build
GASNet and guaranteed to work with any compiler-specific flags embedded in the
corresponding variables. Clients are strongly advised to compile all modules
using these same compilers to ensure object compatibility.
* GASNET_INCLUDES contains only and all -I preprocessor flags
* GASNET_DEFINES contains only and all -D or -U preprocessor flags
* GASNET_OPT_* contain compiler-specific flags controlling the debug/opt level
* GASNET_MISC_* contain other needed compiler-specific compile-time flags
* GASNET_LD contains one of the configure-detected compilers (CC, CXX or MPI_CC)
which should be used to link the GASNet client executable, in order to guarantee
satisfaction of conduit library dependencies (eg on C++ or MPI).
* GASNET_LIBS contains only and all -L or -l link-time flags
* GASNET_LDFLAGS contains other needed link-time flags, which may be GASNET_LD-specific
This summary is provided for informational purposes only - altering or omitting
any of the flags contained in these variables could result in a non-functional
build environment.
Using GASNet with pkg-config
----------------------------
As a convenience, the same variables described in the previous section are also
available via the UNIX pkg-config utility. For example, if pkg-config is installed
on your system and the GASNet .pc files are in your PKG_CONFIG_PATH, then you
can retrieve the value for GASNET_CC for udp-conduit in GASNET_SEQ mode with a
command like:
pkg-config gasnet-udp-seq --variable=GASNET_CC
Note the pkg-config --cflags and --libs arguments retrieve the appropriate subset of
GASNet variables, but pkg-config does not offer aliases corresponding to GASNET_CC,
GASNET_LD or the GASNET_*CXX* variables. Use the `pkg-config --variable=` syntax
to retrieve these.
Here is a complete example of using pkg-config with GASNet in a Makefile:
PKG_CONFIG_PATH = $(gasnet_prefix)/lib/pkgconfig
pkg = gasnet-udp-seq
.c.o:
`pkg-config $(pkg) --variable=GASNET_CC` `pkg-config $(pkg) --cflags` -c -o $@ $<
.cc.o:
`pkg-config $(pkg) --variable=GASNET_CXX` `pkg-config $(pkg) --variable=GASNET_CXXCPPFLAGS` \
`pkg-config $(pkg) --variable=GASNET_CXXFLAGS` -c -o $@ $<
myprog: myprog.o
`pkg-config $(pkg) --variable=GASNET_LD` -o $@ $< `pkg-config $(pkg) --libs`
Conduit Status
==============
The GASNet distribution includes multiple complete implementations of the GASNet API
targeting particular lower-level networking layers. Each of these implementations
is called a 'conduit'. In some cases the lower-level layer is a proprietary or
hardware-specific network API, whereas in other cases the target API is a
portable standard (although in some cases this distinction is blurred). The corresponding
GASNet conduits can be loosely categorized as either 'native' or 'portable' conduits.
Below is the list of conduits in the current distribution, and their high-level status.
Many conduits are supported on multiple platforms (CPU architectures, operating systems
and compilers) - see the 'Supported Platforms' section for more details on platforms.
For more detailed info about each conduit, please consult the corresponding conduit README.
Portable conduits:
-----------------
smp-conduit: SMP loopback (shared memory)
The conduit of choice for GASNet operation within a single shared-memory node.
Rigorously tested and supported on all current platforms.
udp-conduit: UDP/IP (part of the TCP/IP protocol suite)
The conduit of choice for GASNet over Ethernet, supported on any TCP/IP-compliant network.
Rigorously tested over Ethernet and supported on most current platforms (see below).
mpi-conduit: MPI (Message Passing Interface)
A portable implementation of GASNet over MPI-1.1 or later.
Intended as a reference implementation for systems lacking native conduit support.
Rigorously tested and supported on most current platforms (see below).
ucx-conduit: Unified Communication X framework [EXPERIMENTAL]
GASNet over the Unified Communication X framework (UCX).
This conduit is currently experimental, and is not yet carefully tuned for performance.
It has only been validated on NVIDIA/Mellanox InfiniBand devices starting from ConnectX-5.
ofi-conduit: Open Fabrics Interfaces (most providers)
GASNet over the Open Fabrics Interface framework (libfabric).
This conduit is functionally complete but not yet carefully tuned for performance.
With the exception of Slingshot and Omni-Path networks (where ofi-conduit
is either the best or only option and considered "native"), users are advised to
use other conduits compatible with their hardware.
Native, high-performance conduits:
---------------------------------
ibv-conduit: InfiniBand Verbs
GASNet over the OpenFabrics Verbs API.
Rigorously tested and supported over InfiniBand hardware on all supported systems (see below).
Believed to also work on other hardware offering a standard-compliant Verbs layer.
ofi-conduit: Open Fabrics Interfaces (select providers/networks)
GASNet over the Open Fabrics Interface framework (libfabric).
This conduit is functionally complete but not yet carefully tuned for performance.
On Slingshot and Omni-Path networks, ofi-conduit is either the best
or only option available. On only those systems, ofi-conduit is categorized as a
native, high-performance conduit.
Launching/Running GASNet Applications
=====================================
This section provides pointers to information regarding the configuration
and use of the job spawning mechanisms provided in GASNet.
Often, runtimes or frameworks which are clients of GASNet provide their own
utilities for application launch (aka spawning). Users of such utilities should
refer to their respective documentation for advice which is specific to the
client. However, the information referenced in this section most often remains
relevant to configuration.
smp-conduit:
This conduit uses a conduit-specific spawning mechanism.
See smp-conduit/README for documentation.
udp-conduit:
This conduit offers a choice among several conduit-specific spawning mechanisms.
See udp-conduit/README for documentation.
mpi-conduit:
This conduit uses MPI for job spawning.
In addition to the documentation for the `mpirun` (or equivalent) specific to
your MPI implementation, see mpi-conduit/README and other/mpi-spawner/README
for documentation.
ibv-conduit, ofi-conduit and ucx-conduit:
These conduits can use ssh, MPI or PMI for spawning.
For documentation, see the individual *-conduit/README files, as well as the files
other/ssh-spawner/README, other/mpi-spawner/README and other/pmi-spawner/README
In the text above, document locations are given as those in the GASNet sources.
When installed, they are located in $prefix/share/doc/GASNet as README-[topic],
where [topic] may be a conduit such as "ibv" or a spawner such as "ssh-spawner".
Single-node Development Options
===============================
GASNet supports hardware configurations ranging from HPC supercomputers and
clusters to individual workstations and laptops. Often the easiest way to
develop and debug code is in a single-node environment, so this section
provides conduit recommendations for development. It should also be noted
that configure option --enable-debug is highly recommended for finding bugs
when developing GASNet client code.
Option 1. smp-conduit
----------------------
This is a pure shared-memory implementation and should be the fastest and
easiest to use option. GASNet's shared memory support should work "out of
the box" (no special configuration options required) on common laptop,
desktop, and workstation environments, including Linux, macOS, Windows with
Cygwin, Windows 10 Subsystem for Linux (WSL), and Solaris.
Option 2. udp-conduit
----------------------
By default this will be a shared-memory implementation within your single
node, indistinguishable from smp-conduit except for small issues like job
launch and stdin/out/err handling. However, one can disable shared memory
(by passing --disable-pshm at configure time or by setting the environment
variable GASNET_SUPERNODE_MAXSIZE=1 at runtime). This may be more realistic
for testing of the expected behaviors in multi-node systems.
Option 3. mpi-conduit
----------------------
If you have a MPI installed (and in your $PATH when GASNet is configured)
then everything said for udp-conduit holds true for mpi-conduit, including
the ability to disable shared-memory support. Additionally, since MPI will
very likely use shared-memory internally, you can get multi-node like
isolation at the GASNet level with the performance of shared-memory
communication (much better than udp).
Supported Platforms
===================
Platforms where GASNet and Berkeley UPC have been successfully tested include:
OS/Architecture/compiler/ABI: network conduits
----------------------------------------------
* Linux/x86-Ethernet/{gcc,clang}32: smp, mpi, udp
* Linux/x86-InfiniBand/gcc/32: smp, mpi, udp, ibv
* Linux/x86/IntelC/32: smp, mpi, udp
* Linux/x86/PortlandGroupC/32: smp, mpi, udp
* Linux/x86_64-Ethernet/{gcc,clang,PGI}/{32,64}: smp, mpi, udp, ofi
* Linux/x86_64-InfiniBand/{gcc,clang,PathScale,NVHPC,IntelC,Intel oneAPI}/64: smp, mpi, udp, ibv
* Linux/x86_64-Omni-Path/gcc/64: smp, mpi, udp, ofi
* Linux/x86_64/x86-Open64/64: smp, udp, #
* Linux/PowerPC-Ethernet/{gcc,clang}/{32,64}: smp, mpi, udp
* Linux/PowerPC-HFI/gcc/32: smp, mpi, udp &
* Linux/PPC64le/{gcc,clang,pgi,NVHPC,xlc}/64: smp, mpi, udp, ibv #
* Linux/MIPS/gcc/{32,n32,64}: smp, udp, #
* Linux/MIPS64el/gcc/{32,n32,64}: smp, udp, #
* FreeBSD/{x86,amd64}/{gcc,clang}/{32,64}: smp, mpi, udp
* OpenBSD/{x86,amd64}/{gcc,clang}/{32,64}: smp, mpi, udp
* NetBSD/{x86,amd64}/{gcc,clang}/{32,64}: smp, mpi, udp
* Solaris10/SPARC/gcc/{32,64}: smp, udp, mpi
* Solaris10/x86/gcc/{32,64}: smp, udp, mpi
* OpenSolaris/x86/gcc/{32,64}: smp, udp, #
* Solaris11Express/x86/gcc/{32,64}: smp, udp, mpi, ibv
* Solaris11/x86/gcc/{32,64}: smp, udp, mpi, ibv
* MSWindows-Cygwin/{x86,x86_64}/{gcc,clang}/{32,64}: smp, udp, mpi (OpenMPI)
* MSWindows10-Linux(WSL)/{gcc,clang}/64: smp, udp, mpi
* macOS/{x86,x86_64}/icc/{32,64}: smp, udp, mpi &
* macOS/{x86,x86_64}/{gcc,clang}/{32,64}: smp, udp, mpi
* macOS/{x86,x86_64}/PGI/{32,64}: smp, udp, #
* macOS/AARCH64/{gcc,clang}/64: smp, udp, #
* CNL/Cray-XT/{gcc,PGI,PathScale,Intel}/64: smp, mpi &
* CNL/Cray-XE/{gcc,PGI,PathScale,Intel,Cray}/64: smp, mpi &
* CNL/Cray-XK/{gcc,PGI,PathScale,Intel,Cray}/64: smp, mpi &
* CNL/HPE-Cray-EX/{gcc,Cray}/64: smp, mpi, ofi
* Linux/Cray-XD1/{gcc,PGI}/64: smp, mpi &
* ucLinux/Microblaze/gcc/32: smp, udp, #%&
* Linux/ARM/{gcc,clang}/32: smp, udp, #
* Linux/AARCH64/{gcc,clang}/64: smp, udp, mpi
# = We have not tested MPI but have no reasons to doubt that mpi-conduit would work.
% = System lacks pthreads or they are broken
& = System has not been tested in recent releases due to lack of access.
Reports of success or failure on this system are strongly encouraged.
BETA = Support for this system is in beta state, please report your experiences.
This list is not meant to be exhaustive.
Other combinations of the platforms above are likely to also work, these are
just the systems we've personally tested. Several of the systems listed using a
vendor-specific C compiler can also use gcc as the underlying C compiler,
although we generally recommend the vendor C compiler for performance reasons.
The following compilers are believed to work on platforms listed above,
with the provided minimum version:
Gnu (gcc 3.0+), LLVM (clang 3.6+), Apple (Xcode 7.1+), PGI (pgcc 11.0 to 20.4),
NVHPC (20.9+), Intel (icc 16+), Intel oneAPI (icx 21+), IBM XL (xlc 13+),
Cray (CCE 8.6+)
Recognized Environment Variables
================================
Users of language- or application-specific wrappers for job launch should also
consult the wrapper's documentation. Such wrappers often have options to set
these environment variables while also enabling any corresponding language- or
application-specific support.
In the following descriptions, a "Boolean" setting is one which accepts "1",
"y" and "yes" as TRUE and "0", "n" and "no" as FALSE (all case-insensitive).
While the descriptions use "0" or "1" to be concrete, one may substitute any of
these aliases.
* GASNET_VERBOSEENV: Boolean setting to output information about environment
variable settings read by the conduit that affect conduit behavior.
* GASNET_FREEZE: Boolean setting to make GASNet pause and wait for a debugger
to attach on startup
* GASNET_FREEZE_ON_ERROR: Boolean setting to make GASNet pause and wait for a
debugger to attach on any fatal errors or fatal signals
* GASNET_FREEZE_SIGNAL: set to a signal name (e.g. "SIGINT" or "SIGUSR1") to
specify a signal that will cause the process to freeze and await debugger attach.
* GASNET_TRACEFILE, GASNET_TRACEMASK, GASNET_STATSFILE, GASNET_STATSMASK,
GASNET_TRACEFLUSH, GASNET_TRACELOCAL, GASNET_TRACENODES, GASNET_STATSNODES:
control tracing & statistical features, if enabled at configure time.
See usage information below.
* GASNET_TEST_POLITE_SYNC: Boolean setting to enable polite-mode synchronization
for the GASNet tests (only), for running with overcommitted CPUs.
* GASNET_MALLOC_* : control the GASNet debug malloc features, if enabled at configure time.
See usage information below.
* GASNET_MAX_SEGSIZE - control the upper limit for FAST/LARGE segment size on most conduits
This setting defaults to the value passed to configure: --with-max-segsize=<val>
In FAST and LARGE segment configurations, GASNet probes each compute node at
startup to determine an upper-limit on the available space for use in the
GASNet segment (and some other large internal objects). This value provides
one upper-limit to that probe, which also has the effect of limiting the
space available for client segments (as reported by gasnet_getMaxLocalSegmentSize()).
<val> has the following format: size_spec ( / opt_suffix )
where 'size_spec' is either an absolute memory size: [0-9]+{KB,MB,GB}
or a fraction of compute node physical memory: 0.85
and 'opt_suffix' is one of the following: (or empty, which means "P")
"P" : means the limit is per-process and EXCLUDES internal GASNet objects
"H" : means the limit is host-wide and INCLUDES internal GASNet objects
Examples:
"0.85/H" : limit host-wide use at 85% of physical memory (this is also the default)
"4GB/P" : try to ensure 4GB per process of GASNet shared segment space
The default behavior of this option has grown considerably smarter over time, so
it's anticipated that most clients will never need to set this.
* GASNET_DISABLE_MUNMAP - Boolean setting to request the use of mallopt() on
glibc systems to disable mmap-based allocation for satisfying malloc. This
can be used to work-around a known bug in firehose (bug 495) that could lead
to incorrect behavior after free()ing out-of-segment memory areas previously
used for communication. Note that on some systems (32-bit Linux in
particular) the disable is only partly effective because once the
sbrk()-controlled heap reaches the bottom of shared libraries, glibc will use
mmap() used to obtain memory regardless of any options one can control.
The default is conduit-dependent.
* GASNET_MAX_THREADS - per-node limit on the number of GASNet client pthreads
(in PAR and PARSYNC modes) that can simultaneously be live on each GASNet node.
This is subject to the hard limit established by configure --with-max-pthreads-per-node,
and pthread limits that may be imposed by specific conduits (see conduit README).
* GASNET_SUPERNODE_MAXSIZE - limit on size of a GASNet "supernode" (aka "neigborhood").
This is the maximum number of processes that will be grouped into a shared-memory
"supernode"/"neigborhood" used by shared-memory communication (PSHM). The size and
membership of the local neigborhood are reported by gex_System_QueryNbrhdInfo(), and
by the legacy gasnet_getNodeInfo().
A value of zero (the default) means no limit.
* GASNET_USE_PSHM_SINGLETON - Boolean to control shared memory use in "singleton"
neigborhoods (ones with only a single process). By default, this setting is "0" and
a process in a singleton neigborhood will allocate memory using mmap() with the flag
MAP_ANONYMOUS (or similar if that is not supported), instead of allocating
sharable memory (such as via POSIX or SysV shared memory).
This default behavior *may* reduce pressure on limited shared memory pools to
potentially enable use of a larger segment and can result in lower-cost page
faults (if any) when accessing the segment. However, it may also disable use
of hugepages (if any) which might have occurred otherwise.
This variable can be set to "1" to disable this singleton-specific behavior,
ensuring that memory allocation in a singleton neigborhood is performed in exactly
the same manner as in any other.
* GASNET_PSHM_BARRIER_HIER - Boolean setting to enable/disable hierarchical
shared-memory barrier. When shared-memory communication (PSHM) is enabled,
the default behavior of most of GASNet's barrier implementations is to use a
two-stage barrier which coordinates within each supernode/neigborhood before
communicating across the network.
This variable can be set to "0" to disable this optimization.
* GASNET_USE_HUGEPAGES - Boolean setting to enable/disable use of huge pages.
This variable is silently ignored if hugetlbfs support was not enabled at
configure time. Otherwise, the value defaults to "1" if the environment
variable "HUGETLB_DEFAULT_PAGE_SIZE" is set and "0" if it is not.
A value of "1" enables the use of libhugetlbfs for certain memory allocations
such as GASNet-allocated segments and some internal buffers. A value of
"0" tells GASNet-EX to instead allocate normal pages, as it would if hugetlbfs
support was not enabled.
* GASNET_CATCH_EXIT - Boolean setting, where a "0" prevents GASNet from forcing
global job termination (via atexit() or on_exit()) when a process calls
exit() or returns from main(). GASNet's default behavior helps prevent
orphaned processes that can occur in some systems after an incomplete job
termination, but may interfere with some profiling tools that write output
inside atexit handlers. Setting this variable may allow those tools to
operate, but the client code (or other entity) must assume responsibility for
ensuring no orphan processes are left behind.
Note this variable does not affect the behavior of explicit calls to gasnet_exit()
(either directly or indirectly via calls like upc_global_exit(), returning from
UPC main(), or reaching the GASNet default fatal signal handler) which will still bypass
atexit handlers and kill the job. The recommended method to ensure the execution of
atexit handlers is to run with GASNET_CATCH_EXIT=0 and collectively invoke libc exit().
* GASNET_NO_CATCH_SIGNAL - specify a comma separated list of signals
to exclude from GASNet default signal handling. Formats "SIGSEGV",
"SEGV", "sigsegv", "segv", and "11" are accepted. If the value of
this environment variable is "*" (alone, with no leading or trailing
whitespace), GASNet will not register the default handler for any
signal.
The default handler provides GASNet's backtrace support and ensures clean
exits when fatal signals are received. Disabling this handler may
allow use of other tools for debugging of signals, but is not intended
for production use.
* GASNET_BACKTRACE - Boolean setting to request the generation of stack
backtraces on most fatal errors. The format/content of these backtraces
varies by platform. On some platforms no backtrace support is available and
this variable will be ignored. Backtraces are sent to stderr and to the
trace file if tracing is active (see below).
WARNING: Some fatal errors may involve memory corruption or other abnormal
conditions that could cause the backtrace code to hang. For this reason we
do not recommend setting GASNET_BACKTRACE by default (though there is no
performance penalty for doing so).
When reporting bugs, one is strongly encouraged to include a backtrace if
possible. The backtrace is almost always more detailed if GASNet is built
with debugging enabled, but may still be useful to a GASNet developer in a
non-debug build. If tracing is active (see below) then a copy of the
backtrace will be sent to the trace file. This file may provide developers
with potentially useful information about activities prior to the error.
* GASNET_BACKTRACE_NODES - if enabled by GASNET_BACKTRACE then this provides
an optional list of nodes on which to permit backtraces. The list may
contain one or more integers or ranges separated by commas, such as "0,2-4,6".
If unset, empty, or equal to "*" then all nodes may generate backtraces.
* GASNET_BACKTRACE_SIGNAL: set to a signal name (e.g. "SIGINT" or "SIGUSR1") to
specify a signal that will cause the process to generate an immediate backtrace,
and then continue executing. This is useful for getting a convenient
backtrace for a "hung" process.
* GASNET_BACKTRACE_TYPE - set to a comma-delimited, ordered list of mechanisms
(i.e. different debugger tools) to try when generating a backtrace for
GASNET_BACKTRACE. The default value (visible via GASNET_VERBOSEENV) includes
all mechanisms detected as supported on the current platform.
* GASNET_BACKTRACE_MT - Boolean setting requesting multi-threaded backtraces
when supported by the backtrace mechanism. This overrides the default, which
is generally "1" for thread-safe builds and SEQ builds with conduit-internal
threads. Otherwise, the default is "0".
* GASNET_DISABLE_ENVDECODE/GASNET_DISABLE_ARGDECODE - Boolean setting to disable
the automatic decoding of environment variable values/command-line arguments.
Some GASNet spawners automatically encode shell meta-characters passing
through non-GASNet spawn scripts, in to order to ensure their safe delivery
to the GASNet client program.
* GASNET_SPAWN_VERBOSE - Boolean setting to enable console debugging output of
operations related to job creation and teardown. Details vary by configuration.
* GASNET_BARRIER - select the communication algorithm for use in GASNet barriers.
The following values are available on all conduits:
AMDISSEM - uses Active Messages to implement the Dissemination barrier
algorithm as described in section 3.3 of
John M. Mellor-Crummey and Michael L. Scott. "Algorithms for scalable
synchronization on shared-memory multiprocessors." ACM ToCS, 9(1):21 65, 1991.
RDMADISSEM - uses Put operations to implement the Dissemination algorithm.
DISSEM - auto-selects either AMDISSEM or RDMADISSEM
The AMDISSEM or RDMADISSEM algorithm is selected automatically based on
conduit-specific criteria. In general RDMADISSEM is favored when the GASNet
Extended API is implemented natively.
AMCENTRAL - uses Active Messages to manipulate a single centralized counter.
This is an inherently non-scalable barrier which does not honor the setting
of GASNET_PSHM_BARRIER_HIER to enable shared-memory optimizations.
Therefore, this choice is available only for debugging purposes.
In addition to those choices, many conduits have additional network-specific
barrier algorithms documented in the corresponding conduit READMEs.
The default is DISSEM, unless the conduit README documents another default.
* GASNET_PSHM_BARRIER_RADIX - set radix for intra-node barrier algorithm
For configurations using PSHM (a function of OS and conduit) the GASNet barrier
is performed in intra-node and inter-node stages. This environment variable
is the radix of the tree-based intra-node (shared-memory) barrier.
If zero (default) then radix = size - 1, resulting in a "flat tree" (linear time)
If positive, then the given value is the out-degree of an N-ary tree.
If negative, then a tree is built with the processes in groups of size = -radix.
The first process in each group is the parent of the others in that group.
The rank==0 process is the parent of the other group-representatives (in
addition to being the parent of the others in its own group).
The default is 0 (linear) on most platforms.
* GASNET_PSHM_NETWORK_DEPTH - set depth of the intra-node AM network
For configurations using PSHM (the default on most systems) GASNet implements
intra-node Active Messages using a shared-memory queue. This variable sets
the "network depth" of this implementation in units of maximum-sized messages.
A process can send at least this many out-bound intra-node AMs concurrently
(to any peer) before the implementation might stall awaiting peer attentiveness
to retire AMs. When sending smaller messages, the effective depth is greater
due to allocating less space in the queue than would be needed for a
maximum-sized message.
The default is 32 and the minimum is 4.
* GASNET_NODEMAP_EXACT - Boolean setting to enable an exact algorithm for
discovery of shared memory nodes.
Several GASNet conduits use mmap() and/or conduit-specific memory registration
resources to establish the GASNet segment. When multiple GASNet nodes (processes)
run on the same O/S node, there is a potential for competition for resources which
can be managed by coordinating among the processes.
When PSHM support is enabled, multiple processes on the same O/S node must be
identified so they can cross-mmap() their GASNet segments.
Processes sharing the same O/S node can be discovered using an algorithm
that runs in time linear in the number of GASNet nodes, and which is sufficient
for all common process layout patterns. However, this approach may fail to
discover sharing in unusual cases. Setting this variable to "1" enables an
algorithm that is certain to find all sharing of memory, but has an expected
running time proportional to N*log(N).
The default is currently "1": use of the slower, but safer, exact algorithm.
* GASNET_VIS_AMPIPE - Boolean setting to enable packing of most non-contiguous
put/gets into AMMediums, with each packet of size approx MaxMedium (the only
exception being cases where both sides happen to be fully contiguous, in
which case we skip packing). The default is conduit-dependent.
* GASNET_VIS_{PUT,GET}_MAXCHUNK - limits the max size of a contiguous chunk which
will be packed by AM pipelining in a strided/indexed/vector put or get, respectively.
The chunk size may additionally be limited based on the size that will fit in one MaxMedium.
The default value is conduit-specific.
* GASNET_VIS_MAXCHUNK - Provides a default value for GASNET_VIS_{PUT,GET}_MAXCHUNK,
to be used when the more specific knob is unset.
* GASNET_VIS_REMOTECONTIG - Boolean setting to enable a pack & RDMA algorithm for
gather puts and scatter gets - i.e. cases that are locally non-contiguous but
remotely contiguous. The default is conduit-dependent.
* GASNET_COLL_SCRATCH_SIZE - Specifies the size of the scratch space allocated
on each rank for internal use in collective communications. This is the
preferred size allocated for the initial team, and is the value returned from
a query using GEX_FLAG_TM_SCRATCH_SIZE_RECOMMENDED.
If the size is set too low, then the performance of collectives may suffer.
This parameter must be single-valued (same value on all processes).
A value of zero is permitted, but any value below some implementation-specific
minimum value will be silently increased to that minimum.
Defaults to 2MB per rank.
* GASNET_COLL_ENABLE_SEARCH - Boolean setting to enable autotuning of collectives
* GASNET_COLL_TUNING_FILE - file to read and/or write collective autotuning data
For usage information, see the file autotuner.txt in the docs directory.
* GASNET_FS_SYNC - Boolean setting to enable a sync() call (or equivalent) at
exit time. Default is "0". Try this setting if you experience truncated
output.
* GASNET_TMPDIR: if set to a valid directory name this is used instead of TMPDIR
or "/tmp" as a location for creating temporary files.
* GASNET_SD_INIT, GASNET_SD_INITVAL and GASNET_SD_INITLEN
These variables are *only* recognized in a build configured with --enable-debug.
When using the negotiated-payload AM APIs, GASNet can optionally initialize the
start of buffers it allocates at Prepare time with a defined pattern, and verify
at Commit time that the client has over-written this "canary". To reduce
overhead, only a fixed-length pattern is used. However, to avoid false alarms,
this length must be sufficiently long to make the probability of matching the
client data very low.
GASNET_SD_INIT - Boolean setting which defaults to "1" in debug builds (and is
effectively "0" otherwise)
Setting to a "0" disables the initialization and checking
GASNET_SD_INITVAL - Defaults to "NAN"
Specifies the initialization pattern.
See GASNET_MALLOC_INITVAL for more info.
GASNET_SD_INITLEN - Defaults to 128
Specifies the length of the "canary" used for this checking.
If 'nbytes' passed to the Commit call is less than this length, then no
checking will be performed.
If set too small then the likelihood of random payloads corresponding to the
initialization pattern may lead to false positives.
The minimum is 1 byte and smaller values will be silently replaced by 1.
* GASNET_HOST_DETECT
To implement gex_System_QueryHostInfo() and to construct shared-memory
"neigborhoods", GASNet must map the hosts (compute nodes) in a job. This requires
a unique identifier for each host. This string-valued setting selects the
identifier used.
The following are implemented for most conduits:
"gethostid" - the 32-bit value returned by POSIX gethostid()
"hostname" - a 64-bit hash of the hostname (as reported by POSIX gethostname())
Some conduits support:
"conduit" - a network-specific identifier (such as a MAC address)
On networks providing the "conduit" option, conduit-specific documentation will
describe whether it is supported in addition to the two listed above, or if
it is the *only* supported option.
The default is determined as follows (from highest to lowest priority):
IF "conduit" is supported THEN "conduit" is the default.
ELSEIF configured using '--with-host-detect=...' THEN the "..." is the default.
ELSEIF gethostid() is available THEN "gethostid" is the default.
ELSE "hostname" is the default.
* OPTIONAL: GASNET_EXITTIMEOUT, GASNET_EXITTIMEOUT_MAX, GASNET_EXITTIMEOUT_MIN, and
GASNET_EXITTIMEOUT_FACTOR - control exit-coordination timeout. Some conduits use a
timeout to distinguish orderly job exit from uncoordinated failure of one or more
nodes. This is important to help avoid leaving "orphan" processes on the nodes.
These environment variables allow the user to adjust the length of time that the
conduit will wait to establish contact among all nodes before deciding that an exit
is uncoordinated. By default, the timeout is computed as
GASNET_EXITTIMEOUT = min(GASNET_EXITTIMEOUT_MAX,
GASNET_EXITTIMEOUT_MIN + nodes * GASNET_EXITTIMEOUT_FACTOR)
Setting GASNET_EXITTIMEOUT provides a specific value, ignoring this formula.
Setting one or more of the others will compute a value for GASNET_EXITTIMEOUT using
the formula above (and defaults for any variables not set in the environment).
Currently most conduits honor these settings.
Smp-conduit honors these settings only when PSHM-support is enabled.
Default values differ among these conduits.
* OPTIONAL: GASNET_THREAD_STACK_MIN, GASNET_THREAD_STACK_PAD
Some conduits spawn additional threads internally for various purposes, which may
include running client's AM handlers. If such AM handlers have unusually large
stack space requirements, a mechanism is required to ensure these internal threads
will have large enough stacks.
These settings allow one to control the stack sizes of these internal threads.
The stack size requested from the system will be computed as
stack_size = MAX(GASNET_THREAD_STACK_MIN,
GASNET_THREAD_STACK_PAD + default)
where "default" denotes the system's default thread stack size, and values
of both variables have been rounded-up to a multiple of the page size.
The actual stack size may be smaller (e.g. to satisfy rlimits) or larger
(for instance, the next power of two in some implementations).
The default for both settings is zero, which results in using the system
default size for thread stacks.
* OPTIONAL: topology-aware environment variables
Some conduits are capable of applying a certain degree of intelligence to the
selection of NICs based on the job and host topology. They have in common the
use of the behaviors described here. Current variables of this sort are:
ibv-conduit: 'GASNET_IBV_PORTS_TYPE' (default: "Socket")
ofi-conduit: 'GASNET_OFI_DEVICE_TYPE' (default: "Socket")
This description uses '[BASE]' to replace the portion of these variable names
preceding '_TYPE'. Single-quotes (') are used to identify variable names (or
portions of them) in prose, while double-quotes (") are use for example values.
Where a conduit documents a "topology-aware environment variable":
- Values of '[BASE]_TYPE' are matched using case-insensitive comparisons.
- If '[BASE]_TYPE' is unset, the default value listed above is used.
- If '[BASE]_TYPE' begins with "Auto" then automatic device selection is
enabled (if available), as documented in the conduit-specific README
(including treatment of the computed-name variables described below).
- If '[BASE]_TYPE' is set to "None" then it, and the computed-name
variables described below, are ignored and the conduit will use the value
of the variable '[BASE]', subject to conduit-specific defaults.
- A valid value of '[BASE]_TYPE' consists of a required type (defined next)
optionally followed by an arithmetic operation (described later).
- Valid types name either a GASNet-defined property (based on process rank
numbering) or hwloc-defined object type (based on process pinning and
affinity to elements of the system).
- The following GASNet-defined types are always supported:
+ "JRank"
Process's jobrank
Such as returned from `gex_System_QueryJobRank()`
+ "HRank"
Process's host-relative rank
Such as from the third argument to `gex_System_QueryHostInfo()`
+ "NRank"
Process's nbrhd-relative rank
Such as from the third argument to `gex_System_QueryNbrhdInfo()`
- If 'hwloc' is detected at configure time, then its set of object types are
also valid types. Documentation for your version of hwloc should be
considered definitive. However, the following are some example object
types which are known to be useful:
+ "Core"
Logical ID (or IDs) of the CPU core(s) to which the process is bound.
+ "Node" or "NUMANode"
Logical ID (or IDs) of the NUMA node(s) containing the CPU core(s) to
which the process is bound.
+ "Socket" or "Package"
Logical ID (or IDs) of the CPU package(s) containing the CPU core(s)
to which the process is bound.