问题标签 [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.
optimization - ARM asm中的快速饱和和移位两个半字
我在一个 32 位字中有两个带符号的 16 位值,我需要将它们右移(除)在常数值(它可以是从 1 到 6)并饱和到字节(0..0xFF)。
例如,
- shift=5的0x FFE1 00AA必须变为0x 0000 0005;
- 0x 2345 1234必须变成0x 00FF 0091
我正在尝试同时使值饱和,类似于以下伪代码:
但我得到的代码非常丑陋和缓慢。:) 我现在拥有的最好(最快)的东西是每一半的单独饱和度,如下所示:
但它是10个周期。:(可以更快吗?
ps:后来我找到了USAT16指令,但它只适用于ARMv6。我需要代码才能在 ARMv5TE 和 ARMv4 上工作。
编辑:现在我重写我的第一个代码:
但它并不美丽。
c++ - 从脚本中较高的函数调用脚本中较低的函数
我试图想出一种方法让计算机为我做一些工作。我正在使用 SIMD (SSE2 & SSE3) 来计算叉积,我想知道它是否可以更快。目前我有以下内容:
如您所见,那里有四个_mm_shuffle_ps
,我想知道是否可以将它们替换为 and 的组合,_mm_unpackhi_ps
分别_mm_unpacklo_ps
返回a2 a3 b2 b3
anda0 a1 b0 b1
和稍快一些。
我无法在纸上弄清楚,但我想到了一个解决方案。如果让计算机蛮力执行所需的步骤怎么办?只需递归地遍历不同的选项,看看什么给出了正确的答案。
我让它与乘法一起工作,当我希望它返回(3、12、27、0)时,它会返回这个:
非常好,如果我自己这么说的话。
然而,当我想实现分裂时,我偶然发现了一个问题。乘法不仅要调用乘法,还必须调用除法。好的,所以我们把除法放在乘法之上。但是divide不仅要调用divide,还得调用multiply,在脚本中比较低,所以还不存在。
我从 Visual C++ 中的一个空控制台应用程序开始,并将所有内容都放在 QuadTests.cpp 中。
如何确保这两个函数可以相互调用?
提前致谢。
loops - Visual Studio 的循环矢量化(手动和自动)有哪些资源?
我看到了一些 gcc 的资源,但没有看到 Visual Studio 的资源。
任何人都有参考资料、例子和技巧的宝库吗?
c - 英特尔 x86 SSE SIMD 指令入门
我想了解有关使用SSE的更多信息。
除了显而易见的阅读英特尔® 64 和 IA-32 架构软件开发人员手册之外,还有哪些学习方法?
主要是我有兴趣使用GCC X86 Built-in Functions。
programming-languages - SIMD 编程语言
在过去的几年里,我做了很多 SIMD 编程,大部分时间我一直依赖编译器内部函数(例如用于 SSE 编程的函数)或编程汇编来获得真正漂亮的东西。然而,到目前为止,我几乎找不到任何内置支持 SIMD 的编程语言。
现在显然有一些着色器语言,如 HLSL、Cg 和 GLSL,它们对这类东西具有本机支持,但是,我正在寻找至少能够在没有自动矢量化的情况下编译为 SSE,但具有对矢量操作的内置支持的东西. 这样的语言存在吗?
这是一个(部分)Cg 着色器的例子,它做一个聚光灯,就语法而言,这可能是最接近我正在寻找的。
在这种语言中真正必须的东西是:
- 内置调酒运算符
- 矢量操作(点、交叉、归一化、饱和、反射等)
- 支持自定义数据类型(结构)
- 动态分支会很好(for循环,if语句)
vectorization - 什么是“矢量化”?
现在有好几次,我在 matlab、fortran 中遇到过这个术语……其他……但我从来没有找到解释它是什么意思,它有什么作用?所以我在这里问,什么是矢量化,例如,“循环被矢量化”是什么意思?
loops - 从 Haskell 生成矢量代码?
是否有可能让 GHC 为各种 SSE 代生成 SIMD 代码?
例如。有这样的程序
我可以看到生成的代码(为 64 位 x86 编译)在标量模式下使用 SSE 指令(C 和 asm 后端)。所以addsd而不是addpd。对于我从事的程序类型,向量指令的使用对性能很重要。对于像我这样的新手来说,是否有一种简单的方法可以让 GHC 使用 SSE 对代码进行 SIMD 化?
simd - SSE 和超线程
SSE 寄存器是否在逻辑处理器(超线程)之间共享或复制?我能否期望 SSE 繁重程序的并行化与普通程序具有相同的加速(英特尔声称具有超线程的处理器为 30%)?
assembly - 快速的寄存器内字节?
给定一个 4 字节的寄存器(或 SIMD 的 16 个字节),必须有一种有效的方法来使用几条指令对寄存器中的字节进行排序。
提前致谢。
c# - Mono.Simd Vector3(浮点数)丢失?
嘿,我正在尝试使用 Mono 的 SIMD 在我的项目中处理坐标(X,Y,Z),但我只看到对 Vector2 和 Vector4 类型的支持。以前有没有人遇到过这种情况,有什么解决方法吗?
提前致谢。