问题标签 [sse2]

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

c - strange error during cast to __m128i

I'm trying to cast unsigned short array to __m128i:

First casting work fine, but the second one - not. I've got:

What's wrong? Can somebody help me?

0 投票
1 回答
273 浏览

d - SSE2 movddup 不移动值

有人不能向我解释为什么这个程序的输出是[nan, nan]?该代码应该将 的值加载d到 XMM1 寄存器的高 64 位和低 64 位,然后将 XMM1 的内容移动到a. 因为a没有初始化为一组特定的值,所以 D 将每个元素初始化为nan. 如果movupd指令不在 objdump 中,我会理解结果,但指令在那里。想法?

这是主函数的objdump:

0 投票
1 回答
2381 浏览

assembly - 是否可以使用 SSE 和 SSE2 制作 128 位宽的整数?

我希望进一步了解 SSE2 的功能,并想知道是否可以制作一个支持加法、减法、异或和乘法的 128 位宽整数?

0 投票
3 回答
3673 浏览

c - 如何在不作为联合访问的情况下将 __m128d simd 向量的内容存储为双精度数?

我要优化的代码基本上是一个简单但很大的算术公式,自动分析代码以并行计算独立的乘法/加法应该相当简单,但我读到自动向量化仅适用于循环。

我现在已经读过很多次了,应该不惜一切代价避免通过联合或其他方式访问向量中的单个元素,而应该用 _mm_shuffle_pd 代替(我正在处理双精度)...

我似乎不知道如何将 __m128d 向量的内容存储为双精度而不将其作为联合访问。此外,与标量代码相比,这样的操作是否会带来任何性能提升?

另外,这两个工会看起来丑陋可笑,但是在使用时

试图将 indexX 声明为 dvec,编译器抱怨 dvec 未声明。

0 投票
1 回答
258 浏览

x86 - 带有 SSSE3 标志的 ROS(机器人操作系统)

我最近开始使用 ROS,但遇到了一个问题。我需要使用一些需要 SSE2、SSE3 和 SSSE3 CPU 扩展的类。

我试图编辑我的 ROS 包的 manifest.xml 文件,例如

但它没有用!

该代码在“非 ROS 项目”中运行良好,但不知何故,编译器似乎忽略了 cflags。

我正在使用支持芯片扩展的 LinuxMint (ubuntu 12.04)。

我需要把旗帜放在哪里?

0 投票
1 回答
3372 浏览

c - 如何使用 SSE2 添加数组中的所有元素?

假设我有一个非常简单的代码,例如:

我基本上想用 SSE2 做同样的操作。我怎样才能做到这一点?

0 投票
1 回答
300 浏览

c - MMX SSE 到 C 代码转换时图像质量下降

我正在将 MMX SSE 转换为等效的 C 代码。我几乎已经转换了它,但我得到的图像质量不合适,或者我可以看到图像中有一些噪点。我正在调试过去 5 天的代码,但我没有得到任何原因。如果你们调查这个问题并帮助我,我会非常高兴。

原始 SSE 代码:

我转换的代码如下

抱歉,如果代码不那么可读。wh表示宽度和高度。out_h并且out_v是稍后用于其他目的的两个参数。

0 投票
4 回答
6258 浏览

x86 - 如何使用 SSE2 加载 16 x 8 位整数

假设我有 16 个 8 位整数,我想将它们加载到__m128i使用 SSE2 中:

我可以使用静态方式执行此操作,_mm_set_epi8但我想动态执行此操作;这些值将在运行时决定。

我怎样才能做到这一点?

0 投票
1 回答
218 浏览

c++ - 从数组中向量化提取特定的短裤图案,并插入到新数组中

我有一个短裤数组,我想在其中获取一半的值并将它们放入一个大小为一半的新数组中。我想以这种模式获取特定值,其中每个块是 128 位(8 个短裤)。这是我将使用的唯一模式,它不需要是“任何通用模式”!

白色的值被丢弃。我的数组大小将始终是 2 的幂。这是它的模糊概念,未矢量化:

我从这样的事情开始:

我可以使用掩码迭代执行_mm_and_si128以获取我正在寻找的值,与 结合_mm_or_si128并将结果放入newdata128[i]. 但是,我不知道如何将事物“压缩”在一起并删除白色值。看来如果我能做到这一点,我就根本不需要面具了。

怎么可能呢?

无论如何,最终我也想做与此操作相反的操作,并创建一个两倍大小的新数组并在其中展开当前值。

我还将在白色块中插入新值,我必须用原始数据中的每对短裤迭代地计算这些值。这种计算不能向量化,但结果值的插入应该是向量化的。如何将当前值“展开”到新数组中,插入计算值的最佳方法是什么?我是否应该为每个 128 位迭代计算它们并将它们放入自己的临时块(64 位?128 位?),然后做一些事情来批量插入?还是应该将它们直接放置到我的目标__m128i中,因为它的成本似乎应该等同于放入临时设备?如果是这样,如何在不弄乱我的其他价值观的情况下做到这一点?

我宁愿为此最多使用 SSE2 操作。

0 投票
1 回答
656 浏览

c++ - SSE:将 double** 转换为 _m128d**

将普通的 double* 转换为 _m128d* 非常简单易懂。假设你有一个这样的数组:

然后_m128d演示文稿看起来像这样:

因为总是存储 2 个值,如果你可以这么说(这就是我的想象)。但是,如果我改用 3x3 矩阵,这些值将如何拆分???例如:

我试图总结矩阵中的所有值,但并没有真正了解如何使用 SSE 有效地做到这一点,因此我需要了解如何处理矩阵_m128d**。有人知道吗?