HelloCuda 系列: CUDA CheckP2P

2025-06-18 · 约 2 分钟 · 标签: CUDA , P2P通信 , GPU计算

这部分是一段代码片段,用来检查CUDA设备之间的P2P(点对点)通信能力。P2P通信允许多个GPU直接交换数据,而无需通过主机内存,从而提高数据传输效率。

#include <cuada_runtime.h>
#include <iostream>

void checkCudaDeviceCanAccessPeer() {
   int deviceCount;
   cudaGetDeviceCount(&deviceCount);
   if (deviceCount < 2) {
      std::cerr << "This test requires at least two CUDA devices." << std::endl;
      return;
   }
   std::cout << "Number of CUDA devices: " << deviceCount << std::endl;

   int devID0 = 0, devID1 = 1;
   cudaSetDevice(devID0);

   int canAccessPeer = 0;
   cudaError_t err = cudaDeviceCanAccessPeer(&canAccessPeer, devID0, devID1);
   if (err != cudaSuccess) {
      std::cerr << "Error checking P2P access: " << cudaGetErrorString(err) << std::endl;
      return;
   }
   if (canAccessPeer) {
      std::cout << "Device " << devID0 << " can access device " << devID1 << " directly." << std::endl;
   } else {
      std::cout << "Device " << devID0 << " cannot access device " << devID1 << " directly." << std::endl;
   }
}
评论
评论功能尚未配置:在 GitHub 仓库开启 Discussions,并按项目 README 里的步骤填好 src/consts.ts 即可启用(基于 Giscus,评论需要 GitHub 账号)。