Peer access to neighboring GPUs is now enabled during initialization

This commit is contained in:
jpekkila
2019-07-22 13:02:19 +03:00
parent 0db61dd411
commit 168b3c4d8b

View File

@@ -291,6 +291,29 @@ acInit(const AcMeshInfo& config)
printDeviceInfo(devices[i]); printDeviceInfo(devices[i]);
} }
// Enable peer access
for (int i = 0; i < num_devices; ++i) {
const int front = (i + 1) % num_devices;
const int back = (i - 1 + num_devices) % num_devices;
int can_access_front, can_access_back;
cudaDeviceCanAccessPeer(&can_access_front, i, front);
cudaDeviceCanAccessPeer(&can_access_back, i, back);
#if VERBOSE_PRINTING
printf(
"Trying to enable peer access from %d to %d (can access: %d) and %d (can access: %d)\n",
i, front, can_access_front, back, can_access_back);
#endif
cudaSetDevice(i);
if (can_access_front) {
ERRCHK_CUDA_ALWAYS(cudaDeviceEnablePeerAccess(front, 0));
}
if (can_access_back) {
ERRCHK_CUDA_ALWAYS(cudaDeviceEnablePeerAccess(back, 0));
}
}
acSynchronizeStream(STREAM_ALL); acSynchronizeStream(STREAM_ALL);
return AC_SUCCESS; return AC_SUCCESS;
} }