cpu-architecture相关内容

更新到 Xcode 5 后 - ld:找不到架构 armv7 或 armv7s 链接器错误的符号

我刚刚将我的 iPhone 4S 软件更新到了 iOS 7 Beta 2,当时我正在对一个新应用 (Phonegap) 进行最后的润色……这不是一个好主意! 完成后 Xcode 没有检测到我的 iPhone,所以我安装了 Xcode 5 beta.摆弄它之后,我终于让它检测到我的手机.现在唯一的问题是使用的架构存在错误. 以下是产生的错误: ld: 警告:忽略文件/Users/--- ..
发布时间:2021-12-11 14:54:18 移动开发

为什么有条件的移动不容易受到分支预测失败的影响?

在阅读了这篇文章(StackOverflow 上的答案)(在优化部分)后,我想知道为什么条件移动是不容易受到分支预测失败的影响.我在 上找到了一篇关于条件移动的文章(PDF 由 AMD).同样在那里,他们声称 cond 的性能优势.移动.但这是为什么呢?我没有看到.在评估该 ASM 指令的那一刻,尚不知道前一条 CMP 指令的结果. 解决方案 错误预测的分支代价高昂 如果一切顺利的话 ..

32 字节对齐例程不适合 uops 缓存

KbL i7-8550U 我正在研究 uops-cache 的行为,但遇到了一个误解. 如英特尔优化手册 2.5.2.2(我的)中所述: 解码的 ICache 包含 32 个集合.每组包含八种方式.每条路最多可容纳六个微操作. - 所有微操作都代表静态的指令在代码中是连续的,并且它们的 EIP 在同一个对齐中32 字节区域. - 最多三种方式可以专用于同一 ..
发布时间:2021-12-08 11:51:24 其他开发

英特尔硬件上的存储缓冲区大小?究竟什么是存储缓冲区?

Intel 优化手册 谈到了处理器的许多部分中存在的存储缓冲区的数量,但似乎没有谈到存储缓冲区的大小.这是公开信息还是存储缓冲区的大小作为微架构细节保留? 我正在研究的处理器主要是 Broadwell 和 Skylake,但有关其他处理器的信息也会很好. 此外,存储缓冲区究竟有什么作用? 解决方案 相关:什么是存储缓冲区? 以及 推测执行的 cpu 分支是否可以包含访问 RAM ..
发布时间:2021-12-08 11:42:44 其他开发

了解 lfence 对具有两个长依赖链的循环的影响,以增加长度

我正在玩这个答案中的代码,稍微修改了一下: BITS 64全局 _start节.text_开始:mov ecx, 1000000.环形:;T 是用 CLI 定义的符号 (-DT=...)TIMES T imul eax, eax围栏TIMES 刺激 edx, edx十二月循环mov eax, 60 ;sys_exit异或edi,edi系统调用 没有 lfence 我得到的结果与该答案中的静态分 ..
发布时间:2021-12-08 11:27:05 其他开发

L2 TLB 未命中后会发生什么?

我很难理解当转换后备缓冲区的前两个级别导致未命中时会发生什么? 我不确定“页面行走"是否发生在特殊的硬件电路中,或者页表是否存储在 L2/L3 缓存中,或者它们是否只驻留在主内存中. 解决方案 (其中一些是 x86 和 Intel 特定的.大多数关键点适用于任何执行硬件页面遍历的 CPU.我还讨论了像 MIPS 这样的 ISA使用软件处理 TLB 未命中.) 现代 x86 微体 ..
发布时间:2021-12-08 11:26:30 其他开发

x86 uops 究竟是如何调度的?

