问题标签 [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.
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?
d - SSE2 movddup 不移动值
有人不能向我解释为什么这个程序的输出是[nan, nan]
?该代码应该将 的值加载d
到 XMM1 寄存器的高 64 位和低 64 位,然后将 XMM1 的内容移动到a
. 因为a
没有初始化为一组特定的值,所以 D 将每个元素初始化为nan
. 如果movupd
指令不在 objdump 中,我会理解结果,但指令在那里。想法?
这是主函数的objdump:
assembly - 是否可以使用 SSE 和 SSE2 制作 128 位宽的整数?
我希望进一步了解 SSE2 的功能,并想知道是否可以制作一个支持加法、减法、异或和乘法的 128 位宽整数?
c - 如何在不作为联合访问的情况下将 __m128d simd 向量的内容存储为双精度数?
我要优化的代码基本上是一个简单但很大的算术公式,自动分析代码以并行计算独立的乘法/加法应该相当简单,但我读到自动向量化仅适用于循环。
我现在已经读过很多次了,应该不惜一切代价避免通过联合或其他方式访问向量中的单个元素,而应该用 _mm_shuffle_pd 代替(我正在处理双精度)...
我似乎不知道如何将 __m128d 向量的内容存储为双精度而不将其作为联合访问。此外,与标量代码相比,这样的操作是否会带来任何性能提升?
另外,这两个工会看起来丑陋可笑,但是在使用时
试图将 indexX 声明为 dvec,编译器抱怨 dvec 未声明。
x86 - 带有 SSSE3 标志的 ROS(机器人操作系统)
我最近开始使用 ROS,但遇到了一个问题。我需要使用一些需要 SSE2、SSE3 和 SSSE3 CPU 扩展的类。
我试图编辑我的 ROS 包的 manifest.xml 文件,例如
但它没有用!
该代码在“非 ROS 项目”中运行良好,但不知何故,编译器似乎忽略了 cflags。
我正在使用支持芯片扩展的 LinuxMint (ubuntu 12.04)。
我需要把旗帜放在哪里?
c - 如何使用 SSE2 添加数组中的所有元素?
假设我有一个非常简单的代码,例如:
我基本上想用 SSE2 做同样的操作。我怎样才能做到这一点?
c - MMX SSE 到 C 代码转换时图像质量下降
我正在将 MMX SSE 转换为等效的 C 代码。我几乎已经转换了它,但我得到的图像质量不合适,或者我可以看到图像中有一些噪点。我正在调试过去 5 天的代码,但我没有得到任何原因。如果你们调查这个问题并帮助我,我会非常高兴。
原始 SSE 代码:
我转换的代码如下
抱歉,如果代码不那么可读。w
并h
表示宽度和高度。out_h
并且out_v
是稍后用于其他目的的两个参数。
x86 - 如何使用 SSE2 加载 16 x 8 位整数
假设我有 16 个 8 位整数,我想将它们加载到__m128i
使用 SSE2 中:
我可以使用静态方式执行此操作,_mm_set_epi8
但我想动态执行此操作;这些值将在运行时决定。
我怎样才能做到这一点?
c++ - 从数组中向量化提取特定的短裤图案,并插入到新数组中
我有一个短裤数组,我想在其中获取一半的值并将它们放入一个大小为一半的新数组中。我想以这种模式获取特定值,其中每个块是 128 位(8 个短裤)。这是我将使用的唯一模式,它不需要是“任何通用模式”!
白色的值被丢弃。我的数组大小将始终是 2 的幂。这是它的模糊概念,未矢量化:
我从这样的事情开始:
我可以使用掩码迭代执行_mm_and_si128
以获取我正在寻找的值,与 结合_mm_or_si128
并将结果放入newdata128[i]
. 但是,我不知道如何将事物“压缩”在一起并删除白色值。看来如果我能做到这一点,我就根本不需要面具了。
怎么可能呢?
无论如何,最终我也想做与此操作相反的操作,并创建一个两倍大小的新数组并在其中展开当前值。
我还将在白色块中插入新值,我必须用原始数据中的每对短裤迭代地计算这些值。这种计算不能向量化,但结果值的插入应该是向量化的。如何将当前值“展开”到新数组中,插入计算值的最佳方法是什么?我是否应该为每个 128 位迭代计算它们并将它们放入自己的临时块(64 位?128 位?),然后做一些事情来批量插入?还是应该将它们直接放置到我的目标__m128i
中,因为它的成本似乎应该等同于放入临时设备?如果是这样,如何在不弄乱我的其他价值观的情况下做到这一点?
我宁愿为此最多使用 SSE2 操作。
c++ - SSE:将 double** 转换为 _m128d**
将普通的 double* 转换为 _m128d* 非常简单易懂。假设你有一个这样的数组:
然后_m128d
演示文稿看起来像这样:
因为总是存储 2 个值,如果你可以这么说(这就是我的想象)。但是,如果我改用 3x3 矩阵,这些值将如何拆分???例如:
我试图总结矩阵中的所有值,但并没有真正了解如何使用 SSE 有效地做到这一点,因此我需要了解如何处理矩阵_m128d**
。有人知道吗?