2

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

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

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

vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;

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

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

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

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

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

4

1 回答 1

5

因为并非所有处理器都支持 SIMD 指令。除了台式计算机之外,C 和 C++(甚至 Java 和 C#)等语言被设计用于不同类型的硬件,如微控制器。

目前,算法的矢量化不是自动的(尽管正在积极研究中)。必须明确编写“可向量化”的算法以利用执行环境的任何 SIMD 功能。

于 2010-09-06T01:04:19.460 回答