Xia*_*ang 5 cuda unified-memory
我们有两个GPU内存,一个用cuMalloc普通设备内存分配,另一个用cuMallocManaged统一内存分配.它们之间可以复制吗?如果我们使用驱动程序API,我应该使用什么方向?
float* normalMem, unifiedMem;
cuMalloc(&normalMem, 100);
cuMallocManaged(&unifiedMem, 100);
cuMemcpyD2D(unifiedMem, normalMem, 100); // ? D2D? or D2H? or else?
Run Code Online (Sandbox Code Playgroud)
是的你可以。例如看下面的代码。
float。我认为代码是不言自明的
__global__
void test(float* d_ptr){
for(int i=0;i<100;i++)
printf("%f \n",d_ptr[i]);
printf("\n");
}
////////////////////////////////////////////////////////////////////////////////
// Program main
////////////////////////////////////////////////////////////////////////////////
int main(int argc, char **argv)
{
size_t size = sizeof(float)*100;
float* h_p =(float*) malloc(size);
float* d_p, dm_p ;
cudaMalloc(&d_p,size);
cudaMallocManaged(&dm_p,size);
for(int i=0;i<100;i++)
h_p[i]=2*(float)i;
cudaMemcpy(d_p,h_p,size,cudaMemcpyHostToDevice);
cudaDeviceSynchronize();
cudaMemcpy(dm_p,d_p,size,cudaMemcpyDeviceToDevice);
cudaDeviceSynchronize();
test<<<1,1>>>(dm_p);
cudaDeviceSynchronize();
cudaFree(dm_p);
cudaFree(d_p);
free(h_p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请记住阅读统一内存访问规则。
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |