Add host API for *_on_stream operations (#340)

* Add functional test for barrier_all_on_stream

* Add rocshmem_barrier_all_on_stream support for GDA and RO backends

Implements rocshmem_barrier_all_on_stream operation for
GPU Direct Access and Reverse Offload backends.

Previously, rocshmem_barrier_all_on_stream was only supported for IPC backend.

* Add functional test for rocshmem_broadcastmem_on_stream

* Add host-side rocshmem_broadcastmem_on_stream API

Implement stream-based broadcast collective operation

- Add rocshmem_broadcastmem_on_stream host API and kernel implementation
- Add functional test TeamBroadcastmemOnStreamTester with multi-stream
  support and correctness verification
- Use per-workgroup contexts to avoid contention across parallel streams

API:
rocshmem_broadcastmem_on_stream(team, dest, source, nelems, pe_root, stream)

* Add functional test for rocshmem_getmem_on_stream

* Add host-side rocshmem_getmem_on_stream API

Implement stream-based point-to-point RMA get operation

- Add rocshmem_getmem_on_stream host API and kernel implementation
- Support for asynchronous getmem operations on HIP streams
- Add backend support for GDA, RO, and IPC contexts
- Use work-group collective getmem for efficient memory transfer

API:
rocshmem_getmem_on_stream(dest, source, nelems, pe, stream)

(AI Assist)

* Add host-side rocshmem_putmem_on_stream API

- Add rocshmem_putmem_on_stream for asynchronous remote writes
- Support for concurrent RMA operations on HIP streams
- Add backend support for GDA, RO, and IPC contexts
- Use work-group device collective operation

API:
rocshmem_putmem_on_stream(dest, source, bytes, pe, stream)

(AI Assist)

* Add functional test for rocshmem_putmem_on_stream

* Add host-side rocshmem_putmem_signal_on_stream API

Enables asynchronous putmem operations with signaling on HIP streams.

The implementation includes:
- Kernel wrapper rocshmem_putmem_signal_kernel
- Host interface putmem_signal_on_stream method
- Context layer support across all backends (IPC, GDA, RO)
- Public API

Function signature:
void rocshmem_putmem_signal_on_stream(void *dest, const void *source,
                                      size_t bytes, uint64_t *sig_addr,
                                      uint64_t signal, int sig_op,
                                      int pe, hipStream_t stream);

* Add functional test for rocshmem_putmem_signal_on_stream

* Add host-side rocshmem_signal_wait_until_on_stream API

Enables asynchronous signal wait operations on HIP streams.

The implementation includes:
- Kernel wrapper rocshmem_signal_wait_until_kernel
- Host interface signal_wait_until_on_stream method
- Context layer support across all backends (IPC, GDA, RO)
- Native uint64_t support in wait_until API (generated from P2P_SYNC.py)

Function signature:
void rocshmem_signal_wait_until_on_stream(uint64_t *sig_addr, int cmp,
                                          uint64_t cmp_value,
                                          hipStream_t stream);

(AI Assist)

* Add functional test for rocshmem_signal_wait_until_on_stream

* Add documentation for stream API functions

This commit adds API documentation for the following host-side
stream functions:

- rocshmem_barrier_all_on_stream (collective routines)
- rocshmem_broadcastmem_on_stream (collective routines)
- rocshmem_getmem_on_stream (RMA operations)
- rocshmem_putmem_on_stream (RMA operations)
- rocshmem_putmem_signal_on_stream (signaling operations)
- rocshmem_signal_wait_until_on_stream (point-to-point sync)

The documentation includes function signatures, parameter descriptions,
and detailed explanations of asynchronous behavior and stream handling.

(AI Assist)

* Rename "bytes" -> "nelems"

* Add "_TEST_" to the variables used in tests

* Remove incorrect hipStreamDefault usage

hipStreamDefault is not a default stream. This is a flag.

If stream == nullptr, then just pass it to kernel. It will launch the kernel on the default stream

[ROCm/rocshmem commit: d0c8380650]
Tento commit je obsažen v:
Anatolii Rozanov
2025-12-09 15:55:46 +01:00
odevzdal GitHub
rodič b9c172de16
revize f98c72d627
39 změnil soubory, kde provedl 2649 přidání a 49 odebrání
+25 -1
Zobrazit soubor
@@ -110,6 +110,12 @@ declare -A TEST_NUMBERS=(
["teamctxblockinfra"]="74"
["teamctxoddeveninfra"]="75"
["alltoallmem_on_stream"]="76"
["barrier_all_on_stream"]="77"
["broadcastmem_on_stream"]="78"
["getmem_on_stream"]="79"
["putmem_on_stream"]="80"
["putmem_signal_on_stream"]="81"
["signal_wait_until_on_stream"]="82"
)
ExecTest() {
@@ -150,6 +156,11 @@ ExecTest() {
OPTIONS+=" -x UCX_ROCM_IPC_SIGPOOL_MAX_ELEMS=16384"
OPTIONS+=" --map-by numa --timeout $TIMEOUT"
if [[ "" != "$ROCSHMEM_TEST_USE_DEFAULT_STREAM" ]]
then
OPTIONS+=" -x ROCSHMEM_TEST_USE_DEFAULT_STREAM=$ROCSHMEM_TEST_USE_DEFAULT_STREAM"
fi
if [[ "" != "$HOSTFILE" ]]
then
OPTIONS+=" --hostfile $HOSTFILE"
@@ -222,6 +233,12 @@ TestRMAPut() {
ExecTest "shmemptr" 2 8 1 8
ExecTest "shmemptr" 2 16 128 8
ExecTest "putmem_on_stream" 2 1 1 1048576
export ROCSHMEM_TEST_USE_DEFAULT_STREAM=1
ExecTest "putmem_on_stream" 2 1 1 1048576
unset ROCSHMEM_TEST_USE_DEFAULT_STREAM
################################ Non-Blocking ################################
ExecTest "putnbi" 2 1 1 1048576
@@ -274,6 +291,8 @@ TestRMAGet() {
ExecTest "g" 2 8 1 32
ExecTest "g" 2 16 128 4
ExecTest "getmem_on_stream" 2 1 1 1048576
################################ Non-Blocking ################################
ExecTest "getnbi" 2 1 1 1048576
@@ -373,6 +392,9 @@ TestSigOps() {
ExecTest "wgsignalfetch" 2 2 32
ExecTest "wavesignalfetch" 2 1 32
ExecTest "wavesignalfetch" 2 1 64
ExecTest "putmem_signal_on_stream" 2 1 1 1048576
ExecTest "signal_wait_until_on_stream" 2 1 1
}
TestColl() {
@@ -430,7 +452,9 @@ TestColl() {
ExecTest "teamreduction" 2 1 1 32768
ExecTest "alltoallmem_on_stream" 2 1 1 32768
ExecTest "alltoallmem_on_stream" 2 1 1 1048576
ExecTest "broadcastmem_on_stream" 2 1 1 1048576
ExecTest "barrier_all_on_stream" 2 1 1
}
TestOther() {