问题标签 [instructions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cpu - 现代CPU是否跳过零乘法?
我想知道当前的 cpus 是否在其中至少一个为零时避免将两个数字相乘。谢谢
class - 对象/类方法也序列化?
我知道数据成员保存到磁盘,但我想知道对象/类的方法是否也以二进制格式保存?因为我发现了一些矛盾的信息,例如:
Ivor Horton:“类对象包含函数成员和数据成员,并且所有成员,包括数据和函数,都有访问说明符;因此,要在外部文件中记录对象,写入文件的信息必须包含完整的说明所涉及的所有阶级结构。”
和:
因此:方法的汇编指令(操作码和操作数)是否也存储到磁盘中?就像预编译的 LIB 或 DLL 一样?在 DOS 时代,我时不时地使用汇编。
据我记得德尔福和以下网站(由dan04回答):
sizeof(<OBJECT or CLASS>)
将一起给出所有数据成员的大小(无方法/过程)。那里还给出了一个不错的 C 示例,其中在一个类/结构中声明了数据和成员,但在运行时,这些方法是作用于数据结构的单独过程。但是,我认为像 Pascal 的 VMT 这样的后期类/对象实现在内存上可能会有所不同。
assembly - Intel 8080 指令...“DAD”指令助记符的词源是什么?
我正在 Charles Petzold 的优秀书籍Code中了解 Intel 8080 处理器。DAD 指令被解释为它完成了什么,但我对这样的字母代码有一个奇怪的事情,我必须知道它们代表什么。例如 ADC 代表带有进位的 ADd。或 SBB 用于带借的减法。
但是爸爸呢?我知道这是一个愚蠢的问题,但我想知道是否有人知道答案。谷歌一无所获……
c - C 代码循环性能
我的应用程序中有一个乘加内核,我想提高它的性能。
我使用 Intel Core i7-960(3.2 GHz 时钟)并且已经使用 SSE 内部函数手动实现了内核,如下所示:
我知道我可以使用打包的 fp 向量来提高性能,而且我已经成功地做到了,但我想知道为什么单个标量代码无法满足处理器的峰值性能。
这个内核在我的机器上的性能是每个周期约 1.6 次 FP 操作,而每个周期最多 2 次 FP 操作(因为 FP add + FP mul 可以并行执行)。
如果我对生成的汇编代码的研究是正确的,那么理想的时间表如下所示,其中mov
指令需要 3 个周期,依赖指令从加载域到 FP 域的切换延迟需要 2 个周期,FP 乘法需要4 个周期,FP add 需要 3 个周期。(请注意,来自乘法 -> 加法的依赖不会产生任何切换延迟,因为这些操作属于同一个域)。
根据测量的性能(最大理论性能的约 80%),每 8 个周期有约 3 条指令的开销。
我正在尝试:
- 摆脱这种开销,或者
- 解释它来自哪里
当然存在缓存未命中和数据未对齐的问题,这会增加移动指令的延迟,但是还有其他因素可以在这里发挥作用吗?像寄存器读档什么的?
我希望我的问题很清楚,在此先感谢您的回复!
更新:内循环的组装如下:
c - C 代码循环性能 [续]
这个问题继续我的问题here(根据Mystical的建议):
继续我的问题,当我使用打包指令而不是标量指令时,使用内在函数的代码看起来非常相似:
该内核的测量性能约为每个周期 5.6 FP 操作,尽管我希望它恰好是标量版本性能的 4 倍,即每个周期 4.1,6=6,4 FP 操作。
考虑到权重因子的移动(感谢您指出),时间表如下所示:
看起来时间表没有改变,尽管在movss
将标量权重值移动到 XMM 寄存器然后用于shufps
将这个标量值复制到整个向量中的操作之后有一条额外的指令。mulps
考虑到从负载到浮点域的切换延迟,权重向量似乎已经准备好及时使用,因此这不应该产生任何额外的延迟。
这个内核中使用的movaps
(对齐的、打包的移动)addps
和mulps
指令(用汇编代码检查)具有与其标量版本相同的延迟和吞吐量,因此这也不应该产生任何额外的延迟。
假设这个内核可以获得的最大性能是每个周期 6.4 FP ops 并且它以每个周期 5.6 FP ops 运行,是否有人知道每 8 个周期的这个额外周期花在哪里?
顺便说一下,这里是实际装配的样子:
assembly - 组装 MIPS TA1 说明
有人可以指向一个列表或包含所有汇编 (MIPS) TAL 指令的东西吗?
我相信
会变成
但我无法找到所有说明。
linux - 如何获取一条机器指令写入的地址?
现在我从 EIP 寄存器中得到了一个机器指令的地址。该机器指令可以更改某个内存区域的值,我确实想要但无法获得该内存的地址。
当然,我可以从机器指令'地址读取数据,但内容是机器指令,如:0x8b0c4d8b......,它是不可读的(我不能使用gdb之类的调试工具)。
如何获取一条机器指令将写入的地址?
mips - MIPS 代码中执行的指令总数?
在这个 MIPS 程序中
当这段代码片段运行时,一共会执行多少条指令?
assembly - 存储指令中数据总线的状态
我只是对装配中的商店指令感到困惑。当地址总线携带要写入的内存地址时,数据总线的状态是什么。它是否携带指向的地址的内存内容
assembly - 汇编列表中使用的 SIMD 指令
如果使用以下编译选项
如何从汇编列表中知道使用了 SIMD 指令?