如何将结构显式加载到L1d缓存中?在带/不带超线程的隔离内核上使用CR0.CD=1的INVD出现奇怪的结果

问题描述我的目标是将静态结构加载到L1D缓存中。之后,使用这些结构成员执行一些操作,并在操作完成后运行invd以丢弃所有修改后的高速缓存线。因此,基本上我希望在缓存中创建一个安全的环境,以便在缓存中执行操作时,数据不会泄漏到RAM中。为此,我有一个内核模块。在那里我给结构的成员设

发布:2022-10-16 标签:x86ccpu-architecturelinux-kernelcpu-cache


如何查看最后一级缓存中有多少片?

问题描述我在一篇论文中读到关于末级缓存的介绍。在引言中,有人说末级缓存有很多片。每个片就像一个传统的集关联缓存。根据集合索引和切片ID找到对应的缓存集合(如下图所示)。我想检查我的服务器有多少个切片。以及每个片的信息(多少个缓存组、每个缓存组中有多少缓存行)。我在Google上搜

发布:2022-10-16 标签:cachingx86intelcpu-architecturecpu-cache


如何在计算MIPS时去掉赫兹?

问题描述我正在学习计算机结构。我有一个关于MIPS的问题,这是计算CPU执行时间的方法之一。MIPS公式如下。并且如果时钟频率为4GHz并且CPI为1。我认为MIPS是4000赫兹。因为它是4*10^9*Hz/1*10^6。我不知道保留单位赫兹是否正确。推荐答案对于任何数量,了解

发布:2022-10-16 标签:mathcomputer-sciencecpu-architecture


数据依赖与控制依赖的区别

问题描述我很难理解数据依赖和控件依赖之间的区别。我看到的一个例子是:数据依赖例如,指令使用另一条指令创建的数据控制相关性例如,指令等待更新的注册表进行比较我很难理解的是,例如在BEQ中,我等待寄存器更新,但我也依赖他的数据。所以我不知道如何区分它们之间的区别。推荐答案指令等待更新

发布:2022-10-16 标签:dependenciespipelinecpu-architecturebranch-predictioninstruction-reordering


有多少数据加载到L2和L3缓存中?

问题描述如果我有这个类:classMyClass{shorta;shortb;shortc;};我让下面的代码对上面的内容执行计算:std::vector<MyClass>vec;//for(autox:vec){sum=vec.a*(3+vec.b)/vec.c;}我知道CPU

发布:2022-10-16 标签:cachingperformanceoptimizationcpucpu-architecture


为什么有些算术指令有带符号/无符号的变体,而有些没有

问题描述假设我们有:a=0b11111001;b=0b11110011;如果我们手写Addition和Multiplication,我们就会得到这个结果,我们不在乎它是否签名:a+b=111101100a*b=1110110001011011我知道乘法会使宽度加倍,加法可能会溢出

发布:2022-10-16 标签:cpucpu-architectureinstruction-setinteger-arithmetic


快速硬件整数除法

问题描述用于整数除法的硬件指令在历史上一直非常慢。例如,对于64位输入,Skylake上的DIVQ延迟为42-95个周期[1](倒数吞吐量为24-90)。不过,也有性能更好的较新处理器:Goldmont有14-43个延迟,而Ryzen有14-47个延迟[1],M1的吞吐量显然是每

发布:2022-10-16 标签:performancex86cpu-architecturearminteger-division


线程同步:如何保证写操作的可见性

问题描述已经有很多关于软件和硬件内存模型、内存栅栏、存储/加载重新排序等的信息。然而,这些信息似乎都集中在确保对共享内存的读取和写入的相对顺序。这样的系统将线程的写入完全延迟很长时间是否合法?例如,假设一个线程对内存中的数据结构进行了一些更新,然后引发了一个应该将更新通知其他线程

发布:2022-10-16 标签:thread-safetysynchronizationmemory-barriersmemory-modelcpu-architecture


为什么使用PUSH/POP而不是SUB和MOV?

问题描述当我在https://godbolt.org上尝试不同的编译器时,我注意到编译器生成如下代码是非常常见的:pushraxpushrbxpushrcxcallrdxpoprcxpoprbxpoprax我知道每个push或pop做两件事:将操作数移入/移出堆栈空间递增/递减堆

发布:2022-10-16 标签:x86x86-64assemblymicro-optimizationcpu-architecture


内存屏障的传递性/累积性属性是如何在微体系结构上实现的?

问题描述我一直在阅读x86内存模型的工作原理和x86上屏障指令的重要性,并将其与其他体系结构(如ARMv8)进行比较。在x86和ARMv8体系结构中,似乎(没有双关语意思)内存模型尊重传递性/累积性,即,如果CPU1通过CPU0看到存储,并且CPU2通过CPU1看到只有在CPU1

发布:2022-10-16 标签:x86x86-64memory-barrierscpu-architecturemicro-architecture