首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DMA、CPU 和 I/O 之间有什么区别?

问:DMA、CPU 和 I/O 之间有什么区别?

答:直接存储器存取:

代表直接内存访问,是一种硬件 IP,充当片上系统 (SOC) 中的主设备,提供一种无需使用 cpu 即可直接从/向物理内存读取/写入的方法,因此从根本上讲,它应该为软件提供一种并行访问的方法物理内存并从此类操作中卸载 CPU,但从硬件角度来看,在大多数情况下这是不可能的,因为总线互连在 SOC 中的所有主设备之间共享,并且调度哪个主设备将被授予访问权限,并且带宽取决于互连拓扑和哪个高手也给予更高的优先级。

从操作的角度来看,DMA 确实支持使用不同大小粒度访问物理内存,因此我们可以在 32 位系统中进行 8/16/32 位访问,甚至在 DMA 连接到的总线本身进行访问的情况下进行 64 位访问内存是64位地址宽度。

大多数现代 DMA 确实支持突发事务以加速写入操作,其中指定目标地址作为起始点,然后数据流开始从源地址传输到目标地址,而不需要增加地址并将其作为起始地址发送。从设备应该处理增量阶段,因此我们不会每次都重复由地址/数据/大小组成的事务序列,而是使用单个地址和数据流进行单突发传输。

DMA 可以在循环模式下运行,其中从源地址读取到目标地址的配置会一遍又一遍地重复,例如:

目的地 = 0x20001000

源代码 = 0x20002000

长度 = 16 字节

=> DMA 交易后我们将有

目的地 = 0x20001010

源代码 = 0x20002010

长度 = 0 字节

然而,在循环模式下,地址会由硬件自动包装,无需再次重新配置 DMA,这在循环模式下包装后可以节省一点时间:

目的地 = 0x20001000

源代码 = 0x20002000

长度 = 16 字节

重要提示:在支持虚拟寻址的系统中,为了在使用 MMU 的 CPU 和其他 I/O 管理器主机(例如 DMA)之间保持一致的视图,这些 I/O 管理器主机将使用 SMMU(ARM 命名)或 IOMMU,并且此处 DMA 将访问虚拟地址。地址空间不是物理地址空间。

中央处理器:

在片上系统中,CPU 是执行程序中指令集的主要单元,换句话说,没有 CPU 软件无法执行任何操作

CPU 是系统内的主设备,可以访问不同的片上系统组件,从标准外设到其他 I/O 管理器寄存器接口(如 DMA)以及系统内的不同存储器。

它内部由不同的硬件块组成,每个硬件块都有专用的子功能,解码器将解码获取的指令以实现要使用哪个 ALU 或其他 CPU 内部块,这里基于您的处理器的复杂程度,因此在应用程序一的情况下具有深度流水线阶段和乱序执行模型,那么很可能在解码阶段之后,指令将经过寄存器重命名阶段,然后以微操作形式保存到 OoO(乱序)缓冲区中,因为单个指令可能包含:子操作本身,因此它必须分解为 CPU 的 ALU 等可以理解和执行的更小的微操作。

我们还有 ALU(算术和逻辑单元)处理算术运算。

我们可以由单独的单元处理基于移位和二进制的操作。

还有其他高级模块,例如用于处理浮点操作的 FPU(浮点单元),以及用于数字处理的 DSP,用于创建内存区域并限制对这些地址的访问的内存保护单元,用于中断管理的中断控制器,MMU(内存)管理单元)来处理虚拟地址和物理地址之间的映射,但是这些块更多的是核心本身的包装器,并且大多数时候是可选的,因此可以在没有这些块的情况下合成处理器。

cortex-m3 的通用框图如下:

所以我们可以看到我们有主要的核心和硬件块的整个包装器来添加额外的功能,包括调试执行代码、内存保护单元、代码接口的可能性。

输入/输出:

这里取决于你所说的 I/O 到底是什么意思,无论是具有 I/O 接口连接的外设、I/O 管理器还是纯 I/O 接口(例如允许芯片输出信号和接收信号的 GPIO 模块)。

如果我们采用最新的假设,那么 I/O 就是允许系统输出信号和接收输入信号的硬件块。

该模块本身可以在独立模式下使用,其中它有自己的寄存器接口,可用于切换引脚或报告引脚的状态(如果它正在采样某些输入信号,则状态将在高和低之间切换) ,还允许使用外部上拉或下拉配置引脚。

I/O 块最有趣的地方在于它可以连接到其他系统外设,从而允许多种用例,因此可以连接到 SPI/I2C/UART/USB 等通信外设……。允许系统发送和接收数据

它可以连接到其他数字输入/输出模块,例如定时器,允许定时器输出 PWM 信号或确定输入信号的频率。

允许系统从低功耗模式唤醒,以防输入引脚之一接收到 I/O 块内该引脚的相应信号连接到 cpu 的唤醒输入。

当在上面添加一些存储器和总线互连时,上述块可以形成基本的片上系统设计。

下面是包含这些块的片上系统示例:

问:CPU如何在高速缓冲存储器中查找数据?

答:相反,CPU 使用我们所说的“缓存行”来查找存储数据的特定位置。有点像通往宝藏的秘密地图——但速度更快!

