-
Notifications
You must be signed in to change notification settings - Fork 18
Open
Labels
Description
Hi, I would like to convert my code in CUDA to CUPLA and I have some issues with
mutli-GPU/single-CPU P2P async. copies. This is the error:
error: argument of type "cuplaStream_t" is incompatible with parameter of type "cudaStream_t"
This is a typical P2P copy in my code:
const int numStreams = 10;
cudaStream_t streams[numStreams];
cuplaSetDevice (idGpuI);
for (size_t i=0; i<numStreams; ++i)
cudaStreamCreate(&streams[i]);
for (size_t loc1=0; loc1<grid1Size*grid1Size*grid1Size; ++loc1)
{
cudaMemcpyPeerAsync(&(grid0GpuJ[loc1].grid0Size), idGpuJ, &(grid0GpuI[loc1].grid0Size),
idGpuI, sizeof(int), streams[loc1%numStreams]);
}
So how do I write this in CUPLA?
In order to give access to P2P copy, this is what I am doing in CUDA:
inline void enableP2P (int ngpus, std::string info) {
for( int i = 0; i < ngpus; i++ ) {
cuplaSetDevice (i);
for(int j = 0; j < ngpus; j++) {
if(i == j) continue;
int peer_access_available = 0;
cudaDeviceCanAccessPeer(&peer_access_available, i, j);
if (peer_access_available) {
cudaDeviceEnablePeerAccess(j, 0);
if (info=="info")
printf("> GPU%d enabled direct access to GPU%d\n",i,j);
}else {
if (info=="info")
printf("(%d, %d)\n", i, j);
}
}
}
}
It seems in CUPLA cudaDeviceEnablePeerAccess is done automatically and
cudaDeviceCanAccessPeer disappears, so I think the function enableP2P is not necessary anymore, right?
Thanks for any help!
[edited by psychocoderHPC: fixed formation]
sbastrakov