17.2.476. MPIX_Query_cuda_support
MPIX_Query_cuda_support - 如果支持CUDA感知则返回1,否则返回0。
17.2.476.1. 语法
17.2.476.1.1. C语法
#include <mpi.h>
#include <mpi-ext.h>
int MPIX_Query_cuda_support(void)
17.2.476.1.2. Fortran语法
该函数没有Fortran绑定。
17.2.476.1.3. C++ 语法
该函数没有C++绑定。
17.2.476.2. 描述
该函数属于Open MPI扩展的一部分,不属于标准MPI。
如果MPI库构建时使用了NVIDIA CUDA库且运行时支持CUDA缓冲区,该例程将返回1。否则返回0。此例程必须在MPI初始化后调用,例如通过调用MPI_Init(3)或MPI_Init_thread(3)。
包含Open MPI特定的头文件会将C预处理器宏OMPI_HAVE_MPI_EXT定义为1。否则该宏将保持未定义状态。应用程序可以使用此宏作为哨兵值来判断是否已包含文件。
Open MPI的CUDA扩展默认会被构建(无论Open MPI是否支持CUDA构建),但可能因管理员操作而被禁用。因此,最安全的做法是应用程序检查预处理器宏OMPI_HAVE_MPI_EXT_CUDA是否被定义并设置为1,以确认MPIX_Query_CUDA_support()函数是否可用。检查此宏还能在使用旧版Open MPI或不支持此函数的其他MPI实现编译应用程序时,保护该函数的使用。
17.2.476.2.1. 示例
#include <stdio.h>
#include <mpi.h>
#include <mpi-ext.h> /* Needed for CUDA-aware check */
int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
bool happy = false;
#if defined(OMPI_HAVE_MPI_EXT_CUDA) && OMPI_HAVE_MPI_EXT_CUDA
happy = (bool) MPIX_Query_cuda_support();
#endif
if (happy) {
printf("This Open MPI installation has CUDA-aware support.\n");
} else {
printf("This Open MPI installation does not have CUDA-aware support.\n");
}
MPI_Finalize();
return 0;
}