cuda内存管理
内存使用
- cuda程序会使用gpu和cpu内 存
- cpu内存释放与分配是标准的
1)栈,自动分配的
2)堆:用户自己分配释放的,如new,delete,malloc,free等
3.gpu内存分配
1)cudaMalloc(void**devPtr , size_t size)
2) cudafree(void*devPtr)
4.gpu,cpu都可以访问的内存,统一内存
1) cudaMallocManaged(void**devPtr , size_t size)
2) cudafree(void*devPtr)
5.gpu内存拷贝
cudaMemcpy(depth_vec.data, depth_in, depthWidth * depthHeight * sizeof(float), cudaMemcpyDeviceToHost);
6.共享内存
__share__
例子:
//1.cpu上开辟空间 //cv::Mat depth_vec(depthHeight, depthWidth, CV_32FC1); //cv::Mat depth_res(color_im[i].rows, color_im[i].cols, CV_32FC1); //2.gpu上开辟空间 float *depth_gpu = nullptr; // 输入图片在GPU内的内存 float *color_gpu = nullptr; // 输入图片在GPU内的内存 float *mask_gpu = nullptr; // 输入图片在GPU内的内存 float *cam_intr_gpu = nullptr; // 输入图片在GPU内的内存 //float *depth_out = nullptr; // 归一化后图片在GPU内的内存 cudaMalloc((void **) &depth_gpu, depthWidth * depthHeight * sizeof(float)); cudaMalloc((void **) &color_gpu, colorWidth * colorHeight * sizeof(float)); cudaMalloc((void **) &mask_gpu, colorWidth * colorHeight * sizeof(float)); cudaMalloc((void **) &cam_intr_gpu, 4 * sizeof(float)); //3.把cpu上的数据拷贝到gpu上 //拷贝深度图,注意是data是一维的 cudaMemcpy(depth_gpu, depth_im[i].data, depthWidth * depthHeight * sizeof(float), cudaMemcpyHostToDevice); //拷贝彩色图,注意是data是一维的 cudaMemcpy(color_gpu, color_im[i].data, colorWidth * colorHeight * sizeof(float), cudaMemcpyHostToDevice); //拷贝mask图 cudaMemcpy(mask_gpu, mask_im[i].data, colorWidth * colorHeight * sizeof(float), cudaMemcpyHostToDevice); //拷贝内参 cudaMemcpy(cam_intr_gpu, cam_intr_arry_p, 4 * sizeof(float), cudaMemcpyHostToDevice); //4.将整张图映射到一个grid中 dim3 threadsPerBlock(32, 32); dim3 blocksPerGrid(depthWidth / threadsPerBlock.x + 1, depthHeight / threadsPerBlock.y + 1); is_mask <<< blocksPerGrid, threadsPerBlock>>>(depth_in, mask_in); //5.gpu拷贝回cpu cudaMemcpy(depth_res.data, depth_out, depthWidth * depthHeight * sizeof(float), cudaMemcpyDeviceToHost); cudaFree(depth_in);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界