intel相关内容

LFENCE 是否在 AMD 处理器上进行序列化?

在最近的英特尔 ISA 文档中,lfence 指令被定义为序列化指令流(防止其乱序执行).特别是,指令的说明包括这一行: 具体来说,LFENCE 在所有先前的指令在本地完成之前不会执行,并且在 LFENCE 完成之前不会有后续指令开始执行. 请注意,这适用于所有指令,而不仅仅是内存加载指令,使lfence 更多不仅仅是内存排序栅栏. 虽然这现在出现在 ISA 文档中,但不清楚它是 ..

如果我不使用围栏,一个核心需要多长时间才能看到另一个核心的写入?

我一直在尝试用 Google 搜索我的问题,但老实说我不知道​​如何简洁地陈述问题. 假设我在多核 Intel 系统中有两个线程.这些线程在同一个 NUMA 节点上运行.假设线程 1 写入 X 一次,然后只是偶尔向前读取它.进一步假设,除其他外,线程 2 连续读取 X.如果我不使用内存栅栏,线程 1 写入 X 和线程 2 看到更新的值之间可以间隔多长时间? 我知道 X 的写入将进入存储 ..
发布时间:2022-01-06 12:36:15 其他开发

使用 double 比 float 快吗?

双值存储更高的精度并且是浮点数的两倍,但英特尔 CPU 是否针对浮点数进行了优化? 也就是说,对于 +、-、* 和/而言,双重运算是否与浮点运算一样快或更快? 64 位架构的答案会改变吗? 解决方案 没有一个“intel CPU",尤其是在哪些操作方面相对于其他人进行了优化!级别(特别是在 FPU 内),是您问题的答案: 是双重操作一样快或比 +、-、的浮点运算更快*, ..
发布时间:2022-01-06 12:30:34 C/C++开发

当 Skylake CPU 错误预测分支时究竟会发生什么?

我试图详细了解当分支预测错误时,skylake CPU 管道各个阶段的指令会发生什么情况,以及来自正确分支目标的指令开始执行的速度. 所以让我们将这里的两个代码路径标记为红色(预测的,但未实际采用的)和绿色(采用的,但未预测的).所以问题是:1. 在红色指令开始被丢弃之前,分支必须通过流水线多远(以及它们在流水线的哪个阶段被丢弃)?2. 绿色指令多久可以开始执行(就分支到达的流水线阶段而言) ..

英特尔酷睿 i7 处理器使用了哪种缓存映射技术?

我了解了不同的缓存映射技术,例如直接映射和完全关联或集合关联映射,以及它们之间的权衡.(维基百科) 但我很好奇现在英特尔酷睿 i7 或 AMD 处理器中使用的是哪一个? 这些技术是如何发展的?还有哪些需要改进的地方? 解决方案 直接映射缓存基本上从未用于现代高性能 CPU.对于相同大小的组关联高速缓存,其命中率的巨大优势超过了节能,而控制逻辑只是稍微复杂了一点.现在晶体管的预算 ..
发布时间:2022-01-06 12:12:26 其他开发

使用环形总线拓扑的 Intel CPU 如何解码和处理端口 I/O 操作

我从硬件抽象级别理解端口 I/O(即断言一个引脚,该引脚向总线上的设备指示地址是端口地址,这在具有简单地址总线模型的早期 CPU 上有意义)但我'我不太确定它是如何在现代 CPU 微架构上实现的,尤其是端口 I/O 操作如何出现在环形总线上. 首先.IN/OUT 指令分配给保留站还是加载/存储缓冲区?我最初的想法是它将在加载/存储缓冲区中分配并且内存调度程序识别它,将它发送到 L1d,表明它 ..
发布时间:2022-01-04 08:43:26 其他开发

“暂停"的目的是什么?x86 中的指令?

我正在尝试创建一个自旋锁的愚蠢版本.在浏览网页时,我在 x86 中遇到了一条名为“PAUSE"的汇编指令,该指令用于向处理器提示当前正在此 CPU 上运行自旋锁.英特尔手册和其他可用信息表明 处理器使用这个提示来避免内存顺序违反大多数情况下,这大大提高了处理器性能.为了为此,建议将 PAUSE 指令放置在所有自旋等待循环.该文档还提到“等待(一些delay)"是指令的伪实现. 上一段的 ..
发布时间:2021-12-30 21:00:47 其他开发

获取显卡型号?

我想知道如何从代码中获取显卡型号/品牌,尤其是从 DirectX 9.0c(从 C++ 代码中). 解决方案 在运行时,可以查询设备型号和供应商: 在 OpenGL 中,使用命令 glGetString(GL_VENDOR) 或 GL_RENDERER 或 GL_VERSION 来获取您想要的信息. 在 DirectX 9 中,信息似乎在 Microsoft 配置系统中,并从设 ..
发布时间:2021-12-30 18:43:56 C/C++开发

