避不开的数据拷贝(2)

接着上周未完的话题 避不开的数据拷贝。

既然处理器是通用机器,就没有专属数据,所以数据都要从别处调来,这就涉及到了数据搬运,就有了外设的概念。由于不同外设和处理器一起共享数据存储,时间会花在两方面:

  • 时间会花在检索自己需要的数据上,这是算法和数据结构的领域;
  • 时间会花在数据搬运上,这是拓扑,总线,网络,协议的领域;

“尽量不拷贝” 和 “尽量不传输数据” 都是尽量不移动数据的实例,而不是醉心于让拷贝和传输变得更快。为了不移动数据却又能使用数据,要将思路转换为传递控制信号或直接传递结果,让数据保持在 “原地”。 这需要更多的通路组织更智能的网络。

近年来如日中天的零拷贝,设备内存,片商存储等概念值得一提,但在软件领域,其实人们一直在恪守这些信念。不外乎两个观点:

  • 内存观点,固定 buffer,比如统一往一个 buffer-ring 里送;
  • 程序观点,离散 buffer,比如将离散的 buffer 串成一个 queue;

在这里插入图片描述

总之都是数据能不动就不动,实在要动就少动,如果有谁写了一个程序,频繁做 memcpy,势必要被优化掉,不管是针对程序,还是针对人。

可以审视从初学编程到使用 Linux 内核的 splice/tee,基本就是上图的过程,从一开始果真把 queue 当成一个实体 queue,copy 内存往里排队,到最后直接在两个 fd 之间非 copy 传递数据,见证了逐渐让数据不移动的过程。

同理,当外设能力反超 CPU,而软件成为瓶颈后,外设硬件当然要走一遍同样的路,近年来的 Device Memory TCP 就是其中一例:
在这里插入图片描述

其它实例几乎同理。

还有一个问题,如果必须要搬运,数据搬运过程中为什么需要 buffer,为什么不能一镜到底,推而广之,为什么要接力,转介。这就要说到通用计算机处理数据的两类方式:

  • 流水线提高吞吐;
  • 并行化提高吞吐;

总之要有资源,且要资源全部动起来,这是一种通用资源组织理念,无论对硬件还是软件。

本质上还是因为通用机器以数据为中心,通用机器的数据都从别处搬来,效率高低取决于搬运的方式,如果有搬运和处理部件闲置,就一定要想办法将它用起来。
定量讲,如果增加一倍的通用处理资源,理论上应该增加一倍的吞吐。举例说明,将数据从 A 搬到 B:
在这里插入图片描述

可见并行方式就是一镜到底,这并不是问题的核心所在。问题的核心在于分割时间还是分割空间,本质上还是如何在时空展开的问题,这就涉及到数据的语义。

如果数据是严格保序的,通用机器需无条件满足该约束,典型例子是通用处理器,即 CPU,它的处理资源必须在时间维度分割成流水线,作为数据的串行指令在其中接力通过。另一个对面的例子,内存数据是不保序的地址映射,因此它是并行结构,每一个 bit 都有一条地址线和数据线传输该 bit,这些线在空间维度并在一起。

这样看来,串行指令通过流水线执行,而数据则通过并行通道映射到目的地,似乎一想就通,但当真正传输数据而不仅仅是内存和 CPU 交互时,却纷纷拒绝并行,接受 stream 抽象,分层模型下 “纵然在 byte 级别存在 byte stream,但在 bit 级别依然并行传输” 的内存操作,等价为 “纵然在 byte 级别存在 byte stream,但在 packet 级别依然并行传输” 被忽视,也许是 packet 出现在 byte stream 之后,IP 从 TCP 分离而来之故,但 PCIe,USB 也是串行。

否则,若信道不识 stream,像内存地址般映射,并行传输就是自然而然的选择。

现如今,除了内存,芯片内部总线采用并行策略外,几乎都选择了串行,从大尺度的 TCP/IP,到微尺度的 PCIe,明确的理由似乎又要回到早期串行,并行之争里去寻址,不外乎:

  • 并行信号时钟同步困难,时钟偏移,线路干扰,布线成本高;
  • 串行时钟精准同步,抗干扰强,线路少,成本低,适合长距离;

