当前位置: 首页 > news >正文

CUDA编程之内存零拷贝技术

一、实现原理

        零拷贝内存通过将‌主机锁页内存‌直接映射到设备地址空间,实现CPU与GPU共享内存,避免显式数据拷贝‌。锁页内存通过cudaHostAlloccudaHostRegister分配,确保物理地址固定且不被操作系统换页,从而支持DMA(直接内存访问)‌。

二、核心函数
  • 内存分配
    cudaHostAlloc(&host_ptr, size, cudaHostAllocMapped | cudaHostAllocWriteCombined); // 分配锁页内存‌
    cudaHostGetDevicePointer(&device_ptr, host_ptr, 0); // 获取设备端指针‌
  • 内存释放‌:‌
    cudaFreeHost(host_ptr); // 必须使用CUDA接口释放‌

三、适用场景

       零拷贝和普通的cudaMemcpy一样也是要走pci-e总线的,只不过cudaMemcpy是一次性全部copy过去,而零拷贝是用的时候自动在后台通过pci-e总线传输。一般建议只使用一次的数据以及少量的返回数据可以使用零拷贝,其他情况建议copy到显存使用,显存DRAM的带宽要比pci-e的带宽高出一个量级。

  • 小规模数据频繁访问‌:
    如实时图像处理场景,GPU可直接读取主机内存中的输入数据,减少显存占用‌。
  • 主机-设备交互频繁‌:
    需多次读写同一内存区域时,零拷贝可替代cudaMemcpy,减少通信开销‌。
四、代码
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>

#define N 1024*1024

__global__ void doubleData(float *data, int size) {

    int i = threadIdx.x + blockIdx.x * blockDim.x;
    if(i<size){
     data[i]=10;
    }
}

int main()
{
    // 零拷贝内存示例:GPU直接操作主机内存  
    float *host_data, *device_data;  
    cudaHostAlloc(&host_data, N*sizeof(float), cudaHostAllocMapped); // 分配锁页内存‌
    cudaHostGetDevicePointer(&device_data, host_data, 0); // 获取设备指针‌
    int block = 1024;
    int grid = (N+1023)/block;
    doubleData<<<grid, block>>>(device_data, N); // GPU内核直接访问主机内存‌
    cudaDeviceSynchronize(); // 确保内核执行完成  
    cudaFreeHost(host_data); // 释放内存‌
    
     return 0;
}

相关文章:

  • C++中通过虚函数实现多态的原理
  • 优化Go错误码管理:构建清晰、优雅的HTTP和gRPC错误码规范
  • 一文掌握 RAG 的原理和对应的2个案例
  • 江苏无锡一家汽车零部件企业终止,拓展氢燃料电池存不确定性
  • Python说明
  • Linux 进程的创建、终止、等待与程序替换函数 保姆级讲解
  • Qt QML实现鼠标自由选择不规则区域进行截图
  • 编程自学指南:java程序设计开发,Java I/O流,为什么需要I/O流?,Java I/O体系结构,字节流,字符流,对象流与序列化
  • 深入理解Spring Boot:快速构建现代化的Java应用
  • C++中,存储持续性、作用域和链接性
  • 一般机器学习有哪些算法?
  • python笔记2
  • LeeCode题库第643题
  • 用Maven创建只有POM文件的项目
  • MCU的工作原理:嵌入式系统的控制核心
  • 解决 Docker 镜像拉取超时问题:配置国内镜像源
  • 【深度学习|目标检测】YOLO系列anchor-based原理详解
  • 注意力机制,层归一化,RBA。KAN-ODE,小波KAN
  • 提升开发效率的FPGA/IC小工具
  • 文件解析漏洞详解
  • 云南旅游市场10条措施征求意见:对强制诱导购物等吊销导游证的不得再次核发
  • 保利、北京建工联合体45.45亿元竞得北京海淀区宅地,溢价率11.95%
  • 秦洪看盘|热门股或将退潮,短线波动难免
  • 4月中国常青游戏榜:32款游戏吸金近34亿元,腾讯、网易占半壁江山,《原神》再跌出前十
  • 全国35城居民对公共服务满意度“打分”,上海多项指标居首
  • 莱布雷希特专栏:古典乐坛边缘人