set_openmp_device Subroutine

subroutine set_openmp_device()

Uses

  • proc~~set_openmp_device~~UsesGraph proc~set_openmp_device set_openmp_device mpi mpi proc~set_openmp_device->mpi omp_lib omp_lib proc~set_openmp_device->omp_lib

Arguments

None

Calls

proc~~set_openmp_device~~CallsGraph proc~set_openmp_device set_openmp_device mpi_comm_rank mpi_comm_rank proc~set_openmp_device->mpi_comm_rank mpi_comm_split_type mpi_comm_split_type proc~set_openmp_device->mpi_comm_split_type omp_get_num_devices omp_get_num_devices proc~set_openmp_device->omp_get_num_devices omp_set_default_device omp_set_default_device proc~set_openmp_device->omp_set_default_device

Called by

proc~~set_openmp_device~~CalledByGraph proc~set_openmp_device set_openmp_device program~agile agile program~agile->proc~set_openmp_device

Source Code

  subroutine set_openmp_device
    use mpi
    use omp_lib
    integer :: local_rank, comm_shared, my_device, num_devices, ierror

    call MPI_COMM_SPLIT_TYPE(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, comm_shared, ierror)
    call MPI_COMM_RANK(comm_shared, local_rank, ierror)

    num_devices = omp_get_num_devices()

    if (num_devices < 1) error stop "No devices available on host"

    my_device = mod(local_rank, num_devices)
    call omp_set_default_device(my_device)

  end subroutine set_openmp_device