把这些往大尺度 TCP/IP 延申,也能解释 MPTCP 的实现粒度为什么做不细,本质上是一回事。所以,最终的通用策略是:

  • 传输网络以并行的方式构建,业务数据在其特定的某条路径上串行传输。

但这只是通用策略,值得注意的是例外,若并行劣势均克服,串行就没优势了,这也是我认可数据中心网络并行多路径传输的原因:

  • 拓扑规则,ECMP 路径一致,RTT 短,同步存储开销小,负载分担,拥塞均衡。

总之,数据中心传输可像内存和内部总线那般并行,但其它场景不具备这特征,不管是广域网,USB,PCIe,还是 nvlink。更微观意义上,串行并行依然保持着嵌套,PCIe,nvlink 虽串行,但它们均采用多通道并行捆绑实现更高的带宽,整个数据搬运结构在全局看来依然维持着规整。

尽量不搬运数据,非要少量搬运,上面介绍了如何高效搬运。进一步优化思路就很明确,像以往专用设备那样独占数据,让数据和处理一体化,就滑向跷跷板的另一端了。

浙江温州皮鞋湿,下雨进水不会胖。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四届蓝桥杯青少年组省赛 编程题真题题解

明天我就要考蓝桥杯省赛了,本蒟蒻已瑟瑟发抖,所以现在写一篇文章。 题目分别为: 1.​​​​​​B4270 [蓝桥杯青少年组省赛 2023] 特殊运算符 2.B4271 [蓝桥杯青少年组省赛 2023] 四叶玫瑰数 3.B4272 [蓝桥杯青少年组省赛 2023] 质因数的…

ThingsBoard配置邮件发送保姆级教程(新版qq邮箱)

一:登入qq邮箱(点击登入) 二:点击右上角设置 三:点击账号与安全 四:点击安全设置 检查POP3/IMAP/SMTP/Exchange/CardDAV 服务有没有开启如果没有按照引导进行开启,如果已开启点击生成授权码 按提示发送短信 五:复制授权码 六:登入系统管理员…

《光刻胶技术:原理、材料与应用》——光刻曝光技术及1纳米以下光刻技术路线设计

目录:一、光刻曝光核心控制参数和工艺条件二、光刻曝光剂量的精确控制三、投影式光刻焦距和焦深的精确控制新技术四、投影式光刻曝光前烘质控要点及对曝光过程的影响五、后烘工艺质控制要点及对曝光质量的影响和瑕疵纠正六、投影式光刻曝光的化学过程及对光刻胶的具…

Harbor 企业级实战:单机快速上手 × 高可用架构搭建 × HTTPS安全加固

文章目录一、建立项目二、命令行登录harbor(配置在客户端即可)三、给本地镜像打标签并上传到harbor四、下载harbor的镜像五、创建自动打标签上传镜像脚本六、修改harbor配置七、实现harbor高可用7.1 安装第二台harbor主机7.2 新建目标,输入第…

原创邮件合并Python工具使用说明(附源码)

一、软件概述邮件合并Python工具是一款专为办公场景设计的自动化文档处理工具。该工具能够高效地将Excel表格中的批量数据自动填充到预定义的Word模板文档中,完美解决了WPS办公软件中邮件合并功能缺失的问题。应用场景批量生成个性化邀请函、通知书自动化制作员工工…

数据结构(9)——排序

文章目录 目录 文章目录 前言 一、排序的概述 1.1排序相关概念 1.2常见的排序算法 二、排序的实现 2.1插入排序 2.2希尔排序 2.3选择排序 2.4堆排序 2.5冒泡排序 2.6快速排序 2.6.1霍尔版本 2.6.2填坑版 2.6.3前后指针版 2.6.4非递归版 2.6.5小区间优化 2.7归并排序 2.7.1非递归…

drippingblues靶机教程

一、信息搜集首先将其在VirtualBOX中安装,并将kali与靶机都设置为桥接模式紧接着我们扫描IP,来发现靶机地址,经过搜集,发现IP是192.168.1.9,我们去访问一下紧接着我们扫一下开放了哪些端口。发现开放了21、22以及80端口…

微软发布Project Ire项目:可自主检测恶意软件的人工智能系统

