2ab585ce8d
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.
[ROCm/rocshmem commit: e9f6227d75]
69 lines
2.1 KiB
C++
69 lines
2.1 KiB
C++
/*
|
|
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;
|
|
}
|