问题标签 [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.
x86 - SSE2 指令将整数寄存器类型转换为短寄存器,反之亦然
是否有任何 SSE2 指令将整数寄存器类型转换为短寄存器,反之亦然?请建议。
c# - 是否可以将 C# 与 Salsa 20/12 一起使用,以便使用 Intel/AMD SSE2 加速?
我对 eStream 项目感兴趣,并使用 C# 通过 Intel/AMD 加速来加密/解密数据流。
如何使用 C# 与 Intel/AMD 硬件进行交互,以便使以下算法起作用:
- 萨尔萨舞 20/12
- 索萨芒克
sse2 - 使用 SSE2 的两个 32 位有符号整数乘法
如何使用 SSE2 指令集将两个有符号 32 位整数相乘?
c - SSE2 指令将一个 8x16 寄存器转换为两个具有偶数和奇数索引元素的 4x32 寄存器
是否有任何 SSE2 指令将 8x16 寄存器转换为两个 4x32 寄存器,一个 4x32 寄存器具有来自 8x16 寄存器的奇数索引元素,另一个具有偶数索引元素?请建议。
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。
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)
代码,我不会明显减速,所以我猜循环没有被矢量化。编译器通过以下消息确认:
我的问题是:
- 是否可以修复此代码以便 VS2012 可以对其进行矢量化?
- 如果没有,尝试自己对代码进行矢量化是否有意义?
- 你能推荐一个网站让我了解 SSE2 编码吗?
- 是否存在某个 N 值,低于该值的矢量化会适得其反?
- 是什么
reason '1105'
?
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 是否可以隐藏这种延迟?
是否有选择长延迟指令与短延迟指令组的一般规则?
c - 快速计算 __m128i 寄存器中设置的位数
我应该计算 __m128i 寄存器的设置位数。特别是,我应该使用以下方法编写两个能够计算寄存器位数的函数。
- 寄存器的设置位总数。
- 寄存器每个字节的设置位数。
是否存在可以全部或部分执行上述操作的内在功能?
c - 移动 n 位的 __m128i
我有一个__m128i
变量,我需要移动它的 128 位值 n 位,即喜欢_mm_srli_si128
和_mm_slli_si128
工作,但在位而不是字节上。这样做最有效的方法是什么?
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 也无济于事。
我在这里错过了什么吗?