cpu-architecture相关内容

双核处理器究竟是什么?

我曾多次提到双问题处理器的概念(我希望这甚至可以在句子中说得通).我找不到任何关于双重问题究竟是什么的解释.谷歌给了我微控制器规范的链接,但这个概念没有在任何地方解释.以下是此类参考的示例.我找错地方了吗?简要说明它是什么会非常有帮助. 解决方案 双重问题意味着每个时钟周期处理器可以将两条指令从流水线的一个阶段移动到另一个阶段.发生这种情况的地方取决于处理器和公司的术语:这可能意味着两条指 ..
发布时间:2021-11-17 22:04:32 其他开发

存储到内存和从内存加载是如何工作的;存储 32 位字时哪些地址会受到影响?

我正在从事一个二进制分析项目,我正在构建一个将程序集转换为 llvm 的提升器.我构建了一个内存模型,但对 str 和 ldr arm 汇编指令如何在内存上工作感到有些困惑.所以我的问题是.给定一个内存地址 0000b8f0 例如,我想在其中存储 64 位十进制值 20000000. str 指令是将整个 20000000 存储在地址 0000b8f0 中还是将其分成多个字节并将第一个字节存储在 ..
发布时间:2021-11-17 21:58:31 其他开发

ARM:为什么立即数常量只有 12 位?

这是什么意思:我只有 12 位的立即数,所以我可以只表示 0 到 2^12 = 4096 的立即数吗?操作数 2 ,如果它是一个寄存器,可以有 32 位,但为什么立即常量只有 12 位?这个数字是从哪里来的? 解决方案 它由指令集定义.例如.MOV 指令被编码为 31 28 |27 26 |25 |24 23 22 21 20 |19 16 |15 12 |11 0 |条件 |0 0 | ..

ARMv4/5/6 代码的哪些部分不能在 ARMv7 上运行?

据我了解,ARMv7 处理器(例如 Cortex-A9)大多向后兼容旧 ARM 架构版本的代码.但是,我已经阅读了尝试在 Cortex-A8 上运行 ARM9 代码的段错误的报告,例如. ARMv4/5/6 (ARM7TDMI/ARM9/ARM11) 代码的哪些部分不能在 ARMv7 处理器上运行?这些较旧的 ARM 架构版本中存在哪些功能或架构特征会导致为这些版本构建的程序在 ARMv7 ..

是因为 cpu 乱序执行还是因为缓存一致性问题需要内存屏障?

我想知道为什么需要内存屏障,我已经阅读了一些关于这个主题的文章. 有人说是因为cpu乱序执行而 其他人说是因为缓存一致性问题导致存储缓冲区和队列失效. 那么,需要内存屏障的真正原因是什么?cpu乱序执行还是缓存一致性问题?或两者?cpu乱序执行和缓存一致性有关系吗?x86 和 arm 有什么区别? 解决方案 当 ISA 的内存排序规则弱于您的算法所需的语义时,您需要屏障来排序此核心/线 ..
发布时间:2021-11-17 21:55:01 其他开发

数据缓存和指令缓存是什么意思?

从这里: 指令和数据有不同的访问模式,访问不同的内存区域.因此,两者都拥有相同的缓存说明和数据可能并不总是有效. 因此,有两个缓存是很常见的:一个指令缓存只存储指令,一个只存储数据的数据缓存. 知道指令和数据之间的区别很直观,但现在我不确定在这种情况下的区别?什么构成数据并放入数据缓存,什么构成指令并放入指令缓存? 我知道 ARM 汇编.任何需要 STR、LDR、LDMF ..
发布时间:2021-11-17 21:49:54 其他开发

Raspberry Pi 1 和 2 中 ARM11 和 Cortex-A7 内核的每个周期峰值 FLOPs

