问题标签 [simd]

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 投票
5 回答
1184 浏览

x86 - 是否可以矢量化 myNum += a[b[i]] * c[i]; 在 x86_64 上?

我将使用什么内在函数在 x86_64 上对以下内容进行矢量化(如果甚至可以矢量化)?

0 投票
4 回答
2346 浏览

c++ - 带有 C++ 的 OS X 中的 SIMD 索尼矢量数学库

我目前正在为作业编写一个非常简单的游戏引擎,并且为了使代码更好,我决定使用向量数学库。我的一位讲师向我展示了用于子弹物理引擎的 Sony 矢量数学库,就我所见,它非常棒。我已经让它在 Linux 上运行得很好,但我在将它移植到 OS X(英特尔、雪豹)上时遇到了问题。我已将文件正确包含在我的项目中,但库的 C++ 版本似乎无法编译。我可以让 C 版本的库工作,但与 C++ 版本相比,它的 API 相当糟糕,使用这个库的全部原因是首先整理代码。

http://glosx.blogspot.com/2008/07/sony-vector-math-library.html

我偶然发现的这篇博文似乎暗示编译器出了点问题?它相当短,所以我无法从中获取很多信息。

当我尝试使用 C++ 版本时,我收到以下错误(每个错误的扩展视图):

第二个错误:

最后在 main.cpp 文件末尾出现两个错误:

我已经用谷歌搜索了我的心,但我似乎找不到任何答案或任何东西可以为我指明正确的方向,所以任何帮助都会得到很大的帮助。

谢谢,

0 投票
2 回答
539 浏览

c++ - Visual Studio 编译器标志 /arch 和性能

我刚刚注意到在我们的项目中没有设置“启用增强指令集”标志,这可能只是一个疏忽。

在启用该标志之前,我想问一下是否有人看到启用它的任何实际性能改进?

我想我们会看到一些改进,我们的应用程序会不断地进行基于浮点的计算,但这不是主要部分。

0 投票
1 回答
662 浏览

algorithm - 获取特殊素数的浮点数模的快速、可向量化方法?

有没有一种快速取浮点数模数的方法?

对于整数,梅森素数有一些技巧,因此可以计算 y = x MOD 2^31-1 而无需除法。 整数技巧

可以对浮点数应用任何类似的技巧吗?

优选地,以一种可以转换为矢量/SIMD 操作,或移动到 GPGPU 代码中的方式。这排除了对浮点数据使用整数计算。

我感兴趣的素数是 2^7-1 和 2^31-1,尽管如果浮点数有更有效的素数,那将是受欢迎的。

该算法的一个预期用途是在将输入浮点数读入算法时计算它们的运行“校验和”。为了避免占用过多的计算能力,我想保持这种轻量级。

显然,类似的技术用于更大的数字,特别是 2^127 - 1。不幸的是,论文中的数学超出了我的范围,我无法弄清楚如何将其转换为更小的素数。
浮点 MOD 2^127 - 1 - HASH127 示例

0 投票
3 回答
3680 浏览

assembly - 在 SSE2/SSSE3 上转置 8 个 16 位元素的寄存器

(我是 SSE/asm 的新手,如果这很明显或多余,我深表歉意)

有没有比执行 24 unpck[lh]ps 和 8/16+ shuffle 和使用 8 个额外寄存器更好的方法来转置包含 16 位值的 8 个 SSE 寄存器?(注意使用最多 SSSE 3 指令,Intel Merom,也就是缺少 SSE4 中的 BLEND*。)

假设您有寄存器 v[0-7] 并使用 t0-t7 作为辅助寄存器。在伪内在代码中:

每个 unpck* 需要 3 个周期的延迟,或 2 个周期用于互惠吞吐量(由 Agner 报告)。这会扼杀使用 SSE(在此代码上)的大部分性能提升,因为这种寄存器舞蹈几乎每个元素需要一个周期。我试图理解 x86 转置的 x264 的 asm 文件,但未能理解宏。

谢谢!

0 投票
5 回答
1706 浏览

x86 - CPU 中的新指令集

每一代新的CPU都会引入一些新指令集,即MMX、3DNOW、SSE等。

我有几个关于它们的一般性问题:

  1. 如果某些程序使用例如 SSE 指令,它可以在不支持 SSE 的 CPU 上运行吗?
  2. 如果是,是否意味着这些指令将被更改为更多数量的更简单的指令?
  3. 如果不是,这是否意味着此类新指令的真正性能影响将在几年后大多数 CPU 将支持此类技术(因此不会有任何不兼容性)?
  4. 当我编译一个带有优化的 C++ 程序时,这是否意味着它将使用一些新指令?(我知道这取决于很多因素,尤其是代码,但我想要一些一般性的答案)。还是它们主要用于用 asm 编写的程序?
0 投票
4 回答
2252 浏览

assembly - VC++ 2K8 中 SSE 编码的内在函数与内联 ASM

我以前为 SSE 做过一些内联 ASM 编码,即使对于不了解 ASM 的人来说也不是太难。但我注意到 MS 还提供了包含许多此类特殊指令的内在函数。

是否存在特定的性能差异,或者有任何其他强有力的理由为什么应该在另一个之上使用一个?

重复标题,这是专门介绍 VC++ 2008 为非托管、本机 C++ 公开的内在函数。

0 投票
4 回答
6855 浏览

arm - 如何使用 ARM Neon 内在函数重新排序矢量数据?

这与 ARM Neon SIMD 编码特别相关。我正在为视频解码器中的某些模块使用 ARM Neon instrinsics。我有一个矢量化数据如下:

Neon 寄存器中有四个 32 位元素 - 例如 Q0 - 大小为 128 位。

在其他 Neon 寄存器中还有另外四个 32 位元素,例如 Q1,其大小为 128 位。

我希望最终数据有序,如下所示:

什么 Neon instrinsics 可以实现所需的数据顺序?

0 投票
4 回答
2406 浏览

c++ - 用 C++ 实现 SIMD

我正在编写一些代码,并试图尽可能地优化它,基本上让它在一定的时间限制下运行。

以下是调用...

...以下是执行的内容。

我正在使用英特尔的 TBB 来优化它。但我也一直在阅读有关 SIMD 和 SSE2 以及类似性质的内容。所以我的问题是,如何将变量 (i,j,k) 存储在寄存器中,以便 CPU 可以更快地访问它们?我认为答案与实施 SSE2 或它的一些变体有关,但我不知道如何做到这一点。有任何想法吗?

编辑:这将在 Linux 机器上运行,但我相信使用英特尔的编译器。如果有帮助,我必须在执行任何操作以确保编译器工作之前运行以下命令... source /opt/intel/Compiler/11.1/064/bin/intel64/iccvars_intel64.csh; source /opt/intel/tbb/2.2/bin/intel64/tbbvars.csh ...然后编译我做: icc -ltbb test.cxx -o test

如果没有简单的方法来实现 SSE2,关于如何进一步优化代码的任何建议?

谢谢, 赫里斯托

0 投票
19 回答
13109 浏览

c - 线性搜索的速度有多快?

我正在寻找优化这个线性搜索:

数组已排序,函数应该返回大于或等于键的第一个元素的索引。它们的数组不大(少于 200 个元素),并且会为大量搜索准备一次。如果需要,可以将第 n 个之后的数组元素初始化为适当的值,如果这样可以加快搜索速度。

不,不允许二分查找,只能线性查找。

编辑:我关于这个主题的所有知识现在都在这篇博文中进行了总结。