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:
@@ -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() {
|
||||
|
||||
Odkázat v novém úkolu
Zablokovat Uživatele