/ / Como usar o GPUDirect RDMA com Infiniband - cuda, openmpi, infiniband, gpudirect

Como usar o GPUDirect RDMA com Infiniband - cuda, openmpi, infiniband, gpudirect

Eu tenho duas máquinas. Existem vários cartões Tesla em cada máquina. Há também uma placa InfiniBand em cada máquina. Eu quero me comunicar entre cartões de GPU em diferentes máquinas através do InfiniBand. Apenas ponto a ponto unicast estaria bem. Eu certamente quero usar o GPUDirect RDMA para que eu possa me poupar de operações de cópia extras.

Estou ciente de que existe uma motorista disponível agora da Mellanox para sua InfiniBandcartões. Mas ele não oferece um guia de desenvolvimento detalhado. Também estou ciente de que o OpenMPI tem suporte para o recurso que estou pedindo, mas o OpenMPI é muito pesado para essa tarefa simples e não suporta várias GPUs em um único processo.

Eu me pergunto se eu poderia obter ajuda diretamenteusando o driver para fazer a comunicação. Amostra de código, tutorial, qualquer coisa seria boa. Além disso, eu agradeceria se alguém pudesse me ajudar a encontrar o código que lida com isso no OpenMPI.

Respostas:

6 para resposta № 1

Para que o GPDirect RDMA funcione, você precisa do seguinte instalado:

Todos os itens acima devem ser instalados (peloordem listada acima) e os módulos relevantes carregados. Depois disso, você poderá registrar a memória alocada na memória de vídeo da GPU para transações RDMA. O código de amostra será semelhante a:

void * gpu_buffer;
struct ibv_mr *mr;
const int size = 64*1024;
cudaMalloc(&gpu_buffer,size); // TODO: Check errors
mr = ibv_reg_mr(pd,gpu_buffer,size,IBV_ACCESS_LOCAL_WRITE|IBV_ACCESS_REMOTE_WRITE|IBV_ACCESS_REMOTE_READ);

Isso criará (em um sistema habilitado para GPDirect RDMA) uma região de memória, com uma chave de memória válida que você pode usar para transações RDMA com nosso HCA.

Para mais detalhes sobre o uso de verbos RDMA e InfiniBand em seu código, você pode consultar este documento.