cpu-architecture 相关问题

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

确定 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

zgemv 与 dgemv/sgemv 的算术强度?

sgemv(或dgemv)的算术强度是在这组练习中推导出来的(https://florian.world/wp-content/uploads/FM-High-Performance-Computing-I-Assignment-1.pdf)成为: 0.5 / (1+c),其中...

回答 1 投票 0

当硬件预测不可用时,x86/ARM CPU 为何不停止对间接分支的推测?

正如英特尔优化手册中所述: 间接分支和调用的默认预测目标是 跌倒路径。如果并且当 硬件预...

回答 1 投票 0

有关寄存器行为的问题

我是一名刚接触verilog 和系统verilog 的工程师。我试图制作一个倾向于实现内存的模块。然而,该模块的行为并不是我所期望的。之后

回答 1 投票 0

关于verilog/system verilog中寄存器行为的问题

我是一名刚接触verilog 和系统verilog 的工程师。这是我第一次在这个网站上提问。我试图制作一个倾向于实现内存的模块。然而,这种行为...

回答 1 投票 0

为什么没有实现 DIV 指令来设置 CF 而不是引发异常

我知道在组装时必须非常小心,即: 这样做: 移动啊,10小时 移动,00h;股息 = 1000h 移动 bl,10 小时;除数 = 10h div...

回答 1 投票 0

RISVC 单周期处理器数据路径和测试平台

我将所有控制信号作为输入。我似乎无法正确连接所有内容。我需要我的波形配置看起来像参考波形,但不知何故我的波形最终以每个...

回答 1 投票 0

RISVC 单周期处理器数据路径和测试平台

在本实验中,假设您将所有控制信号作为输入。 我似乎无法正确连接所有内容。我需要我的波形配置看起来像这样,但我不知何故最终得到了一切......

回答 1 投票 0

为什么计算排序数组的直方图较慢?

考虑这段代码:https://godbolt.org/z/1331dbz8q 目标是对一个简单的直方图函数进行基准测试: [[gnu::noinline]] static void histogram(int const *a, int n, int *h) { 对于 (int i = 0; i ...

回答 1 投票 0

CPU进入保护模式后如何立即寻址下一条指令?

我一直在研究MIT6.828的Lab1。我对用于切换到保护模式的代码有疑问。 这是汇编代码 # 使用 bootst 从实模式切换到保护模式...

回答 1 投票 0

RISC-V SH 和 SB 指令是否允许与缓存通信?

sb、sh等risc-v指令是否允许访问缓存?还是直接与主存通信?我在主内存结构中见过 Wstrb 事件,但一般没有...

回答 1 投票 0

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