问题标签 [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.
assembly - EMMS指令执行时间?
我正在阅读The Art of Assembly: The MMX Instruction Set",在执行了一些 MMX 指令后,EMMS
需要执行该指令来重置 FPU。它指出 EMMS 指令很慢。
但是,当我分析EMMS
执行时间以查看它有多慢时(RDTSC
用于计算时钟周期),它似乎在 0 个周期内执行。
这是怎么回事?我是不是在某个地方犯了错误,还是 Art Of Assembly 已经过时了?
assembly - 帮助进行简单的组装 mmx 练习
例如,给定一个长度为 8 倍数的字节向量,我如何使用 mmx 指令将所有 2 转换为 5?
谢谢。
编辑:2 和 5 只是一个例子。它们实际上是过程的参数。
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 指令?
非常感谢任何答案。谢谢。
arm - 常见的 SIMD 技术
我在哪里可以找到有关常见 SIMD 技巧的信息?我有一个指令集,并且知道如何编写简单的 SIMD 代码,但我知道,现在的 SIMD 功能要强大得多。它可以保存复杂的条件无分支代码。
例如 ( ARMv6
),以下指令序列将 Rd 的每个字节设置为等于 Ra 和 Rb 的相应字节的无符号最小值:
教程链接/不常见的 SIMD 技术也很好 :) ARMv6对我来说是最有趣的,但是x86(SSE,...)/ Neon(在 ARMv7 中)/其他也很好。
c++ - 同时使用多个 SIMD 指令集的好处
我正在编写一个高度并行的多线程应用程序。我已经编写了一个 SSE 加速线程类。如果我要编写一个 MMX 加速线程类,然后同时运行两者(每个内核一个 SSE 线程和一个 MMX 线程),性能会显着提高吗?
我认为这种设置将有助于隐藏内存延迟,但在我开始投入时间之前我想确定一下。
c++ - 特殊 CPU 功能的 C/C++ 使用
我很好奇,新编译器是否使用新 CPU 中内置的一些额外功能,例如 MMX SSE、3DNow!所以?
我的意思是,在最初的 8086 中甚至没有 FPU,所以旧的编译器甚至不能使用它,但是新的编译器可以,因为 FPU 是每个新 CPU 的一部分。那么,新的编译器是否使用了 CPU 的新特性?
或者,更应该问的是,新的 C/C++ 标准库函数是否使用了新特性?
感谢您的回答。
编辑:
好的,所以,如果我让你们所有人都说对了,即使是一些标准操作,尤其是浮点数,也可以使用 SSE 更快地完成。
为了使用它,我必须在我的编译器中启用这个特性,如果它支持的话。如果是这样,我必须确保目标平台支持该功能。
对于某些需要顶级性能的系统库,如OpenGL、DirectX等,系统可能会支持这种支持。
默认情况下,出于兼容性原因,编译器不支持它,但您可以使用 Intel 等提供的特殊 C 函数添加此支持。这应该是最好的方式,因为您可以直接控制天气,当您使用所需平台的特殊功能时,可以编写支持多 CPU 的应用程序。
assembly - MMX 内部函数和 Microsoft C++ 的堆栈使用
我有一个内联汇编程序循环,它使用 MMX 指令从 int32 数据数组中累积添加元素。特别是,它利用 MMX 寄存器可以容纳 16 个 int32 的事实来并行计算 16 个不同的累积和。
我现在想将这段代码转换为 MMX 内在函数,但我担心我会遭受性能损失,因为无法明确指示编译器使用 8 个 MMX 寄存器来累积 16 个独立的和。
任何人都可以对此发表评论,并可能就如何将下面的代码转换为使用内在函数提出解决方案?
== 内联汇编器(仅循环内的一部分)==
- esi 指向数据数组的开头
- edx 为当前循环迭代提供数据数组中的偏移量
- 排列数据阵列,使得 16 个独立和的元素被交错。
assembly - 具有延迟和吞吐量的简明 SSE 和 MMX 指令参考
我正在尝试通过使用带有内联汇编的 MMX 和 SSE 指令集来优化一些算术。但是,我一直无法找到有关这些增强指令集的时序和用法的良好参考。您能否帮我找到包含有关吞吐量、延迟、操作数以及指令的简短描述的信息的参考资料?
到目前为止,我发现:
英特尔指令参考 英特尔 64 和 IA-32 架构开发人员手册:卷。2A和 Intel 64 和 IA-32 架构开发人员手册:卷。2B
simd - 将 MMX/SSE 指令移植到 AltiVec
让我以此作为开场白。我在 ASM 方面的经验非常有限,在 SIMD 方面的经验更是少之又少。
但碰巧我有以下 MMX/SSE 优化代码,我想移植到 AltiVec 指令以在 PPC/Cell 处理器上使用。
这可能是一个很大的问题。尽管它只有几行代码,但我在试图弄清楚这里发生的事情时遇到了无穷无尽的麻烦。
原函数:
关于如何重写它以使用 AltiVec 指令的任何提示?
我的第一次尝试(一次非常错误的尝试)看起来像这样。但它并不完全(甚至是远程)正确。
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/