CUDA实践指南(十二)

简介:

Zero Copy:
零拷贝是CUDA工具包2.2版中添加的一项功能。 它使GPU线程可以直接访问主机内存。 为此,它需要映射固定(不可分页)内存。 在集成GPU上(即CUDA设备属性结构的集成字段设置为1的GPU),映射固定内存始终是性能增益,因为它避免了多余的副本,因为集成的GPU和CPU内存在物理上是相同的。 在独立的GPU上,映射固定内存仅在某些情况下才有优势。 由于数据未在GPU上缓存,映射的固定内存应该只读取或写入一次,并且读取和写入内存的全局加载和存储应该合并。 可以使用零拷贝代替流,因为内核发起的数据传输会自动覆盖内核执行,而无需设置和确定最佳数据流的开销。
低优先级:对于CUDA Toolkit 2.2及更高版本,在集成GPU上使用零拷贝操作。
零拷贝主机代码:

float *a_h, *a_map;
...
cudaGetDeviceProperties(&prop, 0);
if (!prop.canMapHostMemory)
exit(0);
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc(&a_h, nBytes, cudaHostAllocMapped);
cudaHostGetDevicePointer(&a_map, a_h, 0);
kernel << <gridSize, blockSize >> >(a_map);

在此代码中,由cudaGetDeviceProperties()返回的结构的canMapHostMemory字段用于检查设备是否支持将主机内存映射到设备的地址空间。 通过使用cudaDeviceMapHost调用cudaSetDeviceFlags()来启用页面锁定内存映射。 请注意,必须在设置设备或进行需要状态的CUDA调用(即本质上,在创建上下文之前)之前调用cudaSetDeviceFlags()。 页面锁定的映射主机内存使用cudaHostAlloc()进行分配,指向映射设备地址空间的指针通过函数cudaHostGetDevicePointer()获取。 在零拷贝主机代码的代码中,kernel()可以使用指针a_map来引用映射的固定主机内存,其方式与如果a_map引用设备内存中的位置完全相同。
映射固定主机内存允许您将CPU-GPU内存传输与计算重叠,同时避免使用CUDA流。 但由于对这些内存区域的任何重复访问都会导致重复的PCIe传输,因此请考虑在设备内存中创建第二个区域以手动缓存先前读取的主机内存数据。
统一虚拟寻址:
计算能力2.0和更高版本的设备在使用TCC驱动程序模式时,支持在64位Linux,Mac OS和Windows XP以及Windows Vista / 7上称为统一虚拟寻址(UVA)的特殊寻址模式。 使用UVA,所有安装的受支持设备的主机内存和设备内存共享一个虚拟地址空间。
在UVA之前,应用程序必须跟踪哪些指向设备内存(以及哪个设备)的指针,哪些指向主机内存作为每个指针的单独元数据位(或者程序中的硬编码信息)。 另一方面,使用UVA,通过使用cudaPointerGetAttributes()检查指针的值,可以简单地确定指针指向的物理内存空间。
在UVA下,与cudaHostAlloc()一起分配的固定主机内存将具有相同的主机和设备指针,因此不必为此类分配调用cudaHostGetDevicePointer()。 然而,事后通过cudaHostRegister()固定的主机内存分配将继续具有与其主机指针不同的设备指针,因此在这种情况下,cudaHostGetDevicePointer()仍然是必需的。
在受支持的配置中,UVA也是通过PCIe总线直接支持对等(P2P)数据传输以支持GPU的必要先决条件,绕过主机内存。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
2月前
|
人工智能 Prometheus 运维
阿里云1分钟或本地部署OpenClaw+AIOps高效运维实战:Prometheus+夜莺MCP,轻量化监控分析指南
在运维场景中,传统监控架构往往存在链路复杂、定制化成本高、AI能力融合不足等问题。OpenClaw(俗称“龙虾”)作为功能强劲的AI智能体工具,虽具备强大的自动化执行能力,但直接部署面临权限过高、不符合生产环境安全要求的痛点。而夜莺MCP(管理控制平面)与Prometheus的组合,虽能实现监控数据的采集与可视化,却存在上下文交互Token消耗大、运维人员精力分散等问题。
1548 127
Ubuntu20.04实时显示CPU、内存、网速
Ubuntu20.04实时显示CPU、内存、网速
1845 0
Ubuntu20.04实时显示CPU、内存、网速
|
人工智能 运维 负载均衡
智能运维新时代:AI在云资源管理中的应用与实践
智能运维新时代:AI在云资源管理中的应用与实践
1322 23
Vue2信息提示(Modal)
这是一个基于 Vue3 的信息提示模态框(Modal)组件,提供了丰富的自定义属性,包括标题、内容、宽度、按钮文本等。它支持两种模式:确认提示框(confirm)和信息提示框(info),并有六种不同的展示效果。模态框可以水平垂直居中或固定高度水平居中显示,支持加载中状态。该组件模仿了 ant-design-vue 的样式,适用于各种场景下的信息提示。
506 1
Vue2信息提示(Modal)
|
传感器 监控 物联网
PWM在物联网中的应用
PWM(脉冲宽度调制)在物联网中广泛应用,通过控制信号的占空比来调节设备的工作状态,如LED亮度、电机速度等,实现高效、精确的控制,常用于智能家居、工业自动化等领域。
|
缓存 Java 数据库连接
MyBatis三级缓存实战:高级缓存策略的实现与应用
MyBatis三级缓存实战:高级缓存策略的实现与应用
570 0
MyBatis三级缓存实战:高级缓存策略的实现与应用
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
JSON 小程序 数据格式
【经验分享】支付宝小程序lottie动画尝鲜
【经验分享】支付宝小程序lottie动画尝鲜
766 6
|
存储 芯片 内存技术
考研计算机组成原理总结(4)
考研计算机组成原理总结(4)
1232 1
考研计算机组成原理总结(4)
|
存储 缓存 JavaScript
Vue Elementui+SpringBoot做大文件切片上传
Vue Elementui+SpringBoot做大文件切片上传
4645 0
Vue Elementui+SpringBoot做大文件切片上传