@dikysa
Студент

Как поведет себя MPI с CUDA (NVlink or PCI or CPU)?

Здравствуйте. Вопрос о взаимодействии MPI с CUDA, а именно какая будет использована технология передачи?

Есть MVAPICH2 2.3 собранный с --enable-cuda.
Установлена переменная окружения MV2_USE_CUDA = 1, чтобы включить поддержку MPI с CUDA 9+

И есть 2 карты на узле, который соединены nvlink напрямую и pci напрямую (т.е. поддерживают P2P и RDMA).

Запускается 2 MPI потока на такой узле, первый поток использует GPU_0, второй поток использует GPU_1.
И есть такой код
cudaSetDevice(rank);
double *d_out, *d_in;
cudaMemcpyManaged((void**)& d_out, size);
cudaMemcpyManaged((void**)& d_in, size);

// тут инициализация d_out

// И вопрос в этом месте??
// По какому каналу памяти пойдут данные, когда я вызову mpi_функцию для передачи данных прямиком из GPU памяти в GPU память

MPI_Status status;

//  1. Будет ли этот вызов использовать P2P (по nvlink передача) или RDMA (по pci) или CPU (через хоста будет обмен) ??
MPI_Sendrecv(d_out, count, MPI_DOUBLE, rankTo, 777, d_in, count, MPI_DOUBLE, rankTo, 777, &status);

// 2. Или нужно включить P2P и тогда MPI будет его использовать
cudaDeviceEnablePeerAccess(rankTo, 0);
MPI_Sendrecv(d_out, count, MPI_DOUBLE, rankTo, 777, d_in, count, MPI_DOUBLE, rankTo, 777, &status);
cudaDeviceDisablePeerAccess(rankTo);

// 3. Есть тестовый вариант через CPU
double *h_out, h_in;
h_out = new double[count];
h_in = new double[int];
cudaMemcpy(h_out, d_out, size, cudaMemcpyDeviceToHost);
MPI_Sendrecv(h_out, count, MPI_DOUBLE, rankTo, 777, h_in, count, MPI_DOUBLE, rankTo, 777, &status);
cudaMemcpy(d_in, h_out, size, cudaMemcpyHostToDevice);
delete[] h_out;
delete[] h_in;


И вот есть подозрение, что 1 вариант равносилен 3 варианту, а очень хочется, чтобы передача шла с использованием P2P.
И хотелось бы узнать, как сделать передачу по P2P?
Может нужно добавить какие нить переменные окружения? ( Например MV2_CUDA_ENABLE_MANAGED=1, MV2_CUDA_MANAGED_IPC=1)
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы