Functional tests without MPI support (#343)

* Let functional tests build without external MPI

* Fix error conditions when using uuid startup with internal MPI

* Do not abort if libibverbs is not found but not using GDA

* Enabled RO functional test initialized with TEST_UUID

* Reduce load time for ro backend_can_run and prevent mpilib_dlclose
crashing

* Fix case TEST_UUID=1, ROCSHMEM_BACKEND='' (autoloading gda)

[ROCm/rocshmem commit: c99bc21e10]
This commit is contained in:
Aurelien Bouteiller
2025-12-08 11:46:16 -05:00
committed by GitHub
parent 1c3ce17f13
commit 92c56e7fbd
10 changed files with 81 additions and 56 deletions
+10 -9
View File
@@ -29,6 +29,7 @@
#include <cassert>
#include "backend_gda.hpp"
#include "ibv_wrapper.hpp"
#include "envvar.hpp"
#include "gda_team.hpp"
#include "mpi_instance.hpp"
@@ -649,15 +650,17 @@ int GDABackend::backend_can_run() {
void *handle{nullptr};
GDAProvider requested = requested_provider();
/* Basic verbs? */
if (!ibv.is_initialized) return ROCSHMEM_ERROR;
/* Try opening bnxt DV libraries */
#if defined(GDA_BNXT)
if (requested == GDAProvider::UNSET || requested == GDAProvider::BNXT) {
handle = bnxt_dv_dlopen();
if (handle) {
auto ret = has_active_ib_interface(GDAProvider::BNXT);
dlclose(handle);
if (has_active_ib_interface(GDAProvider::BNXT)) {
return ROCSHMEM_SUCCESS;
}
if (ret) return ROCSHMEM_SUCCESS;
DPRINTF("BNXT DV library found but no active InfiniBand interface available\n");
}
}
@@ -668,10 +671,9 @@ int GDABackend::backend_can_run() {
if (requested == GDAProvider::UNSET || requested == GDAProvider::IONIC) {
handle = ionic_dv_dlopen();
if (handle) {
auto ret = has_active_ib_interface(GDAProvider::IONIC);
dlclose(handle);
if (has_active_ib_interface(GDAProvider::IONIC)) {
return ROCSHMEM_SUCCESS;
}
if (ret) return ROCSHMEM_SUCCESS;
DPRINTF("IONIC DV library found but no active InfiniBand interface available\n");
}
}
@@ -682,10 +684,9 @@ int GDABackend::backend_can_run() {
if (requested == GDAProvider::UNSET || requested == GDAProvider::MLX5) {
handle = mlx5_dv_dlopen();
if (handle) {
auto ret = has_active_ib_interface(GDAProvider::MLX5);
dlclose(handle);
if (has_active_ib_interface(GDAProvider::MLX5)) {
return ROCSHMEM_SUCCESS;
}
if (ret) return ROCSHMEM_SUCCESS;
DPRINTF("MLX5 DV library found but no active InfiniBand interface available\n");
}
}