ovni/test/emu/mpi/func.c
2023-09-06 18:11:19 +02:00

66 lines
1.4 KiB
C

/* Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
* SPDX-License-Identifier: GPL-3.0-or-later */
#include <stdlib.h>
#include "compat.h"
#include "instr.h"
#include "instr_mpi.h"
int
main(void)
{
/* Test that simulates the execution of MPI functions */
const int rank = atoi(getenv("OVNI_RANK"));
const int nranks = atoi(getenv("OVNI_NRANKS"));
instr_start(rank, nranks);
/* Initialize MPI */
instr_mpi_init_thread_enter();
instr_mpi_init_thread_exit();
/* Issue a non-blocking broadcast */
instr_mpi_ibcast_enter();
instr_mpi_ibcast_exit();
/* Wait the broadcast request */
instr_mpi_wait_enter();
instr_mpi_wait_exit();
/* Perform a barrier */
instr_mpi_barrier_enter();
instr_mpi_barrier_exit();
const int ncomms = 100;
/* Simulate multiple nonb-blocking communications */
for (int c = 0; c < ncomms; c++) {
/* Issue a non-blocking synchronous send */
instr_mpi_issend_enter();
instr_mpi_issend_exit();
/* Issue a non-blocking receive */
instr_mpi_irecv_enter();
instr_mpi_irecv_exit();
}
/* Simulate testsome calls until all communications are completed */
for (int c = 0; c < ncomms; c++) {
instr_mpi_testsome_enter();
instr_mpi_testsome_exit();
}
/* Allreduce a value */
instr_mpi_allreduce_enter();
instr_mpi_allreduce_exit();
/* Finalize MPI */
instr_mpi_finalize_enter();
instr_mpi_finalize_exit();
instr_end();
return 0;
}