问题描述
我们集群上的 OpenMPI 4.0.5 是用 CUDA 支持构建的,但我想在不需要 CUDA 的情况下对 pnetcdf 进行基准测试。由于我想做一些可以从节点的 1/4 开始的测试运行,并且我的测试不会使用 GPU,所以我想问一下是否有办法抑制 CUDA 设备的 MPI 检查.因为当我在没有 GPU 的情况下简单地获得 SLURM 分配时,仅凭这一点我就会得到很多错误。
这些错误来自 hwloc,可以通过 HWLOC_HIDE_ERRORS=1 抑制,但我想知道是否有更具体的方法。
重现步骤:
frontend$ salloc -n 16 -t 8:00:00 -A k20200
node$ exec bash -l
node$ module load gcc openmpi
node$ mpicc -o /tmp/hello ~/usr/src/helloworld_mpi.c
node$ srun -n 1 /tmp/hello
CUDA: Failed to get number of devices with cudaGetDeviceCount(): no CUDA-capable device is detected
Hello World!,I'm rank 0 of 1!
node$ HWLOC_HIDE_ERRORS=1 srun -n 1 /tmp/hello
Hello World!,I'm rank 0 of 1!
node$ logout
上面使用的示例代码如下,但任何不使用 CUDA 的程序在本练习中同样有用
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define xmpi(rc) \
do { \
int err = (rc); \
if (err != MPI_SUCCESS) { \
char msg[MPI_MAX_ERROR_STRING + 1]; \
int msg_len; \
\
if (MPI_Error_string(err,msg,&msg_len) \
== MPI_SUCCESS){ \
msg[msg_len] = '\0'; \
\
fprintf(stderr,\
"Problem in MPI call: %d = %s\n",\
err,msg); \
MPI_Abort(MPI_COMM_WORLD,1); \
} \
} \
} while (0)
int
main(int argc,char *argv[])
{
xmpi(MPI_Init(&argc,&argv));
int rank,size;
xmpi(MPI_Comm_rank(MPI_COMM_WORLD,&rank));
xmpi(MPI_Comm_size(MPI_COMM_WORLD,&size));
printf("Hello World!,I'm rank %d of %d!\n",rank,size);
xmpi(MPI_Finalize());
return EXIT_SUCCESS;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)