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

optimization - ARM asm中的快速饱和和移位两个半字

我在一个 32 位字中有两个带符号的 16 位值,我需要将它们右移(除)在常数值(它可以是从 1 到 6)并饱和到字节(0..0xFF)。

例如,

  • shift=50x FFE1 00AA必须变为0x 0000 0005
  • 0x 2345 1234必须变成0x 00FF 0091

我正在尝试同时使值饱和,类似于以下伪代码:

但我得到的代码非常丑陋和缓慢。:) 我现在拥有的最好(最快)的东西是每一半的单独饱和度,如下所示:

但它是10个周期。:(可以更快吗?

ps:后来我找到了USAT16指令,但它只适用于ARMv6。我需要代码才能在 ARMv5TE 和 ARMv4 上工作。


编辑:现在我重写我的第一个代码:

但它并不美丽。

0 投票
1 回答
329 浏览

c++ - 从脚本中较高的函数调用脚本中较低的函数

我试图想出一种方法让计算机为我做一些工作。我正在使用 SIMD (SSE2 & SSE3) 来计算叉积,我想知道它是否可以更快。目前我有以下内容:

如您所见,那里有四个_mm_shuffle_ps,我想知道是否可以将它们替换为 and 的组合,_mm_unpackhi_ps分别_mm_unpacklo_ps返回a2 a3 b2 b3anda0 a1 b0 b1和稍快一些。

我无法在纸上弄清楚,但我想到了一个解决方案。如果让计算机蛮力执行所需的步骤怎么办?只需递归地遍历不同的选项,看看什么给出了正确的答案。

我让它与乘法一起工作,当我希望它返回(3、12、27、0)时,它会返回这个:

非常好,如果我自己这么说的话。

然而,当我想实现分裂时,我偶然发现了一个问题。乘法不仅要调用乘法,还必须调用除法。好的,所以我们把除法放在乘法之上。但是divide不仅要调用divide,还得调用multiply,在脚本中比较低,所以还不存在。

我从 Visual C++ 中的一个空控制台应用程序开始,并将所有内容都放在 QuadTests.cpp 中。

如何确保这两个函数可以相互调用?

提前致谢。

0 投票
2 回答
527 浏览

loops - Visual Studio 的循环矢量化(手动和自动)有哪些资源?

我看到了一些 gcc 的资源,但没有看到 Visual Studio 的资源。

任何人都有参考资料、例子和技巧的宝库吗?

0 投票
5 回答
22073 浏览

c - 英特尔 x86 SSE SIMD 指令入门

我想了解有关使用SSE的更多信息。

除了显而易见的阅读英特尔® 64 和 IA-32 架构软件开发人员手册之外,还有哪些学习方法?

主要是我有兴趣使用GCC X86 Built-in Functions

0 投票
7 回答
4008 浏览

programming-languages - SIMD 编程语言

在过去的几年里,我做了很多 SIMD 编程,大部分时间我一直依赖编译器内部函数(例如用于 SSE 编程的函数)或编程汇编来获得真正漂亮的东西。然而,到目前为止,我几乎找不到任何内置支持 SIMD 的编程语言。

现在显然有一些着色器语言,如 HLSL、Cg 和 GLSL,它们对这类东西具有本机支持,但是,我正在寻找至少能够在没有自动矢量化的情况下编译为 SSE,但具有对矢量操作的内置支持的东西. 这样的语言存在吗?

这是一个(部分)Cg 着色器的例子,它做一个聚光灯,就语法而言,这可能是最接近我正在寻找的。

在这种语言中真正必须的东西是:

  • 内置调酒运算符
  • 矢量操作(点、交叉、归一化、饱和、反射等)
  • 支持自定义数据类型(结构)
  • 动态分支会很好(for循环,if语句)
0 投票
8 回答
133568 浏览

vectorization - 什么是“矢量化”?

现在有好几次,我在 matlab、fortran 中遇到过这个术语……其他……但我从来没有找到解释它是什么意思,它有什么作用?所以我在这里问,什么是矢量化,例如,“循环被矢量化”是什么意思?

0 投票
1 回答
1040 浏览

loops - 从 Haskell 生成矢量代码?

是否有可能让 GHC 为各种 SSE 代生成 SIMD 代码?

例如。有这样的程序

我可以看到生成的代码(为 64 位 x86 编译)在标量模式下使用 SSE 指令(C 和 asm 后端)。所以addsd而不是addpd。对于我从事的程序类型,向量指令的使用对性能很重要。对于像我这样的新手来说,是否有一种简单的方法可以让 GHC 使用 SSE 对代码进行 SIMD 化?

0 投票
2 回答
3300 浏览

simd - SSE 和超线程

SSE 寄存器是否在逻辑处理器(超线程)之间共享或复制?我能否期望 SSE 繁重程序的并行化与普通程序具有相同的加速(英特尔声称具有超线程的处理器为 30%)?

0 投票
4 回答
2164 浏览

assembly - 快速的寄存器内字节?

给定一个 4 字节的寄存器(或 SIMD 的 16 个字节),必须有一种有效的方法来使用几条指令对寄存器中的字节进行排序。

提前致谢。

0 投票
1 回答
852 浏览

c# - Mono.Simd Vector3(浮点数)丢失?

嘿,我正在尝试使用 Mono 的 SIMD 在我的项目中处理坐标(X,Y,Z),但我只看到对 Vector2 和 Vector4 类型的支持。以前有没有人遇到过这种情况,有什么解决方法吗?

提前致谢。