现代 x86 CPU 将传入的指令流分解为微操作 (uops1),然后调度这些 uops 乱序,因为他们的输入准备就绪.虽然基本思想很清楚,但我想知道如何调度就绪指令的具体细节,因为它会影响微优化决策. 以下面的玩具循环2为例: 顶部:lea eax, [ecx + 5]popcnt eax, eax添加edi,eax十二月顶 这基本上实现了循环(具有以下对应关系:eax -> tota ..
发布时间:2021-12-08 11:25:18 其他开发

如何确定针对哪个平台编译了可执行文件?

我需要使用为 x86、x64 和 IA64 制作的 Windows 可执行文件.我想通过检查文件本身以编程方式确定平台. 我的目标语言是 PowerShell,但 C# 示例也可以.如果您知道所需的逻辑,那其中任何一个都失败了,那就太好了. 解决方案 (来自另一个 Q,已移除) 机器类型:这是我基于一些获取链接器时间戳的快速代码.这是在同一个头文件中,它似乎有效 - 编译时返回 ..
发布时间:2021-12-08 08:05:25 C#/.NET

Xcode 6.1 上 x86_64 架构的未定义符号

Xcode 在编译时突然向我抛出了这个错误: 体系结构 x86_64 的未定义符号:“_OBJC_CLASS_$_Format",引用自:WOExerciseListViewController.o 中的 objc-class-refld:找不到架构 x86_64 的符号clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 经过一些研究,我可能了解到我使用的库与 64 位版 ..
发布时间:2021-12-05 20:28:07 移动开发

“首选 32 位"的目的是什么?Visual Studio 中的设置以及它实际上是如何工作的?

我不清楚编译器如何在需要时自动知道编译为 64 位.它如何知道何时可以自信地面向 32 位? 我主要好奇编译器在编译时如何知道要针对哪个架构.它是否会分析代码并根据发现的内容做出决定? 解决方案 Microsoft 有一个博客条目 AnyCPU 在 .NET 4.5 和 Visual Studio 11 中的真正含义: 在 .NET 4.5 和 Visual Studio 11 ..
发布时间:2021-12-02 13:55:08 C#/.NET

正在运行时中断汇编指令

当中断到达 CPU 时,如果它被确认,则通过在跳转到处理程序之前保存当前地址位置来处理它.否则将被忽略. 我想知道汇编指令调用是否被中断. 例如 mvi a, 03h ;将 3 值放入 acc.在 8080 组装 单行指令可以中断吗?或者如果不是,它是原子的?? 是否总能保证“一行汇编指令"总是原子的?? 如果没有“lock"关键字,即在 8080 程序集中,那么原子性 ..

REP 做什么设置?

引用英特尔® 64 和 IA-32 架构优化参考手册,第 2.4.6 节“REP 字符串增强": 使用 REP 字符串的性能特征可归因于两个组成部分:启动开销和数据传输吞吐量. [...] 对于较大粒度数据传输的REP字符串,作为ECX值增加,REP String 的启动开销呈阶梯式增加: 短字符串(ECX 20 个周期, 快速字符串(ECX >= 76:不包括 RE ..
发布时间:2021-11-30 11:17:38 其他开发

为什么不允许从内存到内存的 movl?

我想知道在汇编中是否允许这样做, movl (%edx) (%eax) 我猜它会访问第一个操作数中的内存并放入第二个操作数的内存,比如 *a = *b 但我没有看到任何处理这样的例子,所以我猜这是不允许的.另外,我被告知这是不允许的 leal %esi (%edi) 这是为什么?最后,是否还有其他类似的功能我应该知道是不允许的. 解决方案 movl (mem), (mem)mo ..
发布时间:2021-11-30 11:16:32 其他开发

为什么要打破“输出依赖"?LZCNT 的问题?

在对某些东西进行基准测试时,我测得的吞吐量比我计算的要低得多,我将其范围缩小到 LZCNT 指令(TZCNT 也会发生这种情况),如下面的基准测试所示: xor ecx, ecx_benchloop:lzcnt eax, edx添加 ecx, 1jnz _benchloop 还有: xor ecx, ecx_benchloop:异或 eax, eax ;这不应该有帮助,但确实有帮助lzc ..

某些 CPU 上紧密循环中的 ADC/SBB 和 INC/DEC 问题

我正在用 Delphi 编写一个简单的 BigInteger 类型.它主要由 TLimb 的动态数组组成,其中 TLimb 是一个 32 位无符号整数,以及一个 32 位大小的字段,该字段还保存 BigInteger 的符号位. 要添加两个 BigInteger,我创建了一个适当大小的新 BigInteger,然后在进行一些簿记之后,调用以下过程,将三个指针传递给左操作数和右操作数以及结果的 ..
发布时间:2021-11-30 11:14:48 其他开发

添加冗余分配可在未经优化的情况下编译时加快代码速度

我发现了一个有趣的现象: #include#includeint main() {整数 p, q;时钟_t s,e;s=时钟();for(int i = 1; i 我在 i5-5257U Mac OS 上使用 GCC 7.3.0 编译代码没有任何优化.这是超过 10 次的平均运行时间:也有其他人在其他 Intel 平台上测试此案例并得到相同结果. 我将 GCC 生成的程序集发布在 此处.两 ..

每条汇编指令需要多少个 CPU 周期?

我听说网上有一本 Intel 的书,它描述了特定汇编指令所需的 CPU 周期,但我找不到(经过努力).谁能告诉我如何找到 CPU 周期? 举个例子,在下面的代码中,mov/lock是1个CPU周期,xchg是3个CPU周期. //这部分是平台相关的!#ifdef WIN32内联 int CPP_SpinLock::TestAndSet(int* pTargetAddress,int nVa ..
发布时间:2021-11-30 11:08:45 其他开发

为什么循环指令很慢?英特尔不能有效地实施它吗?

LOOP(英特尔参考手册输入)递减 ecx/rcx,然后如果非零则跳转.它很慢,但英特尔不能便宜地让它快起来吗?dec/jnz 已经宏保险丝进入 Sandybridge 家族的一个 uop;唯一的区别是设置标志. loop 在各种微架构上,来自 Agner Fog 的指令表:> K8/K10:7 次操作 Bulldozer-family/Ryzen:1 m-op(与宏融合测试分支 ..
发布时间:2021-11-30 11:03:56 其他开发

CPU和数据对齐

如果你觉得这个问题已经回答了很多次,请原谅我,但我需要回答以下问题! 为什么数据必须对齐(在 2 字节/4 字节/8 字节边界上)?我的疑问是,当 CPU 具有地址线 Ax Ax-1 Ax-2 ... A2 A1 A0 时,很有可能按顺序对内存位置进行寻址.那么为什么需要在特定边界对齐数据? 如何在编译代码和生成可执行文件时找到对齐要求? 如果例如数据对齐是 4 字节边界,这是否 ..
发布时间:2021-11-27 08:07:30 其他开发