P2P DMA并不是所有场景都会有性能提升

P2P (Peer-to-Peer) DMA技术理论上可以带来性能提升,特别是在特定的工作负载和场景下。例如,当两个高速设备(如GPU与NVMe SSD)需要频繁进行大量数据交换时,通过P2P DMA,数据可以直接在设备间传输,无需经过CPU中转,这样可以减少数据在系统内存中的多次复制以及CPU上下文切换带来的开销,从而提高整体的数据传输效率和系统的吞吐量。

然而,并非所有情况下使用P2P DMA都会带来性能提升。以下几种情况可能会导致P2P DMA并不一定优于传统的CPU中转方式:

  1. 数据已经在页缓存中:对于已经存在于CPU页缓存中的数据,如果直接由CPU读取并发送至其他设备,由于不需要从存储介质再次读取,实际速度可能比P2P DMA更快,因为P2P DMA绕过了页缓存的优化机制。

此时,对于CPU中转I/O方式,首先通过pread()函数将数据读入CPU缓冲区,然后通过cudaMemcpy()将缓冲区内容复制到GPU。

这个性能差距的原因在于操作系统中的预读机制。该机制能透明地优化CPU中转I/O,而p2p则完全绕过了这一机制。操作系统会异步预取文件内容到页缓存中,使得从磁盘读取和CPU-GPU数据传输过程重叠进行。预取器逐步增加预取数据请求的大小,直至默认最大值512KB,从而实现了远高于p2p的SSD有效带宽,因为p2p执行的是短读操作。

对于复杂工作负载,当文件内容被缓存在页缓存中时(这在多个合作应用程序构成的复杂软件系统中经常发生),p2p仅在访问持久存储中的文件时效率较高,但其性能明显低于CPU中转I/O。

然而,由于页缓存的内容随工作负载动态变化,程序员在选择文件传输机制时没有绝对的最佳方案。例如,设想一个中央日志服务器接收来自其他机器通过网络发送的日志,并将其存储在本地。作为另一个应用运行的日志扫描器可能稍后分析这些日志来检测可疑事件。在这种流式工作负载场景下,使用p2p似乎是一个可行的选择。但如果扫描器在文件更新后立即调用,文件内容可能仍然保留在页缓存中,此时使用p2p会导致系统吞吐量降低

  1. 短小、零散的I/O操作:对于非常短小或随机的I/O请求,OS预读和写后处理等机制能够对CPU中转模式提供优化,而P2P DMA则可能由于每次DMA传输都需要额外的设置和管理开销,反而无法充分利用其优势。
  2. 硬件限制和兼容性问题:并非所有的PCIe设备都支持P2P DMA,且不同厂商之间的设备之间可能存在兼容性问题,这可能导致在启用P2P DMA时需要更多的驱动层复杂性和潜在的性能损失。
  3. 软件栈复杂性:采用P2P DMA时,应用程序和驱动程序必须正确地管理和配置DMA传输,包括地址映射、权限控制等,这些复杂度可能会抵消掉部分性能优势。

因此,是否采用P2P DMA应根据具体的应用场景和工作负载来决定,而非一概认为P2P DMA一定能带来性能提升。在实际应用中,要综合考虑硬件特性、操作系统行为、软件设计等因素,才能确保P2P DMA能发挥出应有的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/336871.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了,搭了个 Latex的环境,跟windows上一样好用。 选择了 Mactex 做编译,用 Texmaker 做编辑; 1. 下载与安装 1.1 Mactex 下载安装 MacOS 安装和示例 LaTex 的编译器 与 编辑器 编译器使用免费…

支付宝小程序开发踩坑笔记(支付宝、学习强国小程序)

1、接口请求安卓端回调 success,IOS 端回调 fail 原因:dataType 设置不对,默认是 json 格式,对返回数据会进行 json 解析,如果解析失败,就会回调 fail 。加密传输一般是 text 格式。 2、input 禁止输入空格…

Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS

# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…

代码随想录算法训练营第三天 | 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

链表理论基础 链表是一种通过指针串连在一起的线性结构,每一个节点由两部分组成,一个是数据域,一个是指针域(存放指向下一个节点的指针)。最后一个节点的指针指向 null。链表的存储方式:数组在内存中是连续…

深度强化学习Task2:策略梯度算法

本篇博客是本人参加Datawhale组队学习第二次任务的笔记 【教程地址】 文章目录 基于价值算法和基于策略算法的比较策略梯度算法策略梯度算法的直观理解策略梯度算法REINFORCE算法基于平稳分布的策略梯度算法REINFORCE算法实现策略函数设计模型设计更新函数设计 练习总结 基于价…

注解实现校验接口传参是否超出取值范围

文章目录 1、定义注解2、使用注解3、其余校验实现思路2.04、其余校验实现思路3.0 写接口,Dto里很多字段要检验传参范围,自定义个注解来校验。 1、定义注解 注解定义代码: import javax.validation.Constraint; import javax.validation.Con…

