问题标签 [mmx]

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 回答
898 浏览

assembly - EMMS指令执行时间?

我正在阅读The Art of Assembly: The MMX Instruction Set",在执行了一些 MMX 指令后,EMMS需要执行该指令来重置 FPU。它指出 EMMS 指令很慢。

但是,当我分析EMMS执行时间以查看它有多慢时(RDTSC用于计算时钟周期),它似乎在 0 个周期内执行。

这是怎么回事?我是不是在某个地方犯了错误,还是 Art Of Assembly 已经过时了?

0 投票
1 回答
996 浏览

assembly - 帮助进行简单的组装 mmx 练习

例如,给定一个长度为 8 倍数的字节向量,我如何使用 mmx 指令将所有 2 转换为 5?

谢谢。

编辑:2 和 5 只是一个例子。它们实际上是过程的参数。

0 投票
2 回答
1582 浏览

assembly - 汇编掩码逻辑问题

这很简单,但我还没有弄清楚。

这个问题是关于一个程序集 mmx,但它是纯粹的逻辑。

想象以下场景:

我想知道用 02 填充 MM0 的零。我想我必须在步骤 2 中反转 MM0 寄存器,将 FF 更改为 00,将 00 更改为 FF,然后执行 a and 到 MM1,最后 a or 合并二。

如果我能够得到:

总结一下,我怎样才能将 MM3 寄存器设为 00 00 FF FF 00 00 FF ?如何反转位,证明我在 MMX 寄存器中只有 AND、OR、XOR 和 NAND 指令?

非常感谢任何答案。谢谢。

0 投票
2 回答
2701 浏览

arm - 常见的 SIMD 技术

我在哪里可以找到有关常见 SIMD 技巧的信息?我有一个指令集,并且知道如何编写简单的 SIMD 代码,但我知道,现在的 SIMD 功能要强大得多。它可以保存复杂的条件无分支代码。
例如 ( ARMv6),以下指令序列将 Rd 的每个字节设置为等于 Ra 和 Rb 的相应字节的无符号最小值:

教程链接/不常见的 SIMD 技术也很好 :) ARMv6对我来说是最有趣的,但是x86(SSE,...)/ Neon(在 ARMv7 中)/其他也很好。

0 投票
2 回答
1347 浏览

c++ - 同时使用多个 SIMD 指令集的好处

我正在编写一个高度并行的多线程应用程序。我已经编写了一个 SSE 加速线程类。如果我要编写一个 MMX 加速线程类,然后同时运行两者(每个内核一个 SSE 线程和一个 MMX 线程),性能会显着提高吗?

我认为这种设置将有助于隐藏内存延迟,但在我开始投入时间之前我想确定一下。

0 投票
9 回答
2554 浏览

c++ - 特殊 CPU 功能的 C/C++ 使用

我很好奇,新编译器是否使用新 CPU 中内置的一些额外功能,例如 MMX SSE、3DNow!所以?

我的意思是,在最初的 8086 中甚至没有 FPU,所以旧的编译器甚至不能使用它,但是新的编译器可以,因为 FPU 是每个新 CPU 的一部分。那么,新的编译器是否使用了 CPU 的新特性?

或者,更应该问的是,新的 C/C++ 标准库函数是否使用了新特性?

感谢您的回答。

编辑:

好的,所以,如果我让你们所有人都说对了,即使是一些标准操作,尤其是浮点数,也可以使用 SSE 更快地完成。

为了使用它,我必须在我的编译器中启用这个特性,如果它支持的话。如果是这样,我必须确保目标平台支持该功能。

对于某些需要顶级性能的系统库,如OpenGL、DirectX等,系统可能会支持这种支持。

默认情况下,出于兼容性原因,编译器不支持它,但您可以使用 Intel 等提供的特殊 C 函数添加此支持。这应该是最好的方式,因为您可以直接控制天气,当您使用所需平台的特殊功能时,可以编写支持多 CPU 的应用程序。

0 投票
1 回答
988 浏览

assembly - MMX 内部函数和 Microsoft C++ 的堆栈使用

我有一个内联汇编程序循环,它使用 MMX 指令从 int32 数据数组中累积添加元素。特别是,它利用 MMX 寄存器可以容纳 16 个 int32 的事实来并行计算 16 个不同的累积和。

我现在想将这段代码转换为 MMX 内在函数,但我担心我会遭受性能损失,因为无法明确指示编译器使用 8 个 MMX 寄存器来累积 16 个独立的和。

任何人都可以对此发表评论,并可能就如何将下面的代码转换为使用内在函数提出解决方案?

== 内联汇编器(仅循环内的一部分)==

  • esi 指向数据数组的开头
  • edx 为当前循环迭代提供数据数组中的偏移量
  • 排列数据阵列,使得 16 个独立和的元素被交错。
0 投票
3 回答
4794 浏览

assembly - 具有延迟和吞吐量的简明 SSE 和 MMX 指令参考

我正在尝试通过使用带有内联汇编的 MMX 和 SSE 指令集来优化一些算术。但是,我一直无法找到有关这些增强指令集的时序和用法的良好参考。您能否帮我找到包含有关吞吐量、延迟、操作数以及指令的简短描述的信息的参考资料?

到目前为止,我发现:

英特尔指令参考 英特尔 64 和 IA-32 架构开发人员手册:卷。2AIntel 64 和 IA-32 架构开发人员手册:卷。2B

英特尔优化指南 http://www.intel.com/Assets/PDF/manual/248966.pdf

整数运算的时序 http://gmplib.org/~tege/x86-timing.pdf

0 投票
2 回答
1045 浏览

simd - 将 MMX/SSE 指令移植到 AltiVec

让我以此作为开场白。我在 ASM 方面的经验非常有限,在 SIMD 方面的经验更是少之又少。

但碰巧我有以下 MMX/SSE 优化代码,我想移植到 AltiVec 指令以在 PPC/Cell 处理器上使用。

这可能是一个很大的问题。尽管它只有几行代码,但我在试图弄清楚这里发生的事情时遇到了无穷无尽的麻烦。

原函数:

关于如何重写它以使用 AltiVec 指令的任何提示?

我的第一次尝试(一次非常错误的尝试)看起来像这样。但它并不完全(甚至是远程)正确。

0 投票
1 回答
268 浏览

optimization - AMD Geode 优化参考

我正在对嵌入式 AMD Geode LX 上的一些机器视觉代码进行一些重大优化。我打算重写 Assembly 中计算密集的部分,大量使用 x86 MMX 指令。

基本的 MMX 指令集有很多参考资料,但我正在寻找针对 Geode LX 进行优化的具体指南。

AMD 网站上有一些 AMD64 和 Athlon 优化指南,但我没有找到任何关于 Geode 的具体信息。

我正在寻找有关 Geode 特定事物的信息,例如流水线、不同指令的速度以及其他速度关键信息。有关 Geode 工作原理的信息以及改进代码的技巧将非常有帮助。

我正在使用 AMD Geode LX 800。

[编辑] 这个网站正是我正在寻找的,除了它只关注 AMD Athlon 和 Opteron 处理器: http ://www.agner.org/optimize/