cpu-architecture 相关问题

CPU或微控制器的硬件微体系结构(x86,x86_64,ARM,...)。

在RISC-V架构中,跳转指令(条件或JAL/JALR)是否会像其余指令一样将PC增加4?

我正在开发 RISC-V CPU 模拟器并已实现所有指令。问题是我不确定跳跃是否失败。这是我目前为 BGEU 实施的实施方案...

回答 1 投票 0

单循环法如何计算Tc?

考虑一个处理器在执行指令时会经历以下六个阶段 A栏 B栏 如果 120纳秒 ID 200纳秒 前任 150纳秒 先生 150纳秒 分子量 180纳秒 世界银行 250纳秒 找出总数

回答 1 投票 0

为什么需要内存别名?

我对ST微电子的这种架构设计感到困惑。 以STM32F407VG为例。程序加载到闪存的地址 0x08000000 处。该地址映射到地址 0x00000000 因为

回答 3 投票 0

了解 MIPS 中的 LW

$t2 的值是多少? 吕伊 $t1, 0 奥利 $t1, $t1, 16 LW $t2, 8($t1) 首先,我认为等式是 rs = 偏移量 + 基地址, 8 + 16 = 24。 然而,我的教授说这是错误的。 我……

回答 1 投票 0

获取 docker-entrypoint.sh:架构匹配时执行格式错误

我有以下 Dockerfile FROM --platform=$BUILDPLATFORM 节点:lts 工作目录 /usr/src/app 复制包*.json ./ 运行 npm 安装 复制index.js。 CMD [“节点”,“index.js”] 索引....

回答 1 投票 0

实现闭包和性能影响,例如相对与绝对跳跃

不久前,我在编译器类中学习了闭包转换,并且想知道调用闭包与调用函数会产生多少性能开销。 考虑一个函数

回答 1 投票 0

相对跳跃与绝对跳跃的表现

不久前,我在编译器类中学习了闭包转换,并且想知道调用闭包与调用函数会产生多少性能开销。 考虑一个函数

回答 1 投票 0

gem 如何决定安装哪个特定于 arch 的 gem?

例如;如果我想安装任何依赖于体系结构的 gem,例如 nokogiri(用于 ruby 的 xml 库),但对于任何依赖于体系结构的 gem,情况都是相同的。 我使用 x86 发行版,但是...

回答 1 投票 0

数据存储器和指令存储器是否位于数据路径L1缓存中?

在CPU数据路径中,有称为数据存储器和指令存储器的块? 这些块是 L1 指令和 L1 数据缓存吗? 例如,查看此链接中的图 4.10。 我们知道将军...

回答 1 投票 0

如何在 Logisim 中实现溢出标志而无需访问倒数第二个进位?

