866得票17回答
LEA指令的目的是什么?

对我来说,它似乎只是一个时髦的MOV。它的目的是什么,何时应该使用它? 对于我来说,它看起来像一个时髦的视频文件格式(MOV)。它的用途是什么,何时应该使用它呢?

697得票4回答
如何实现每个周期理论最大的4 FLOPs?

如何在现代 x86-64 Intel CPU 上实现每个周期 4 次浮点运算(双精度)的理论峰值性能? 据我了解,在大多数现代 Intel CPU 上,SSE 的 add 需要三个周期完成,mul 则需要五个周期才能完成(例如请参阅 Agner Fog's 'Instruction Tabl...

511得票6回答
为什么如果我选择优化代码大小而非速度,GCC会生成比较快15-20%的代码?

我在2009年首次注意到,如果我优化尺寸(-Os)而不是速度(-O2或-O3),GCC(至少在我的项目和机器上)会生成明显更快的代码,并且自那以后一直在想为什么。我已经成功创建了一个(相当愚蠢的)代码,展示了这种令人惊讶的行为,并且足够小,可以在这里发布。 const int LOOP_BO...

372得票16回答
如何确定一个.NET程序集是为x86还是x64构建的?

我有一个任意的.NET程序集列表。 我需要编程方式检查每个DLL是否是为x86构建的(而不是x64或Any CPU)。这是否可能?

320得票7回答
为什么在将乘法转换为循环内加法后,这段代码的执行速度变慢了?

我正在阅读Agner Fog的优化手册,然后看到了这个例子: double data[LEN]; void compute() { const double A = 1.1, B = 2.2, C = 3.3; int i; for(i=0; i<LEN; ...

286得票17回答
提交到应用商店问题:不支持的架构 x86

我试图使用Shopify API,当我归档并验证该应用程序时,没有问题,但是当我将其提交到应用商店时,会出现以下问题: ERROR ITMS-90087:"不支持的架构。您的可执行文件包含不受支持的架构 '[x86_64, i386]'." ERROR ITMS-90209:"无效的段对齐...

269得票5回答
GCC为什么在整数除法实现中使用一个奇怪的数字来进行乘法运算?

我一直在阅读有关div和mul汇编操作的文章,决定通过编写简单的C程序来实现它们: 文件 division.c: #include <stdlib.h> #include <stdio.h> int main() { size_t i = 9; si...

233得票4回答
为什么在x86_64汇编中引入无用的MOV指令会加速紧密循环?

背景: 在优化一些带有嵌入式汇编语言的 Pascal 代码时,我注意到一个不必要的 MOV 指令,并将其删除。 令我惊讶的是,删除这个不必要的指令导致我的程序变得更慢。 我发现添加任意无用的 MOV 指令可以进一步提高性能。 效果不稳定,并且根据执行顺序而变化:相同的垃圾指令上下移动一...

198得票4回答
UNIX和Linux系统调用(以及用户空间函数)在i386和x86-64上的调用约定是什么?

以下链接介绍了UNIX(BSD风格)和Linux上的x86-32系统调用约定: http://www.int80h.org/bsdasm/#system-calls http://www.freebsd.org/doc/en/books/developers-handbook/x86-sy...

185得票4回答
Rust的128位整数`i128`在64位系统上是如何工作的?

Rust支持128位整数,这些使用数据类型i128(无符号整数使用u128)表示:let a: i128 = 170141183460469231731687303715884105727; Rust如何在64位系统上操作i128值,例如如何进行算术运算?据我所知,该值无法适应x86-64 C...