问题标签 [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 投票
4 回答
1677 浏览

c - 在 C 中使用内联汇编时出错

我正在尝试组装以使用我以前从未真正使用过的向量操作,并且我承认在掌握一些语法时遇到了一些麻烦。

相关代码如下。

在这个简单的示例中,我尝试对数组中的每个元素进行 16 位“3”比较。我希望输出是“0 0 65535 0”。但它甚至不会组装。

第一条汇编指令给了我以下错误:

错误:内存输入 0 不可直接寻址

第二条指令给了我一个不同的错误:

错误:“pcmpeqw”的后缀或操作数无效

任何帮助,将不胜感激。

0 投票
1 回答
510 浏览

c - 如何在 C 中的单个指令周期中添加 100 个整数元素的数组?

我有一个包含 100 个元素的数组,我想添加所有这 100 个元素。我正在使用与下面相同的 C 代码

让我们假设处理器需要 100 个指令周期来添加 100 个元素,这会降低应用程序的速度。所以,我想知道是否有任何指令可以在单个指令周期中添加 100 个元素以加速应用程序。

0 投票
1 回答
113 浏览

gcc - -g 标志更改程序的运行时和编译

我正在编写一个程序,试图使用 SSE 和 AVX SIMD 指令加速 Top K 过滤算法。我正在使用带有标志 -o3、-msse3 和 -lrt 的 icc 编译我的程序,运行时间约为 30 毫秒。但是,当我在末尾添加 -g 标志以使用 vtune 或 gdb 时,程序运行所需的时间会跳到 ~ 100 毫秒。

有人可以解释为什么会发生这种情况吗?我很困惑为什么 -g 会改变程序的编译。

0 投票
1 回答
359 浏览

performance - Inline ASM: Use of MMX returns NaN seconds on timer

Problem

I am trying to find out whether mmx or xmm registers are faster for copying elements of an array to another array (I know about memcpy() but I need this function for a very specific purpose).

My souce code is below. The relevant function is copyarray(). I can use either mmx or xmm registers with movq or movsd respectively, and the result is correct. However, when I use mmx registers, any timer I use (either clock() or QueryPerformanceCounter) to time the operations returns NaN.

Compiled with: gcc -std=c99 -O2 -m32 -msse3 -mincoming-stack-boundary=2 -mfpmath=sse,387 -masm=intel copyasm.c -o copyasm.exe

This is a very strange bug and I cannot figure out why using mmx registers would cause a timer to return NaN seconds, while using xmm registers in exactly the same code returns a valid time value

EDIT

Results using xmm registers:

Results using mmx register:

Source Code

0 投票
1 回答
3169 浏览

assembly - 如何通过 mmx 计算 3 个整数的平均值?

我有一个问题,希望你能帮助。我的任务是使用 mmx、xmm 或 sse 命令对图像(从 Java 发送)进行灰度处理。我已经在 C 和 asm 中完成了这个(使用逻辑取 R、G 和 b,然后找到 avg),现在我需要使用 mmx/xmm/sse AND 来提高性能(否则,教授拒绝接受它,明天是考试日)。

灰度化是取一个像素的 R、G 和 B 并用 R、G 和 B 的平均值替换它们。这很容易通过简单地将三个组合并做 idiv 来做到这一点,但是 mmx 中没有除法,所以我需要即兴发挥,我没有想法。

xmm 的问题是简单的“movaps xmm0,[rel v1]”让我崩溃,我有点没有时间去探索它,所以最好只通过 mmx 来做这件事。

昨天我写了一些使用 mmx 的东西,但它的工作速度比 C 代码慢 30 倍 :( 嗯,我也不需要史诗般的性能——只要能正常工作的东西。

有任何想法吗?也许可以通过移位或类似的方法来完成除法?非常感谢帮助,谢谢。

0 投票
0 回答
61 浏览

sdl - 为什么 SDL2 中缺少 SDL_HasMMXExt

在 SDL 1.2 中,有SDL_HasMMXExt. 见这里。文件的完整来源可以在这里看到。

在 SDL 2 中,缺少该功能。为什么?可以在此处查看同一文件的 SDL2 的完整源代码。

SDL 1.2 的相关代码是这样的:

CPU_getCPUIDFeaturesExtSDL2 中也缺少。为什么被移除?

0 投票
0 回答
102 浏览

c++ - ASM - 使用扩展指令执行 (int + int)* 浮点常量的最佳方法是什么?

我正在执行一个函数来响应 WM_MOUSEMOVE 在 opengl 应用程序中移动我的相机。

功能是取STARTING POINT(wm_lbuttondown命令中的旧lParam)并从STARTING POINT中减去CURRENT POINT,然后将结果乘以一些浮点系数。

好的,它有效,但我正在尝试练习使用 asm 和所有那些不错的寄存器。所以这是我的代码,但使用 mmx 寄存器

问题是 - 这是做如此简单的运动的一种快速方法,还是我可以选择其他方式来做这些事情?谢谢

0 投票
0 回答
581 浏览

c# - 如何在 C# 中使用 MMX 代码进行图像处理

我正在编写一个使用 C# 进行太多 128 位计算的应用程序。(图像处理 - 16bit R、16bit G、16bit B、16bit A)

我可以在一个周期内计算这 2 个 64 位 RGBA 颜色吗?

有没有办法使用汇编(MMX)代码来进行计算。

0 投票
1 回答
137 浏览

c - 装配 MMX 点积分段错误

我正在尝试使用汇编语言对两个小数组执行简单的点积计算。这是我的代码:

从makefile编译:

结果是:

使用gdb分析原因显示如下:

我不知道为什么我不能将结果移回寄存器。任何建议都受到高度赞赏。

提前多次感谢您。

文森特

0 投票
1 回答
299 浏览

assembly - 如何将通用64位寄存器的值写入MMX?

我正在使用 x64 程序集,Visual C++ 2010/MASM 告诉我指令

movq mm0, rax

包含“无效的指令操作数”。

这真的是非法的,还是可能是一个错误?如何在不使用指令的情况下执行此过程?