在 ALU 的图片中,我已经实现了计算零、负和进位标志的逻辑。但我无法弄清楚如何在不使用倒数第二个进位的情况下实现溢出标志(汽车...

回答 1 投票 0

确定 Linux 中二进制文件的目标 ISA 扩展名(库或可执行文件)

我们遇到一个与在具有 Via C3 处理器的 Advantech POS 板上(相当旧的)FC3 下运行的 Java 应用程序相关的问题。 java 应用程序有几个已编译的共享库,它们符合...

回答 6 投票 0

对于ARM来说,为什么单个STM指令通常比多个STR指令更快?

是否与某些预取技术有关? 还是具有DDR存取时序特性?

回答 3 投票 0

普通计算机都使用big endian编码吗?

我理解大端和小端。然而,我可以访问的所有计算机(AMD、Intel、Broadcom)的所有处理器都是小端字节序。这让我想知道是否有...

回答 1 投票 0

字节顺序取决于处理器还是内存?

Endianess 决定字中字节的顺序。让我们考虑以下几点 记忆系统: 所以这是一个字节可寻址的 32 位存储器。 如果我将十六进制值“val = 0x56789A”移动到 m...

回答 1 投票 0

导致该程序存储延迟的原因是什么?

给出以下 C 程序(MSVC 不会为我优化“工作”,对于其他编译器,您可能需要添加 asm 语句): #包括 #包括 给出以下 C 程序(MSVC 不会为我优化“工作”,对于其他编译器,您可能需要添加 asm 语句): #include <inttypes.h> #include <stdlib.h> #define SIZE 10000 typedef struct { int32_t a, b, c; } Struct; void do_work(Struct* data) { int32_t* a = malloc(sizeof(int32_t) * SIZE), * b = malloc(sizeof(int32_t) * SIZE), * c = malloc(sizeof(int32_t) * SIZE); int32_t* a_ptr = a, * b_ptr = b, * c_ptr = c; for (size_t i = 0; i < SIZE; i++, a_ptr++, b_ptr++, c_ptr++, data++) { *a_ptr = data->a; *b_ptr = data->b; *c_ptr = data->c; } free(a); free(b); free(c); } int main() { Struct* data = malloc(sizeof(Struct) * SIZE); for (size_t i = 0; i < SIZE; i++) { data[i].a = i; data[i].b = i; data[i].c = i; } for (int i = 0; i < 500000; i++) { do_work(data); } free(data); } (我在 Rust 中有一个类似的程序,具有相同的结论)。 Intel VTune 报告称,该程序有 63.1% 的内存限制和 52.4% 的存储限制,存储延迟为 26%。它建议搜索虚假共享,但我不明白这里怎么可能有虚假共享。没有并发性,所有数据都由一个核心拥有,访问模式应该很容易预测和预取。我不明白为什么 CPU 需要在这里的商店中停顿。 我认为也许三个分配的地址的低位和高位是相同的,这导致它们被映射到相同的缓存线,但我记得读到现代CPU不只是删除一些位来分配一个缓存行但可以进行更复杂的计算。 另一种想法是,也许在分配被释放后,CPU 仍然忙于刷新存储,并且在下一次运行中,分配器为它们分配了相同的地址(或接近的地址),这给 CPU 带来了问题,因为它已经在存储新数据之前等待。所以我尝试不释放分配,但这导致代码速度慢得多。 我使用的是 Windows 11、笔记本电脑 Intel Core i9-13900HX、32 个逻辑核心、8 个性能核心和 16 个高效核心。 最有可能是 int32_t * SIZE 调用中的 malloc。如果您使用像 SIZE << 2 这样的位移位,您的代码应该更快、更高效。

回答 1 投票 0

CPU乱序执行会影响C++中new运算符的顺序吗?

C++ 中的 new 运算符执行以下操作: 分配内存:它在堆上为单个对象或对象数组分配内存。分配的内存量足以容纳...

回答 2 投票 0

为什么 LLVM-MCA 会测量执行停顿?

考虑 LLVM MCA 文档中的以下说明 vmulps %xmm0、%xmm1、%xmm2 vhaddps %xmm2、%xmm2、%xmm3 vhaddps %xmm3、%xmm3、%xmm4 这些文档包含令人着迷的内容

回答 1 投票 0

CPU乱序执行会影响C++中new运算符的顺序吗?

C++ 中的 new 运算符执行以下操作: 分配内存:它在堆上为单个对象或对象数组分配内存。分配的内存量足以容纳...

回答 1 投票 0

为什么粗粒度多线程和细粒度多线程的管道约束不同?

在“计算机组织与设计:硬件/ 软件接口,第六版”David A. Patterson 和 John L. Hennessy 的 RISCV 版第 6.4 章,其中提到“粗粒度...

回答 2 投票 0

为什么x86-64(或其他架构)不实现除以10?

我熟悉编译器将除法和取模替换为常量(例如x/10),并乘以幻数(x * 0xcccccccd)>>(32 + 3)。编译器示例在这里。 移动$

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.