问题标签 [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 回答
882 浏览

c - 使用 SIMD 进行优化的限制是什么?

我需要使用 Cell Processor 的 SPE 上的 SIMD 扩展来优化一些 C 代码,这些代码会进行大量物理计算。每个向量算子可以同时处理 4 个浮点数。因此,理想情况下,我希望在最乐观的情况下能实现 4 倍的加速。

你认为使用向量运算符可以带来更大的加速吗?

谢谢

0 投票
1 回答
404 浏览

programming-languages - 没有原始 SIMD 数据类型的理由

(对不起,如果这听起来像咆哮,但这是一个真实的问题,我会很感激真实的答案)

我知道由于 C 太老了,当时添加它可能没有意义(当时 MMX 甚至不存在)。但是从那时起就有了 C99,并且仍然没有 SIMD 变量的标准(据我所知)。

通过“SIMD 变量”,我的意思是:

我也明白这可以通过结构来完成,并且(理论上)编译器应该优化它以在适当的时候使用 SIMD。

但我最近看到了Qt Labs的一篇文章,其中包含一个类型为“__m128i”(看起来显然是非标准的)的示例,而不是依赖于优化。考虑到 Qt 宣传这大大提高了 Qt 的速度,我猜编译器优化是不够的,至少对于某些程序员来说是这样。

如果只是C,我会认为C是愚蠢的。但是,据我所知,C++、Java 和 C# 等较新的语言也不包括这些。C# 有 Mono.SIMD 但它不是原始类型(并且由于 C# 有一个“十进制”关键字,我不认为他们试图保存类型)。

所以这就是我注意到的:向量原始类型的语言似乎是例外而不是规则。因为向量基元类型看起来很明显,我猜一定有一些正当的理由不包括这些类型。

这里有人知道为什么这些类型经常被排除在外吗?一些指向反对添加它们的理由的链接?

0 投票
3 回答
1584 浏览

sse - SIMD 编程

我正在使用 Core2Duo 处理器(编译器 gcc 4.4.1)中可用的 SSE 扩展。我看到有 16 个寄存器可用,每个寄存器都是 128 位长。现在,我可以在一个寄存器中容纳 4 个整数值,在另一个寄存器中容纳 4 个整数值,并且使用内在函数我可以将它们添加到一条指令中。明显的优势是这种方式我只需要 1 条指令而不是 4 条指令。

我的问题是“这就是 SIMD 的全部内容吗?”。让我有 a1、a2、a3、a4、a5、a6、a7、a8 和 b1、b2、b3、b4、b5、b6、b7、b8。令 A1、A2 为向量寄存器。现在,A1 <<< (a1, a2, a3, a4) 和 B1 <<< (b1, b2, b3, b4) 和 add (A1, B1) 将执行向量加法。

令 A2 <<< (a5, a6, a7, a8), B2 <<< (b5, b6, b7, b8)。是否有可以同时执行 add(A1, B1) 和 add(A2, B2) 的添加指令。

core2duo 中有多少向量功能单元可用,我在哪里可以获得这些信息?

高度赞赏与这些相关的任何其他信息来源。

0 投票
1 回答
2375 浏览

arm - 如何使用NEON比较(大于或等于)指令?

一般如何使用 NEON 比较指令?

这是一个案例,我想使用大于或等于指令?

目前我有一个,

在 NEON 中,我想以同样的方式使用 x,只是这次 x 是一个向量。

0 投票
3 回答
3554 浏览

c - GCC 中用于除法的 SIMD (SSE) 指令

如果可能,我想使用 SSE 指令优化以下代码段:

这可能吗?

0 投票
2 回答
799 浏览

ipad - 如何在 iPad A4 处理器上执行整数 SIMD 运算?

我觉得需要速度。双 for 循环正在扼杀我的 iPad 应用程序性能。我需要 SIMD。如何在 iPad A4 处理器上执行整数 SIMD 操作?

谢谢,
道格

0 投票
2 回答
669 浏览

c - 求幂的 SIMD 代码

我正在使用 SIMD 来计算快速求幂结果。我将时间与非 simd 代码进行比较。取幂是使用平方和乘法算法实现的。

普通(非simd)版本的代码:

SIMD 版本:

问题是虽然计算正确,但 simd 版本比非 simd 版本花费更多时间。

请帮我调试原因。也欢迎任何有关 SIMD 编码的建议。

谢谢和问候,阿努普。

0 投票
4 回答
2013 浏览

c - SIMD 版本检查

我正在使用 Intel Core2Duo E4500 处理器。它应该有SSE3,SSSE3设施。但是,如果我尝试在程序中使用它们,则会显示以下错误“未启用 SSE3 指令集”

有任何想法吗?

0 投票
3 回答
3298 浏览

c++ - c++如何编写代码编译器可以轻松优化SIMD?

我在 Visual Studio 2008 中工作,在项目设置中我看到“激活扩展指令集”选项,我可以将其设置为无、SSE 或 SSE2

那么编译器会尝试将指令一起批处理以利用 SIMD 指令吗?

在如何优化代码以使编译器可以使用这些扩展制作高效的汇编程序时,是否有任何规则可以遵循?

例如,目前我正在研究光线追踪器。着色器接受一些输入并根据输入计算输出颜色,如下所示:

例如,编写着色器代码以便在一个指令调用中对 4 个不同的像素进行着色是否有益?像这样的东西:

一次处理多个数据单元。这有利于使编译器使用 SSE 指令吗?

谢谢!

0 投票
4 回答
1196 浏览

algorithm - SIMD 优化难题

我想使用 SIMD(SSE2 等)优化以下功能:

这似乎是一个非常可矢量化的任务,除了所需的指令不存在......

我们可以假设 N 非常大(10^12 到 10^18)并且 size~sqrt(N)。我们还可以假设 p 只能取 -1、0 和 1 的值;所以我们不需要真正的乘法,(N/i)*p[i] 可以用四个指令(pcmpgt、pxor、psub、pand)来完成,如果我们能以某种方式计算 N/i。