2023年12月 电子学会 青少年软件编程等级考试Scratch三级真题

202312 青少年软件编程等级考试Scratch三级真题 一、单项题 第 1 题 运行左图程序,想得到右图中的效果,红色框应填写的数值是?( ) A:12 B:11 C:10 D:9 第 2 题 下列…

网站转小程序系统,任意网址打包成小程序

源码介绍 将任意网站打包成小程序,只需简单修改域名,即可轻松实现!这一创新技术让您的网站内容在小程序平台上焕发新生。通过智能转换工具,您可以将任意网站迅速转化为小程序,无需繁琐的编码和开发工作。只需简单修改…

小程序学习-19

Vant Weapp - 轻量、可靠的小程序 UI 组件库 ​​​​​ Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装出现问题:rollbackFailedOptional: verb npm-session 53699a8e64f465b9 解决办法:http://t.csdnimg.cn/rGUbe Vant Weapp - 轻量、可靠的小程序…

微服务不死 — 共享变量在策略引擎项目的落地详解

01 背景 1、共享变量的提出 前段时间,来自亚马逊 Prime Video 团队的一个案例研究在开发者社区中掀起了轩然大波。大体是这样一件事,作为一个流媒体平台,Prime Video每天都会向客户提供成千上万的直播流。为了确保客户无缝接收内容&#xff0…

多人在线聊天交友工具,匿名聊天室网站源码,附带搭建教程

源码介绍 匿名聊天室(nodejs vue) 多人在线聊天交友工具,无需注册即可畅所欲言!你也可以放心讲述自己的故事,说出自己的秘密,因为谁也不知道对方是谁。 运行说明 安装依赖项:npm install 启动…

SpringBoot整合Dubbo和Zookeeper分布式服务框架使用的入门项目实例

文章目录 SpringBoot整合Dubbo和Zookeeper分布式服务框架使用的入门项目实例Dubbo定义其核心部分包含: 工作原理为什么要用dubbo各个节点角色说明:调用关系说明: dubbo为什么需要和zookeeper结合使用,zookeeper在dubbo体系中起到什么作用&…

Chatgpt+Comfyui绘图源码说明及本地部署文档

其他文档地址: ChatgptComfyui绘图源码运营文档 ChatgptComfyui绘图源码线上部署文档 一、源码说明 1、源码目录说明 app_home:app官网源码chatgpt-java:管理后台服务端源码、用户端的服务端源码chatgpt-pc:电脑网页前端源码cha…

论文阅读笔记AI篇 —— Transformer模型理论+实战 (四)

论文阅读笔记AI篇 —— Transformer模型理论实战 (四) 一、理论1.1 理论研读1.2 什么是AI Agent? 二、实战2.1 先导知识2.1.1 tensor的创建与使用2.1.2 PyTorch的模块2.1.2.1 torch.nn.Module类的继承与使用2.1.2.2 torch.nn.Linear类 2.2 Transformer代…

YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

一、本文介绍 本文给大家带来的改进机制是华为移动端模型Ghostnetv1,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。GhostNet的关键思想在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的…

一、用户管理中心——前端初始化

一、Ant Design Pro初始化 1.创建空文件夹 2.打开Ant Design Pro官网 3.打开终端进行初始化 在终端输入npm i ant-design/pro-cli -g 在终端输入pro create myapp 选择umi3 选择simple 项目创建成功后,在文件夹中出现myapp 4.安装依赖 使用vscode打开项目 …

Java学习笔记(八)——Lambda表达式

文章目录 Lambda表达式Lambda表达式的省略写法Lambda练习练习1练习2 算法题算法题1 斐波那契数列算法题2 猴子吃桃子算法题3 爬楼梯 Lambda表达式 Lambda表达式是JDK8开始的一种新语法形式。 基本作用:简化函数式接口的匿名内部类的写法。 注意: Lam…

lambda

文章目录 lambda 概述lambda的演变过程lambda 表达式的基本格式案例:调用接口里面的方法几种方式 lambda省略写法案例一:抽象方法一个参数抽象方法两个参数 啦么大 使用的注意事项啦么大 与 匿名内部类 lambda 概述 函数式编程思想 面向对象思想在乎的是…

Java 面向对象02 封装 (黑马)

人画圆:画圆这个方法应该定义在园这个类里面。 人关门:是人给了门一个作用力,然后门自己关上了门,所以关门的方法是在门的类里面 封装对象的好处: 调用Java自带的方法举例实现: 在测试类中,对其…

PDshell16逆向PostgreSQL 工程显示字段comment备注

现状:当刚逆向成功的表结构是没有原来表结构中的,comment备注如下 然后pd逆向工程的sql已经返回了这个备注的含义 解决方案: 1、设置显示注释列 tools——Display Preferences…如下 勾选-按照下面得方式勾选这三个 复制这里的VBS脚本&a…