-
-
Notifications
You must be signed in to change notification settings - Fork 440
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gasnet based parcelport #6230
gasnet based parcelport #6230
Conversation
Performance test reportHPX PerformanceComparison
Info
Comparison
Info
Comparison
Info
Explanation of Symbols
|
Currently getting a compile time bug and could use assistance.
any assistance would be appreciated! |
You don't need to add any compatibility headers at all. We added those whenever we moved headers around so that exiting code didn't break (right away), but rather generated a warning instead. |
@ct-clmsn: You could enable testing of the new parcel-port by adding the necessary configuration switches to the env-*.sh files here: https://github.com/STEllAR-GROUP/hpx/blob/master/.jenkins/lsu. If you need additional pre-requisites installed on Rostam for this, please let us know. |
@hkaiser ah, right; found a bunch of small things and made some fixes. Currently blocked on a linking error with |
You will need something like hpx/libs/full/parcelport_tcp/src/parcelport_tcp.cpp Lines 15 to 51 in 8a577a9
|
Having issues getting multiple include directories added to the Providing cmake a list of the 2 required include directories to the Gasnet::gasnet target results in cmake breaking - none of the include directories in the list are added to the Gasnet::gasnet target. Adding a single directory results in cmake adding a single include directory correctly but this means the second required include directory is missing and the build breaks. |
The gasnet header file is found in this path:
Because the required header files in each conduit are not included by
This PR is blocked on the include issue and could use some additional help in the |
Performance test reportHPX PerformanceComparison
Info
Comparison
Info
Comparison
Info
Explanation of Symbols
|
@hkaiser was able to navigate the cmake issues and those are resolved. the implementation needs some debugging work. |
Performance test reportHPX PerformanceComparison
Info
Comparison
Info
Comparison
Info
Explanation of Symbols
|
Performance test reportHPX PerformanceComparison
Info
Comparison
Info
Comparison
Info
Explanation of Symbols
|
Gasnet uses the '--param' configuration variable to tune the compiler optimizer. The pkgconfig file stores the use of '--param'. It's causing some issues with cmake. I've contacted the cmake community for assistance. |
@hkaiser @diehlpk the gasnet parcelport's cmake works correctly now. The gasnet parcelport is working over shared memory on 1 node! Gasnet does not compile into a shared library which causes linking issues. The gasnet development team recommends compiling gasnet with There are plans to provide an A possible way to streamline the gasnet support for hpx is to do a cmake content fetch of gasnet and do a build for users with the CFLAGS and CXX_FLAGS pre-set for them. gasnet has a lot of compilation options so this may not be the best path forward. I'd be willing to work through those issues in cmake if that's something ya'll don't mind offloading. |
Performance test reportHPX PerformanceComparison
Info
Comparison
Info
Comparison
Info
Explanation of Symbols
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi - GASNet developer here.
Thanks @ct-clmsn for all the work on this, and we're excited about the possibility of a GASNet-based HPX backend.
I'll defer detailed code review for now. However I'd like to express some high-level concerns about the current state of this PR, providing context that the HPX developers may be lacking:
-
This PR currently only adds support for the "portable" GASNet conduits (smp, udp, mpi), and not the high-performance "native" GASNet conduits (ibv, aries, ofi).
- smp-conduit is a good choice for single-node operation (all it supports).
- udp-conduit is acceptable on Ethernet hardware, but very suboptimal on HPC networks. mpi-conduit is very slow and should basically only be used as a last resort. Neither is recommended for use on HPC-relevant network hardware.
- If you omit the high-performance GASNet conduits, you're sacrificing most of the potential performance benefits of using GASNet at all.
- I'm concerned that merging tihs work in a state lacking the high-performance GASNet backends could lead less-informed users to misrepresent the performance potential of a GASNet backend.
-
This PR is currently using the deprecated GASNet-1 APIs, instead of the modern GASNet-EX API introduced in 2017.
- As a result, code in this PR cannot take advantage of modern features of GASNet added over the past 6 years.
- Note that Chapel uses the old APIs for historical reasons, but is currently in the process of being updated to GASNet-EX.
- Other major GASNet clients (e.g. Legion, UPC++, Berkeley UPC) are all using the GASNet-EX APIs, to their benefit.
CC: @PHHargrove
@bonachea thanks for sharing the excitement and concerns. The current implementation is for testing and feasibility - this should explain the use of the older API and current emphasis on portable conduits. I'll migrate to the gasnet-ex api over time and will provide a couple more gasnet-conduit options in the current cmake scripts. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wouldn't mind merging this as is at this point. However, I'd like to have some testing in place for this first. We will set up gasnet compiled using the -fPIC
flag on rostam at which point we can add the gasnet parcelport to one or more of the CIs running there.
I recompiled the gasnet library on Rostam with the |
@hkaiser was able to verify gasnet-udp on an x86 slurm cluster with hpx example/demo programs. |
Performance test reportHPX PerformanceComparison
Info
Comparison
Info
Comparison
Info
Explanation of Symbols
|
Some tests intentionally don't install HPX to verify it can be run from the build directory as well. |
FWIW GASNet also supports use from the build directory without an install. The pkgconfig |
Coverage summary from CodacySee diff coverage on Codacy
Coverage variation details
Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: Diff coverage details
Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: See your quality gate settings Change summary preferences |
@hkaiser @Pansysk75 - gasnet now
I'm anticipating an Update Found the issue - the builders aren't setting |
@hkaiser @Pansysk75 quick heads upon the latest attempt.
Jenkins/lsu/clang-12-debug
gcc-10-release |
Can this be solved by using the
I think those warnings about uninstalled HPX were there even before your PR. I suspect the failures are due to SLURM issues on Rostam (caused by some recent system changes regarding how jobs are launched). I'll run some tests manually through ssh and I'll get back to you. |
@hkaiser @Pansysk75 the is the best I've been able to get things so far. I only have the ability to see 3 of the failed builds. The 3 fail for these reasons:
|
@ct-clmsn I can confidently say that all test failures are pre-existing issues unrelated to the parcelport. Nice! |
Nice Chris! All the errors you mentioned are unrelated. This now looks like to be ready to be merged! Thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
bors merge |
👎 Rejected by code reviews |
@hkaiser @Pansysk75 it's been a journey! Learned a lot. Thank you both for being patient with the process! |
Any background context you want to provide?
Initial work to provide a gasnet-based parcelport implementation. This PR adds cmake-based (via pkg-config) gasnet configuration for gasnet-mpi, gasnet-udp, and gasnet-smp support (gasnet-libfabric, gasnet-ucx, can also be made available as a future effort). This implementation is based on a review of the chapel-comm-gasnet source link.
Gasnet creates a distributed shared segment on each locality. The segment is the size of a maximum gasnet page size; the segment is symmetrically sized. The Chapel developers use the maximum gasnet page size with no modifications. Each locality splits it's local copy of the shared segment into a number of segments equal to the number of localities. Information is sent by copying a parcelport buffer into the sender's shared segment (using std::memcpy) and gasnet::put copies the data from the sender's shared segment into the receiver's shared segment. The receiver polls until the data is received. When the sender's gasnet::put completes, a gasnet active message (on the receiver) copies the received data into the receiver's shared segment. The receiver then copies data from the shared segment into a local parcelport buffer (using std::memcpy).
Gasnet specific compilation flags were added to this PR. Adding the following flags will help test the compilation process:
GASnet compiles to a static object. In order to get Gasnet working with HPX the following options are available.
Configure GASnet for udp:
Configuring GASnet for ofi:
Configuring GASnet for ucx:
A single GASnet build to support smp, udp, ofi, and ucx would look like this:
Checklist
Not all points below apply to all pull requests.