我想知道 Raspberry Pi 1 中的 ARM1176JZF-S 内核和 Raspberry Pi 2 中的 Cortex-A7 内核的每个周期峰值 FLOP. 来自 ARM1176JZF-S 技术参考手册 似乎 VFPv2 可以每个时钟周期做一个 SP MAC,每隔一个时钟周期做一个 DP MAC.此外,还有三个可以并行运行的管道:MAC 管道 (FMAC)、除法和 sqrt 管道 ..
发布时间:2021-11-17 21:48:44 其他开发

能否制造出支持多个 ISA 的处理器?(例如:ARM + x86)

英特尔自 Skylake(?) 架构以来一直在内部将 CISC 指令解码为 RISC 指令,而 AMD 自其 K5 处理器以来一直在这样做.那么这是否意味着 x86 指令在执行过程中被转换为一些奇怪的内部 RISC ISA?如果这是正在发生的事情,那么我想知道是否有可能创建一个能够理解(即在内部转换为自己的专有指令)x86 和 ARM 指令的处理器.如果可能的话,性能会是怎样的?为什么还没有完成? ..
发布时间:2021-11-17 21:44:52 其他开发

ARM 的 MOV 指令如何以大数作为第二个操作数?

刚开始学习ARM汇编语言,不清楚如何使用MOV将立即数转入寄存器. 从ARM参考手册和我的教科书中,都说MOV指令后面的立即数范围是0-255.但是当我在自己的 PC 上使用 ADS 1.2 IDE 进行测试时,说明 MOV R2, #0xFFFFFFFF 表现良好.根据规范,数字 0xFFFFFFFF 是否超出范围? 解决方案 请记住,作为包含在 ARM 操作码中的桶形移位器的 ..

如何区分指令和数据?

在阅读ARM核心文档时,我有这个疑问.CPU如何区分读取的数据和数据总线,是作为指令执行还是作为可以操作的数据? 参考文档摘录—— "数据进入处理器内核通过数据总线.数据可能是执行指令或数据项." 在此先感谢您的启发!/MS 解决方案 每个操作码将包含一条 N 字节的指令,然后期望后续的 M 字节是数据(内存指针等).因此 CPU 使用每个操作码来确定以下字节中有多少是数 ..
发布时间:2021-11-17 21:38:24 其他开发

如何通过按顺序提交进行加载-> 存储重新排序?

ARM 允许使用后续存储重新排序加载,因此以下伪代码: //CPU 0 |//CPU 1温度0 = x;|温度 1 = y;y = 1;|x = 1; 可能导致 temp0 == temp1 == 1(并且,这在实践中也是可以观察到的).我无法理解这是如何发生的;似乎按顺序提交会阻止它(据我所知,几乎所有 OOO 处理器中都存在这种情况).我的推理是“负载在提交之前必须有它的值,它在存 ..
发布时间:2021-11-17 21:37:22 其他开发

是否有任何现代 CPU 的缓存字节存储实际上比字存储慢?

