cpu-architecture相关内容
它是我不清楚编译器在需要时如何自动知道要针对64位进行编译。 我主要是想知道编译器在编译时如何知道要针对哪种体系结构。 解决方案 Microsoft是否有博客条目 AnyCPU在.NET 4.5和Visual Studio 11中的真正含义 : 在.NET 4.5和Visual Studio 11中,奶酪已被移动。大多数.NET项目的 默认值仍然是AnyCPU,但是AnyCP
..
我想问一些有关ILP的问题. 超标量处理器是标量处理器和矢量处理器的混合体.那么我可以说向量处理器的体系结构遵循超标量吗? 同时处理多个指令不会使体系结构成为超标量,因为流水线,多处理器或多核体系结构也可以实现这一目标.这是什么意思? 我读过“超标量CPU体系结构在单个处理器中实现了一种称为指令级并行性的并行形式",超标量不能使用多个处理器吗?谁能提供使用超标量的示例? V
..
我正在分析一个来自Agner Fog的Optimization_assembly的循环示例.我的意思是12.9章. 代码是:(我简化了一点) L1: vmulpd ymm1, ymm2, [rsi+rax] vaddpd ymm1, ymm1, [rdi+rax] vmovupd [rdi+rax], ymm1 add rax, 32 jl
..
我想要一条长等待时间的单指令x86 1 指令,以便创建长的依赖链,作为测试微体系结构功能的一部分. 当前我正在使用fsqrt,但我想知道还有更好的方法. 理想情况下,该指令在以下标准上得分会很高: 长时间等待 稳定/固定的延迟时间 一个或几个微码(特别是:未微码) 消耗尽可能少的uarch资源(加载/存储缓冲区,页面遍历等) 能够(在延迟方面)与自身链接 能够使用GP寄
..
我想知道是否有任何英特尔专家可以告诉我STD和STA在Intel Skylake内核方面的区别. 在Intel优化指南中,有一张图片描述了Intel Cores的“超标量端口". 这是第78页的另一张图片,该图片描述了“商店地址"和“商店数据": 使用要存储的数据地址准备商店转发和商店淘汰逻辑. 使用要存储的数据准备商店转发和商店退役逻辑. 考虑到Skylake可以在
..
这些年来,我已经读过很多次了,您应该对XOR进行XOR编程,因为它速度更快...或在C语言中进行编程时使用counter ++或counter + = 1,因为它们会进行INC或ADD ... Netburst Pentium 4 INC比ADD 1慢,因此必须警告编译器您的目标是Netburst,这样它将所有var ++转换为ADD 1 ... 我的问题是:为什么INC和ADD有不同的表现
..
鉴于具有恒定容量和关联性的高速缓存大小,对于给定的代码来确定数组元素的平均值,是否会首选具有更高块大小的高速缓存? [来自评论] 检查下面给出的代码以计算数组的平均值: total = 0; for(j=0; j
..
正如我一直了解的那样,AMD通过对Intel的指令集进行逆向工程来构建CPU,现在向Intel支付使用他们的指令集的费用,而Intel对AMD的64位指令也这样做. 这是在不需要购买特定版本(例如为ARM编译的版本)的情况下在两种类型的CPU上安装Windows的方式,因此所有应用程序,游戏等都以相同的方式工作,并且可以在CPU上互换使用. 但是最近有些事情使我对此有些疑问... 首
..
我目前正在研究CPU管道的各个部分,这些部分可以检测到分支错误预测.我发现这些是: 分支目标缓冲区(BPU清除) 分支地址计算器(BA CLEAR) 跳转执行单元(不确定此处的信号名称吗?) 我知道2和3可以检测到什么,但是我不明白在BTB中检测到了什么错误预测. BAC会检测到BTB错误地预测了非分支指令的分支,BTB无法检测到分支或错误地预测了x86 RET指令的目标地址.执行
..
现代x86 CPU将传入的指令流分解为微操作(uops 1 ),然后调度这些uops 例如,采取以下玩具循环 2 : top: lea eax, [ecx + 5] popcnt eax, eax add edi, eax dec ecx jnz top 这基本上实现了循环(具有以下对应关系:eax -> total, c -> ecx): do { total += popc
..
是否有人知道在现代x86系统上将哪种类型的CPU缓存行为或策略(例如,不可缓存的写合并)分配给了内存映射的文件支持区域? 有什么方法可以检测出哪种情况,并且有可能覆盖默认行为吗? Windows和Linux是主要的操作系统. (编者注:该问题以前的表述为内存映射的I/O ,但是该短语具有不同的特定技术含义,尤其是在谈论CPU缓存时,即与负载/存储进行对话的实际I/O设备(如NIC
..
有人可以解释一下TLB(转换后备缓冲区)未命中和缓存未命中之间的区别吗? 我相信我发现TLB指的是某种虚拟内存地址,但是我并不太清楚这实际上意味着什么? 我理解当将一块内存(高速缓存行的大小)加载到(L3?)高速缓存中并且如果当前高速缓存行中没有保留所需的地址时,会导致高速缓存未命中-这是高速缓存未命中. 解决方案 嗯,当今所有现代操作系统都使用称为虚拟内存的东西. CPU生成
..
假设我们有一个特定的父进程,并在内存中存储了任意数量的数据,然后使用fork产生一个子进程.我知道,为了使操作系统能够在写入时执行复制,内存中包含我们正在修改的数据的特定页面将设置其只读位,并且操作系统将使用在子进程尝试时会导致的异常修改数据以将整个页面复制到内存中的另一个区域,以便子代获得其自己的副本.我不明白的是,如果内存中的特定部分被标记为只读,那么数据最初所属的父级将无法修改数据.那么整个
..
我无法完全掌握VIPT缓存中的同义词或别名的概念. 将地址拆分为:- 在这里,假设我们有2个页面,其中不同的VA映射到相同的物理地址(或帧号). 不同的VA的 pageno部分(位13-39)被转换为PA的 PFN (位12-35),并且两者的PFN均相同VA映射到相同的物理帧. 现在,两个VA的 pageoffset 部分(位0-13)与它们要从特定帧访问的数据相同(不相
..
32位应用程序可执行文件包含用于32位CPU的机器代码,但是32位和64位Intel CPU的程序集和内部体系结构(寄存器数,寄存器宽度,调用约定)不同,因此如何处理在64位计算机上运行的32位exe? 维基百科的x86-64文章说: x86-64与16位和32位x86代码完全向后兼容. 由于完整的x86 16位和32位指令集仍在硬件中实现,而没有任何中间仿真,因此,现有的x86可执行
..
有没有一种方法可以在运行时识别iOS设备CPU架构? 谢谢. 解决方案 您可以使用sysctlbyname: #include #include #include NSString *getCPUType(void) { NSMutableString *cpu = [[NSM
..
单个线程中的代码具有一定的内存保证,例如写后读取(即,将一些值写到内存位置,然后再读回应该给出您所写的值). 如果将线程重新计划为在其他CPU内核上执行,那么这种内存保证会发生什么?假设某个线程将10写入内存位置X,然后重新安排到另一个内核.该内核的L1缓存的X值可能与先前在该内核上执行的另一个线程的X值不同,因此现在读取X不会像线程期望的那样返回10.在不同内核上调度线程时是否发生某些L1
..
我有一个应用程序,它有2个线程,线程A与内核1的亲缘关系和线程B与内核2的亲和力, 核心1和核心2位于同一x86插槽中. 线程A忙于整数x的旋转,线程B在某些情况下会增加x,当线程B决定增加x时,它将使x所在的缓存行无效,并根据x86 MESI协议,它将存储新的x在core2收到无效ack之前存储缓冲区,然后在core2收到无效ack之后,core2刷新存储缓冲区. 我想知道,在cor
..
Java 内存可见性文档说: 对易失性字段的写操作发生在每次对该字段的后续读取之前. 我很困惑后续在多线程上下文中的含义.这句话是否暗示所有处理器和内核都需要全局时钟.因此,例如,我在某个线程的循环c1中为变量分配值,然后第二个线程能够在后续的循环c1 + 1中看到此值? 解决方案 在我看来,这似乎是在线程之间提供无锁获取/释放内存排序语义.请参阅 Jeff Preshing的
..
让我们假设2个内核试图在同一时间(正负eta)将不同的值写入相同的RAM地址(1个字节),并且不使用任何互锁的指令或内存屏障.在这种情况下会发生什么,什么值将被写入主RAM?第一个获胜?最后一个赢了?不确定的行为? 解决方案 x86(与其他主流SMP CPU架构一样)具有 一致性数据缓存 .两个不同的缓存(例如2个不同内核的L1D)不可能为同一缓存行保存冲突的数据. 硬件强加命令(通
..