问题标签 [micro-architecture]

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 投票
0 回答
90 浏览

assembly - 微汇编语言 Mic-1 | IDIV司

我无法理解除法 IDIV 在微装配符号中的工作方式。我已经知道如何开始但不知道如何完成:

这就是我到目前为止所拥有的,我认为问题是,如何在不使用直接除法的情况下实际除以 2 个数字。

0 投票
1 回答
68 浏览

assembly - ST64B 和 MOVDIR64B 的临时性

x86_64 有一条指令movdir64b,据我了解,它是 64 字节(缓存行)的非临时副本(嗯,至少存储是)。AArch64 似乎有一个类似的指令st64b,它执行相同大小的原子存储。但是,官方 ARMv9 文档并不清楚 是否st64b也是非临时存储。

英特尔的指令集参考文档movdir64b要详细得多,但我的研究还远远不够,无法完全理解每种内存类型协议代表什么。

从到目前为止我可以推断出的, x86_64 指令movntdq大致相当于stnp,并且是写组合。从那看来,似乎movdir64b就像一个原子商店中的四个,因此我猜测st64b.

这几乎可以肯定是对实际情况的过度简化(当然,可能是错误的/不准确的),但这是迄今为止可以推断的。

以这种方式可以st64b将其用作四个stnp指令的原子序列作为缓存行的非临时写入吗?

0 投票
1 回答
42 浏览

design-patterns - 如何将装饰器模式添加到责任链中?

我创建了以下 UML。它基本上是一个货币转换器。就像现在一样,它是一个责任链。但现在我想添加一个装饰器模式。因此,例如,添加一个固定的处理量。如何在此处插入装饰器模式?谢谢您的帮助!

心肺复苏术

0 投票
0 回答
65 浏览

performance - 如果在加载前未完成预取,它是否无用?

假设我们有这个伪代码,其中ptr不在任何 CPU 缓存中:

由于ptr在主存中,预取操作的延迟(从预取指令解码到ptr在 L1 缓存中可用)远大于 20 个周期。进行中的预取会完全减少负载的延迟吗?或者预取是没有用的,除非它在加载之前完成?

天真地(对内存系统的工作原理没有太多了解)我可以看到它以两种方式工作:

  • 当 CPU 执行加载时,它以某种方式识别同一地址正在进行预取,并在从 L1 加载之前等待预取完成。
  • CPU 看到该地址当前不在缓存中并进入主存储器,忽略并行执行的预取操作。

其中之一是正确的吗?有没有我没有想到的第三种选择?我对 Skylake 尤其感兴趣,但也只是试图建立一些一般的直觉。

0 投票
0 回答
17 浏览

debian - 处理 Debian 软件包名称中的 x86-64 微架构级别

我计划为 x86-64 架构构建不同版本的密集数值程序。方便的是,在 2020 年,定义了 4 个级别的 x86-64 微架构,可以通过“-march”标志传递给编译器。因此,对于 GCC 11(对于 Clang 12 也是如此),我应该能够通过指定使用 AVX、AVX2 和 LZCNT 指令

并将其扩展为 AVX512

如果我用它创建一个 Debian 包,它可能被称为

但是,实际上有两个版本。在机器上运行该x86-64-v4版本x86-64-v3会导致 SIGILL(非法指令)。有人向我建议:

其中 x3 代表 x86-64-v3,x4 代表 x86-64-v4。但我认为这违反了 Debian 'arch' 说明符规则。将其添加到包名称的版本部分会导致:

但这可以被包管理器解释为 x4 是更高版本。我正在考虑给名字加后缀。因此:

ARM aarch64 世界中可能会发生类似的微架构问题。根据我的阅读,ARMv8-A 支持“高级 SIMD (Neon)”;ARMv8.2-A 支持“可扩展向量扩展 (SVE)”。这可能会产生,

有没有更好的方法来处理微架构级别的差异?