分支目标缓冲区检测到什么分支错误预测?

我目前正在研究可以检测分支预测错误的 CPU 管道的各个部分.我发现这些是: 分支目标缓冲区 (BPU CLEAR) 分支机构地址计算器(BA CLEAR) 跳转执行单元(不确定这里的信号名称??) 我知道 2 和 3 检测到什么,但我不明白 BTB 中检测到什么错误预测.BAC 检测 BTB 在哪里错误预测了非分支指令的分支,BTB 未能检测到分支,或者 BTB 错误预测了 x8 ..

SIMD 指令降低 CPU 频率

我读了这个文章.它谈到了为什么要使用 AVX-512 指令: 英特尔最新的处理器具有高级指令 (AVX-512),可能会导致内核或 CPU 的其余部分运行速度较慢,因为它们使用的功率太大. 我认为在 Agner 的博客上也提到了类似的内容(但我找不到确切的帖子). 我想知道 Skylake 支持的其他指令还有哪些类似的效果,它们会降低功耗以在以后最大化吞吐量?所有 v 前缀指令( ..
发布时间:2021-12-20 15:45:53 其他开发

VIPT 到 PIPT 的转换如何在 L1->L2 驱逐上工作

这个场景出现在我的脑海中,看起来有点基础,但我会问. 所以在 L1 中有一个虚拟索引和物理标签,但是集合变满了所以它被驱逐了.L1 控制器如何从 L1 中的虚拟索引和物理标签中获取完整的物理地址,以便将线插入 L2?我想它可以在 TLB 中搜索组合,但这似乎很慢,而且它可能根本不在 TLB 中.也许来自原始 TLB 转换的完整物理地址存储在缓存线旁边的 L1 中? 这也引发了一个更广泛 ..
发布时间:2021-12-20 11:27:18 其他开发

了解英特尔汇编中的 %rip 寄存器

关于下面的小代码,在另一篇关于结构大小和正确对齐数据的可能性的文章中进行了说明: 结构{字符数据1;短数据2;整数数据3;字符数据4;} X;未签名的乐趣(无效){x.Data1=1;x.Data2=2;x.Data3=3;x.Data4=4;返回(大小(x));} 我得到了相应的反汇编(64位) 0000000000000000 :0: 55 推 %rbp1: 48 89 e5 m ..
发布时间:2021-12-18 09:31:22 其他开发

AVX2 中的 VPERMB 在哪里?

AVX2 有很多好东西.例如,它有很多指令,它们比它们的前身更强大.以 VPERMD 为例:它允许您完全任意广播/将一个 256 位长的 32 位值向量混洗/置换到另一个向量中,在运行时可选择置换1.从功能上讲,这淘汰了大量现有的旧解包、广播、置换、洗牌和移位指令3. 酷豆. 那么 VPERMB 在哪里?即,相同的指令,但处理字节大小的元素.或者,就此而言,对于 16 位元素,VPER ..
发布时间:2021-12-18 09:30:52 其他开发

如何在 Intel 语法中使用 clang 生成汇编代码?

作为这个问题 显示,使用 g++,我可以执行 g++ -S -masm=intel test.cpp.另外,使用clang,我可以执行clang++ -S test.cpp,但是clang 不支持-masm=intel(编译期间未使用的警告参数:-masm=intel).我如何使用 clang 获得英特尔语法? 解决方案 作为 @thakis 在下面注释,较新的版本Clang (3.5+) ..
发布时间:2021-12-18 09:19:22 C/C++开发

Ivy Bridge 上 RDRAND 指令的延迟和吞吐量是多少?

我无法在 agner.org 上找到任何关于 agner.org 的信息href="http://en.wikipedia.org/wiki/RdRand" rel="noreferrer">RDRAND 指令.但是,该处理器存在,因此信息必须在那里. 编辑:实际上最新的优化手册提到了这个指令.它被记录为 解决方案 我写了 librdrand.这是使用 RdRand 指令用随机数填充缓冲 ..
发布时间:2021-12-18 09:13:36 其他开发

为什么英特尔在其处理器中隐藏内部 RISC 内核?

从 Pentium Pro(P6 微体系结构)开始,英特尔重新设计了它的微处理器,并在旧的 CISC 指令下使用了内部 RISC 内核.由于 Pentium Pro,所有 CISC 指令都被分成更小的部分 (uops),然后由 RISC 内核执行. 一开始我很清楚英特尔决定隐藏新的内部架构并强制程序员使用“CISC shell".由于这个决定,英特尔可以在不破坏兼容性的情况下全面重新设计微处 ..
发布时间:2021-12-18 09:12:36 其他开发