Branch: refs/heads/main
Revision: fb8c75d
Author: e-kayrakli
Link: Add Communication module by e-kayrakli · Pull Request #20309 · chapel-lang/chapel · GitHub
Log Message:
Merge pull request #20309 from e-kayrakli/comm-module
Add Communication module
We use bool
in the GPU layer, but we don't include stdbool.h
. It looks like
This PR adds a new Communication
standard module, as designed in
[Proposal] Add a low-level `Communication` module · Issue #17657 · chapel-lang/chapel · GitHub.
To be able to use c_void_ptr
s in these functions/primitives, it modifies the
codegens of those primitives, to handle c_void_ptr
similar to c_ptr
. In an
earlier attempt, I tried to add FLAG_DATA_CLASS
to c_void_ptr
type, but
struggled a bit.
In terms of the existing uses of primitives, this PR:
- Updates the
CopyAggregation
,GMP
and `ByteBufferHelpers - Doesn't update
Sort
see below
Future directions for this module:
- Wide pointer construction/manipulation (currently, primitives can be used with
ref
s, but not the functions in this module) - Strided communication (we use this internally)
- Non-blocking communication (we can expose, but afaik different comm layers
behave differently)
All of these require some design discussion.
Future directions for its uses:
-
chpl_comm_get_array
is used in DR code. The only difference it has is that
it takes number of elements and not bytes. I don't think we want to add
get
/put
to this module that does that. Instead, I think we can adjust the
DR code to calculate number of bytes itself. Probably a trivial change, but
this PR doesn't do that. - The Sort module still calls primitives itself because it operates with
ref
s
and notc_ptr
s. Probably, that one relates to a higher levelproc copy
idea we were discussing in the beginning of this discussion. However, the
current direction for this module is to keep it lower level than that. All
that being said, I think theSort
module can use this module when it has
functions that can create pointers from potentially wide references.
[Reviewed by @benharsh]
Test
-
gasnet in
library/
andoptimizations/autoAggregation
-
full gasnet
Modified Files:
A modules/standard/Communication.chpl
A test/library/standard/Communication/NUMLOCALES
A test/library/standard/Communication/basic.chpl
A test/library/standard/Communication/basic.good
A test/library/standard/Communication/errors.chpl
A test/library/standard/Communication/errors.execopts
A test/library/standard/Communication/errors.getHiLoc.good
A test/library/standard/Communication/errors.getNegLoc.good
A test/library/standard/Communication/errors.getNegSize.good
A test/library/standard/Communication/errors.prediff
A test/library/standard/Communication/errors.putHiLoc.good
A test/library/standard/Communication/errors.putNegLoc.good
A test/library/standard/Communication/errors.putNegSize.good
M doc/rst/meta/modules/standard.rst
M modules/Makefile
M modules/internal/ByteBufferHelpers.chpl
M modules/packages/CopyAggregation.chpl
M modules/standard/GMP.chpl
M test/compflags/ferguson/print-module-resolution.good
M test/modules/bradc/printModStuff/foo.good
M test/optimizations/deadCodeElimination/elliot/countDeadModules.goodCompare: Comparing 9c35e581c64a...fb8c75df9d89 · chapel-lang/chapel · GitHub