问题标签 [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.

0 投票
2 回答
907 浏览

cpu - 现代CPU是否跳过零乘法?

我想知道当前的 cpus 是否在其中至少一个为零时避免将两个数字相乘。谢谢

0 投票
1 回答
76 浏览

class - 对象/类方法也序列化?

我知道数据成员保存到磁盘,但我想知道对象/类的方法是否也以二进制格式保存?因为我发现了一些矛盾的信息,例如:

Ivor Horton:“类对象包含函数成员和数据成员,并且所有成员,包括数据和函数,都有访问说明符;因此,要在外部文件中记录对象,写入文件的信息必须包含完整的说明所涉及的所有阶级结构。”

和:

方法是否也与 .NET 中的数据成员一起序列化?

因此:方法的汇编指令(操作码和操作数)是否也存储到磁盘中?就像预编译的 LIB 或 DLL 一样?在 DOS 时代,我时不时地使用汇编。

据我记得德尔福和以下网站(由dan04回答):

方法是否也与 .NET 中的数据成员一起序列化?

sizeof(<OBJECT or CLASS>)将一起给出所有数据成员的大小(无方法/过程)。那里还给出了一个不错的 C 示例,其中在一个类/结构中声明了数据和成员,但在运行时,这些方法是作用于数据结构的单独过程。但是,我认为像 Pascal 的 VMT 这样的后期类/对象实现在内存上可能会有所不同。

0 投票
4 回答
3103 浏览

assembly - Intel 8080 指令...“DAD”指令助记符的词源是什么?

我正在 Charles Petzold 的优秀书籍Code中了解 Intel 8080 处理器。DAD 指令被解释为它完成了什么,但我对这样的字母代码有一个奇怪的事情,我必须知道它们代表什么。例如 ADC 代表带有进位的 ADd。或 SBB 用于带借的减法。

但是爸爸呢?我知道这是一个愚蠢的问题,但我想知道是否有人知道答案。谷歌一无所获……

0 投票
3 回答
4409 浏览

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 条指令的开销。

我正在尝试:

  • 摆脱这种开销,或者
  • 解释它来自哪里

当然存在缓存未命中和数据未对齐的问题,这会增加移动指令的延迟,但是还有其他因素可以在这里发挥作用吗?像寄存器读档什么的?

我希望我的问题很清楚,在此先感谢您的回复!


更新:内循环的组装如下:

0 投票
1 回答
4969 浏览

c - C 代码循环性能 [续]

这个问题继续我的问题here(根据Mystical的建议):

C 代码循环性能


继续我的问题,当我使用打包指令而不是标量指令时,使用内在函数的代码看起来非常相似:

该内核的测量性能约为每个周期 5.6 FP 操作,尽管我希望它恰好是标量版本性能的 4 倍,即每个周期 4.1,6=6,4 FP 操作。

考虑到权重因子的移动(感谢您指出),时间表如下所示:

日程

看起来时间表没有改变,尽管在movss将标量权重值移动到 XMM 寄存器然后用于shufps将这个标量值复制到整个向量中的操作之后有一条额外的指令。mulps考虑到从负载到浮点域的切换延迟,权重向量似乎已经准备好及时使用,因此这不应该产生任何额外的延迟。

这个内核中使用的movaps(对齐的、打包的移动)addpsmulps指令(用汇编代码检查)具有与其标量版本相同的延迟和吞吐量,因此这也不应该产生任何额外的延迟。

假设这个内核可以获得的最大性能是每个周期 6.4 FP ops 并且它以每个周期 5.6 FP ops 运行,是否有人知道每 8 个周期的这个额外周期花在哪里?


顺便说一下,这里是实际装配的样子:

0 投票
1 回答
1566 浏览

assembly - 组装 MIPS TA1 说明

有人可以指向一个列表或包含所有汇编 (MIPS) TAL 指令的东西吗?

我相信

会变成

但我无法找到所有说明。

0 投票
1 回答
198 浏览

linux - 如何获取一条机器指令写入的地址?

现在我从 EIP 寄存器中得到了一个机器指令的地址。该机器指令可以更改某个内存区域的值,我确实想要但无法获得该内存的地址。

当然,我可以从机器指令'地址读取数据,但内容是机器指令,如:0x8b0c4d8b......,它是不可读的(我不能使用gdb之类的调试工具)。

如何获取一条机器指令将写入的地址?

0 投票
1 回答
3119 浏览

mips - MIPS 代码中执行的指令总数?

在这个 MIPS 程序中

当这段代码片段运行时,一共会执行多少条指令?

0 投票
1 回答
127 浏览

assembly - 存储指令中数据总线的状态

我只是对装配中的商店指令感到困惑。当地址总线携带要写入的内存地址时,数据总线的状态是什么。它是否携带指向的地址的内存内容

0 投票
1 回答
600 浏览

assembly - 汇编列表中使用的 SIMD 指令

如果使用以下编译选项

如何从汇编列表中知道使用了 SIMD 指令?