这是一个常见的声明 将字节存储到缓存中可能会导致内部读取-修改-写入周期,或以其他方式损害吞吐量或延迟,而不是存储一个完整的寄存器. 但我从未见过任何例子.没有 x86 CPU 是这样的,我认为所有高性能 CPU 也可以直接修改缓存行中的任何字节.如果某些微控制器或低端 CPU 有缓存,它们是否有所不同? (我不计算字可寻址机器,或者是字节可寻址但缺少字节加载/存储指令的 Alpha. ..
发布时间:2021-11-17 21:37:00 其他开发

x86 和 x64 共享指令集?

我不知道 32 位应用程序如何在 64 位操作系统上运行. 我的理解是 32bit/64bit 是指寄存器大小.指令集应该不同,因为它们有不同大小的寄存器. 但我知道有 x86-64 指令集,它是 x86 指令集的 64 位版本. 我们可以在 64 位操作系统上运行 32 位应用程序的原因是因为 x86-64 吗? 如果是这样,为什么 32 位应用程序有时在 64 位窗口中 ..
发布时间:2021-11-17 02:53:35 其他开发

别名的定义/含义?(CPU 缓存架构)

我对CPU 缓存和物理地址之间的“别名" 的含义有些困惑.首先我在维基百科上找到了它的定义: 然而,VIVT 存在别名问题,其中多个不同的虚拟地址可能引用同一个物理地址.另一个问题是同音异义词,即同一个虚拟地址映射到几个不同的物理地址. 但是过了一会儿我在演示文稿中看到了不同的定义(ppt)DAC'05 的:“用于嵌入式处理器的高能效物理标记缓存虚拟内存" 缓存别名和同义词: ..
发布时间:2021-11-17 02:28:40 其他开发

64位系统的优点

从开发人员的角度,我想了解 64 位系统的卖点是什么? 我知道您可以使用更多寄存器,可以为进程分配更多内存,但我不明白是什么让开发人员的生活更轻松.有什么例子吗? 从性能的角度来看,如果程序在 32 位和 64 位上运行,是否有任何收益? 干杯! 编辑:感谢您的所有回复.我看到一些针对最终用户体验的对话,尽管它可能很重要......我更多地关注您可以挤出的任何架构优势. ..
发布时间:2021-11-17 02:03:39 C/C++开发

在 32 位 CPU 上,“整数"类型是否比“短"类型更有效?

在 32 位 CPU 上,一个整数是 4 个字节,一个短整数是 2 个字节.如果我正在编写一个使用许多数值的 C/C++ 应用程序,这些数值总是适合提供的短整数范围,使用 4 字节整数还是 2 字节整数更有效? 我听说 4 字节整数更有效,因为这适合从内存到 CPU 的总线带宽.但是,如果我将两个短整数相加,CPU 是否会将这两个值并行打包一次(从而跨越总线的 4 字节带宽)? 解决方 ..
发布时间:2021-11-17 01:42:32 其他开发

什么是存储缓冲区?

谁能解释什么是加载缓冲区以及它与失效队列有何不同.以及存储缓冲区和写入组合缓冲区之间的区别?保罗 E 麦肯尼的论文 http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2010.07.23a.pdf 很好地解释了存储缓冲区和失效队列,但不幸的是没有谈论写入组合缓冲区 解决方案 无效队列更像是存储缓冲区,但它是内存系统的一部分 ..
发布时间:2021-11-17 01:41:36 其他开发

在计算机中使用 32 位或 64 位处理器,为什么不使用 40 位或其他数字?

例如,在 32 位处理器的情况下,一个字的长度为 4 字节.是否也可以使用 5 字节字或其他? 解决方案 是否也可以使用 5 字节的字或其他 是的.您甚至可以通过位字段只使用几个位而不是整个字节/字.从技术上讲,编译器可以在任何架构上支持任何整数大小,例如 16 位计算机上的 12 位、30 位或 96 位 int.事实上,Clang 刚刚为具有任意位宽的整数提供了一个新的扩展名 ..
发布时间:2021-10-26 16:11:12 其他开发

Docker 和 -march 本机

我的应用程序从使用 -march native 运行时 gcc 可以访问的高级 CPU 功能中受益匪浅.Docker 可以平滑操作系统的差异,但它如何处理不同的 CPU?要构建一个可以在任何 CPU 上运行的应用程序,我必须为 amd64 构建,这会损失很多性能.当应用程序需要针对每个 CPU 架构单独编译时,有没有好的分发 Docker 镜像的方法? 解决方案 Docker 根本不处理 ..
发布时间:2021-09-29 19:47:01 其他开发

是 mov rax,0x12345678;jmp rax 仍然会杀死分支预测?

我无法找到上述两种情况的特定信息,尽管听取了您的专家意见. 第一件事是:我知道间接 jmps 会损害分支预测,即使间接的结果是常数,它仍然需要预测维护缓冲区和东西,所有这些都与绝对 jmp 相比. 我的问题是,如果有人知道: mov rax, 1234567812345678h;jmp rax; 处理器的分支预测器仍然认为是间接的,或者在这种情况下它会做数学运算吗..我这样做是因为 ..