微软Project Ire项目利用AI自主逆向工程并分类软件性质微软近日公布了Project Ire项目,这是一个能够自主进行逆向工程并分类软件性质的人工智能(AI)系统。该系统由大型语言模型(LLM)驱动,通过使用反编译器等…

Nodejs》》Express》》模板引擎 express-art-template

art-template 、express-art-template 区别 art-template Express 的模板引擎 art-template express-art-template官网 # 安装npm install art-template express-art-template# 应用# view engine setup,这是关键的代码,第一个参数表示将使用模…

基于STM32H5的非循环GPDMA链表使用

0 说明 硬件平台:STM32H503RBT6 HAL库版本:STM32Cube_FW_H5_V1.3.01 GPDMA链表介绍 STM32H503的GPDMA支持直接编程和使用链表2种方式,直接编程也就是我们常用的DMA使用方式,通过指定目标地址、源地址然后进行单次或循环DMA处理。而使用链表则可以大大提高使用DMA的灵活性…

windows下使用nvm安装nodejs的版本问题

最近学习了一个开源项目,用的是vue2vue CLI 版本算是比较老了,其中有一个依赖node-sass 使用高版本的node安装各种问题,尤其是node-sass还依赖python的运行环境进行编译。开始使用的是nvm的最新版本 安装的node版本,但是高版本的n…

第05章 排序与分页

1.排序数据 1.1 排序规则 1.2 单列排序 1.3 多列排序 2.分页 2.1 背景 背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢? 背景2:表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢? 2.2 实现规则 分页原理:所谓分页显示,就是将数据…

创建MyBatis-Plus版的后端查询项目

记得编码和maven库的检测&#xff01;&#xff01;&#xff01; 1、maven库导入包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…

Vulnhub----Beelzebub靶场

1.用kali作为攻击机 查找靶机的ip kaili和靶机都设为NAT模式 nmap -sn 192.168.51.0/24 2.扫描端口 nmap -p- 192.168.51.133 3.访问页面 4.扫目录 dirsearch -u http://192.168.51.133 5.访问index.php 查看源代码 6.将beelzebub用md5加密一下 d18e1e22becbd915b45e0e655…

极限相关的练习题

文章目录绪论具体内容130129128127126绪论 数学强化真的强度挺大&#xff0c;刷题稍微让人有点疲劳&#xff0c;所以写一写笔记&#xff0c;让自己找到一点正反馈&#xff0c;另外&#xff0c;也算是总结一下&#xff0c;总结总归是有点用处的吧。争取九月份结束强化&#xff…

n8n 入门指南:更适合跨境出海搞钱的AI智能体

如果你最近刷到 AI 圈的分享应该会发现——n8n 又火起来了。其实 n8n 早在 2020 年左右就被程序员玩过一波&#xff0c;当时很多人拿它做网站自动发邮件、消息转发之类的“流程自动化”。但那时候 AI 还没这么卷&#xff0c;大家也没觉得多有用。n8n为什么最近又翻红&#xff1…

疏老师-python训练营-Day40训练和测试的规范写法

浙大疏锦行 知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测…

rosrun 和 roslaunch 区别

在 ROS&#xff08;机器人操作系统&#xff09;中&#xff0c;rosrun 和 roslaunch 是两个常用的命令行工具&#xff0c;用于运行节点和管理 ROS 程序&#xff0c;但它们的功能和使用场景有明显区别&#xff1a; rosrun 功能&#xff1a;用于启动单个 ROS 节点 特点&#xff1a…

力扣(删除有序数组中的重复项I/II)

在 LeetCode 的数组类题目中&#xff0c;有序数组去重是经典且高频的题型 。今天我们聚焦 删除有序数组中的重复项&#xff08;题号 26&#xff09; 和 删除有序数组中的重复项 II&#xff08;题号 80&#xff09; &#xff0c;用双指针技巧优雅解决&#xff0c;带你理清解题思…

istio笔记03--快速上手多集群mesh

istio笔记03--快速上手多集群mesh介绍安装部署1. 部署集群2. 部署 metallb3. 安装istio4. 配置mesh验证注意事项说明介绍 作为当前最流行的服务网格产品&#xff0c;istio已经在很多企业内部投入使用。在企业中为了提高服务的高可用、故障转移等能力&#xff0c;通常需要打通几…
推荐文章