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

x86 - SSE2 指令将整数寄存器类型转换为短寄存器,反之亦然

是否有任何 SSE2 指令将整数寄存器类型转换为短寄存器,反之亦然?请建议。

0 投票
0 回答
64 浏览

c# - 是否可以将 C# 与 Salsa 20/12 一起使用,以便使用 Intel/AMD SSE2 加速?

我对 eStream 项目感兴趣,并使用 C# 通过 Intel/AMD 加速来加密/解密数据流。

如何使用 C# 与 Intel/AMD 硬件进行交互,以便使以下算法起作用:

  • 萨尔萨舞 20/12
  • 索萨芒克
0 投票
1 回答
389 浏览

sse2 - 使用 SSE2 的两个 32 位有符号整数乘法

如何使用 SSE2 指令集将两个有符号 32 位整数相乘?

0 投票
2 回答
485 浏览

c - SSE2 指令将一个 8x16 寄存器转换为两个具有偶数和奇数索引元素的 4x32 寄存器

是否有任何 SSE2 指令将 8x16 寄存器转换为两个 4x32 寄存器,一个 4x32 寄存器具有来自 8x16 寄存器的奇数索引元素,另一个具有偶数索引元素?请建议。

0 投票
1 回答
279 浏览

visual-studio-2010 - 在哪里可以找到在 x86/x64 上使用 SSE2 指令的 exp(double) 的良好实现?

我已经确定 VS2010 C 库中 exp(double) 的 Microsoft 实现在 Win32(即 32 位 x86)和 x64 平台上使用不同的算法,即使我已经为 x86 平台启用了 SSE2 并验证了 SSE2代码路径取自 exp()。不幸的是,对于某些操作数,不同的算法会产生略微不同的结果(相差 1ulp)。在这些情况下,原则上我们都可以接受任一结果,但是在测试期间,Win32 和 x64 构建之间缺乏一致性对我们来说是个问题。我在哪里可以找到可以在两个平台上使用的 exp(double) 的良好(即准确和快速)替代实现?我很高兴有一个使用 SSE2 指令的汇编代码解决方案,如果需要,我可以将它从 32 位转换为 64 位或 vv。

0 投票
2 回答
1662 浏览

c++ - 如何使用 SSE2 向量化距离计算

A 和 B 是向量或长度 N,其中 N 可以在 20 到 200 的范围内。我想计算这些向量之间距离的平方,即d^2 = ||AB||^2。

到目前为止,我有:

这似乎工作正常,除了我已经分析了我的代码并且这是瓶颈(超过 50% 的时间都花在了这样做上)。我在 Win 7 上使用 Visual Studio 2012,并带有以下优化选项:/O2 /Oi /Ot /Oy-. 我的理解是 VS2012 应该自动矢量化该循环(使用 SSE2)。但是,如果我插入#pragma loop(no_vector)代码,我不会明显减速,所以我猜循环没有被矢量化。编译器通过以下消息确认:

我的问题是:

  1. 是否可以修复此代码以便 VS2012 可以对其进行矢量化?
  2. 如果没有,尝试自己对代码进行矢量化是否有意义?
  3. 你能推荐一个网站让我了解 SSE2 编码吗?
  4. 是否存在某个 N 值,低于该值的矢量化会适得其反?
  5. 是什么reason '1105'
0 投票
0 回答
539 浏览

sse - pextrd vs psrldp+movd vs 其他,哪个更适合从中提取一个元素?

我需要实现一个没有 AVX2 的类似 vpgatherdd 的机制。

说,我有 4 个 i32 偏移量包装在 xmm0 中。我需要提取 xmm0 中的每个元素来完成这项mov reg, [base + offset]工作。

问题是我应该如何提取元素?

pextrd,其延迟为 3。而且我并没有像流式一样这样做,每次运行时都会以 8 或 4 计算偏移量。

还有psrldq,其延迟为 1 ,有 1 movd,似乎我可以在 2 个周期内完成提取工作。

虽然1个周期不多,但我想知道这里哪个更好。下一个 8-offsets-extraction 是否可以隐藏这种延迟?

是否有选择长延迟指令与短延迟指令组的一般规则?

0 投票
4 回答
9724 浏览

c - 快速计算 __m128i 寄存器中设置的位数

我应该计算 __m128i 寄存器的设置位数。特别是,我应该使用以下方法编写两个能够计算寄存器位数的函数。

  1. 寄存器的设置位总数。
  2. 寄存器每个字节的设置位数。

是否存在可以全部或部分执行上述操作的内在功能?

0 投票
1 回答
3858 浏览

c - 移动 n 位的 __m128i

我有一个__m128i变量,我需要移动它的 128 位值 n 位,即喜欢_mm_srli_si128_mm_slli_si128工作,但在位而不是字节上。这样做最有效的方法是什么?

0 投票
2 回答
2291 浏览

c++ - 从 SSE 切换到 AVX 会受到惩罚吗?

我知道在没有先将所有 ymm 寄存器的上半部分清零的情况下从 AVX 指令切换到 SSE 指令的现有惩罚,但在我的机器(i7-3939K 3.2GHz)上的特殊情况下,似乎有一个非常即使我在 AVX 代码部分之前和之后明确使用 _mm256_zeroupper ,也会因为相反的方式(SSE 到 AVX)而受到很大的惩罚。

我已经编写了用于在 32768 个元素宽的 2 个缓冲区上转换 32 位浮点数和 32 位定点整数的函数。我将 SSE2 内在版本直接移植到 AVX 以一次执行 8 个元素,而不是 SSE 的 4 个,期望看到显着的性能提升,但不幸的是,相反的事情发生了。

所以,我有两个功能:

所以我启动了一个计时器,运行 ConvertPcm32FloatToPcm32Fixed 然后 ConvertPcm32FixedToPcm32Float 直接转换回来,结束计时器。函数的 SSE2 版本总共执行 15-16 微秒,但 AVX 版本需要 22-23 微秒。有点困惑,我进一步挖掘,我发现了如何加速 AVX 版本,以便它们比 SSE2 版本更快,但这是作弊。我只是在启动计时器之前运行 ConvertPcm32FloatToPcm32Fixed,然后启动计时器,然后再次运行 ConvertPcm32FloatToPcm32Fixed,然后运行 ​​ConvertPcm32FixedToPcm32Float,停止计时器。好像 SSE 对 AVX 有很大的惩罚,如果我首先通过试运行“启动”AVX 版本,AVX 执行时间会下降到 12 微秒,而对 SSE 等价物做同样的事情时,只会将时间减少 1 微秒至 14 微秒,使 AVX 成为这里的边际赢家,但前提是我作弊。我认为也许 AVX 在缓存中的表现不如 SSE,但使用 _mm_prefetch 也无济于事。

我在这里错过了什么吗?