Published on

HelloCuda 系列: CUDA CheckP2P

这部分是一段代码片段,用来检查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;
   }
}

THE END