add uniqueID initialization (#69)

add the interfaces required to support rocshmem initialization
through the uniqueID mechanism. At the moment this still maps to
MPI initialization underneath the hood, but adding the functions might
simplify the porting of some applications to rocshmem. In addition, if
we need to transition away from MPI one day, this is also one step into
this direction.
This commit is contained in:
Edgar Gabriel
2025-03-28 16:34:00 -05:00
کامیت شده توسط GitHub
والد 12561783de
کامیت e9f6227d75
5فایلهای تغییر یافته به همراه228 افزوده شده و 3 حذف شده
+1
مشاهده پرونده
@@ -29,6 +29,7 @@ set(EXAMPLE_SOURCES
rocshmem_broadcast_test.cc
rocshmem_getmem_test.cc
rocshmem_put_signal_test.cc
rocshmem_init_attr_test.cc
)
foreach(SOURCE_FILE IN LISTS EXAMPLE_SOURCES)
@@ -0,0 +1,68 @@
/*
hipcc -c -fgpu-rdc -x hip rocshmem_init_attr_test.cc \
-I/opt/rocm/include \
-I$ROCSHMEM_INSTALL_DIR/include \
-I$OPENMPI_UCX_INSTALL_DIR/include/
hipcc -fgpu-rdc --hip-link rocshmem_init_attr_test.o -o rocshmem_init_attr_test \
$ROCSHMEM_INSTALL_DIR/lib/librocshmem.a \
$OPENMPI_UCX_INSTALL_DIR/lib/libmpi.so \
-L/opt/rocm/lib -lamdhip64 -lhsa-runtime64
ROCSHMEM_MAX_NUM_CONTEXTS=2 mpirun -np 2 ./rocshmem_init_attr_test
*/
#include <iostream>
#include <hip/hip_runtime_api.h>
#include <hip/hip_runtime.h>
#include <rocshmem/rocshmem.hpp>
#define CHECK_HIP(condition) { \
hipError_t error = condition; \
if(error != hipSuccess){ \
fprintf(stderr,"HIP error: %d line: %d\n", error, __LINE__); \
MPI_Abort(MPI_COMM_WORLD, error); \
} \
}
using namespace rocshmem;
int main (int argc, char **argv)
{
int rank, nranks;
int ret;
rocshmem_uniqueid_t uid;
rocshmem_init_attr_t attr;
MPI_Init(&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Comm_size (MPI_COMM_WORLD, &nranks);
if (rank == 0) {
ret = rocshmem_get_uniqueid (&uid);
if (ret != ROCSHMEM_SUCCESS) {
std::cout << rank << ": Error in rocshmem_get_uniqueid. Aborting.\n";
MPI_Abort (MPI_COMM_WORLD, ret);
}
}
MPI_Bcast (&uid, sizeof(rocshmem_uniqueid_t), MPI_BYTE, 0, MPI_COMM_WORLD);
ret = rocshmem_set_attr_uniqueid_args(rank, nranks, &uid, &attr);
if (ret != ROCSHMEM_SUCCESS) {
std::cout << rank << ": Error in rocshmem_set_attr_uniqueid_args. Aborting.\n";
MPI_Abort (MPI_COMM_WORLD, ret);
}
ret = rocshmem_init_attr(ROCSHMEM_INIT_WITH_UNIQUEID, &attr);
if (ret != ROCSHMEM_SUCCESS) {
std::cout << rank << ": Error in rocshmem_init_attr. Aborting.\n";
MPI_Abort (MPI_COMM_WORLD, ret);
}
std::cout << rank << ": rocshmem_init_attr SUCCESS\n";
rocshmem_finalize();
MPI_Finalize();
return 0;
}