CPU 为每个小数据块都有一个“门”(我在这里谈论的是我们的朋友“内存地址”)。当 CPU 需要特定的信息时,它会立即访问高速缓存并检查数据是否“驻留在”那里。这种检查被俗称为“缓存命中”。

现在,如果我们的 CPU 伙伴在缓存中找不到数据(这种情况称为“缓存未命中”),请不要惊慌,因为它有一个备份计划 - 它会进入主内存!这就是 CPU 在高速缓存中寻找游戏的基本方式和原因。

问:系统还原可以恢复已删除的文件吗?

答:系统还原来恢复文件?当您的电脑决定发脾气时,它是您的救星。但它会恢复您删除的文件吗?不,铁子。它真正的魔术是倒回系统更改。可以将其视为计算机系统文件的个人时间机器。因此,如果您的电脑遇到了软件卡顿的问题,这个虚拟文档可以解决问题。

但是,你的个人文件呢?他们不在其雷达范围内。系统还原不会恢复您不小心损坏的即将完成的伟大美国小说的章节。真的对删除的文件感到沮丧吗?你最好的选择是文件恢复软件.

或者,如果你是一个真正的聪明人并设置了它——备份

问:磁盘能够存储信息数十亿年吗?

答:是的。人们发明了一种小光盘,可以在很小的空间内存储高达 360 TB 的数据,存储时间预计长达数十亿年。

使用持续十万亿分之一秒的强脉冲激光,科学家能够以小孔的坐标、大小和方向的形式将数据记录到石英玻璃盘中。每个孔有 5 条信息,因此被称为 5D 光存储。

这些光盘中编码了各种人类作品,包括《世界人权宣言》、《大宪章》、《圣经》和艾萨克·牛顿的著作。

该系统具有极高的弹性和高存储容量,但写入和读取困难且昂贵,不会取代当今消费电子产品中使用的系统。还因为一旦切开,就无法修改。

鉴于其使用寿命长且能够承受数千度的温度,它们更适合用作紧急备用设备。

使用光学显微镜和偏光镜读取光盘比在其上写入更容易,因此将来该技术可以在只需要读取信息的图书馆和档案馆中找到应用。

问:什么是机器学习中的数据增强?

答:在机器学习中,数据增强是一种用于增加训练数据量和改善模型性能的技术。它通常用于监督学习任务,如图像分类、目标检测和自然语言处理等领域。数据增强的核心思想是通过对原始训练数据进行一系列随机变换或扩展,生成新的训练样本,从而使模型更加稳健和泛化能力更强。

以下是数据增强的一些常见方法和示例:

1.图像数据增强:

随机裁剪:随机裁剪图像的一部分,以不同的尺寸和位置。

翻转:随机水平或垂直翻转图像。

旋转:随机旋转图像一定角度。

缩放:对图像进行随机缩放。

调整亮度和对比度:对图像的亮度和对比度进行随机调整。

2.文本数据增强:

同义词替换:用文本中的同义词替换部分单词。

随机插入或删除单词:在文本中随机插入或删除一些单词。

重排句子顺序:将文本中的句子顺序打乱。

字符级扰动:对文本中的字符进行随机替换或扰动。

3.音频数据增强:

加噪声:向音频信号中添加随机噪声。

时间伸缩:加速或减缓音频的播放速度。

随机剪切:随机选择音频片段。

变调:随机改变音频的音调。

数据增强的主要目标是帮助模型更好地泛化到未见过的数据,并减轻过拟合的风险。通过引入多样性和噪声,模型可以更好地捕捉数据的不确定性和多样性,从而提高性能。数据增强在深度学习中广泛应用,特别是在数据有限的情况下,它可以显著提升模型的性能。

问:是什么决定了高速缓存中存储哪些数据,是操作系统、CPU 还是高速缓存本身?

答:高速缓存中存储哪些数据由高速缓存本身的硬件和控制逻辑来决定,而不是由操作系统或CPU来控制。高速缓存是CPU内部或位于CPU芯片上的一种硬件组件,其设计和管理是由计算机架构的设计者和制造商负责的。

高速缓存的主要功能是存储最常用的数据以提高内存访问速度。高速缓存通常分为多个层级(例如L1、L2、L3),每个层级有不同的容量和访问速度。高速缓存中的数据通常以缓存行或缓存块的形式存储,每个缓存行可以包含多个数据项。

高速缓存的工作方式通常是按照一定的缓存替换策略(例如最近最少使用(LRU)或随机替换)来管理数据的存储。当CPU访问内存时,会首先检查高速缓存中是否存在所需数据。如果数据在高速缓存中找到(缓存命中),CPU可以快速获取数据,从而提高性能。如果数据不在高速缓存中(缓存未命中),CPU必须从主内存中获取数据,这会导致额外的延迟。

操作系统通常不直接管理高速缓存的内容,但它可以通过操作系统调度程序的方式影响缓存的性能。例如,操作系统的进程调度策略可以影响CPU内部高速缓存的有效性,因为不同的进程可能会导致高速缓存中的数据被刷新或替换。此外,操作系统可以提供一些API或机制,允许应用程序开发人员显式地控制某些缓存行为,如缓存刷新或缓存不一致性。

总之,高速缓存的内容和管理由硬件和架构设计决定,操作系统和应用程序通常无法直接控制高速缓存中存储哪些数据,但它们可以通过影响CPU行为来间接影响缓存的性能。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O7KAiCGjl_KUKY5G3kxd-iWQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券