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

我知道,由于C是如此旧,因此将其添加到当时可能没有意义(MMX甚至不存在)。但是从那时起,就有C99,但仍然没有SIMD变量的标准(据我所知)。

作者:“ simd变量”,我的意思是:

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

我还了解到这可以使用结构来完成,并且(从理论上)编译器应在适当的情况下优化它以使用SIMD。

但是我最近看到了 QT实验室 其中包括一个类型的示例,例如“ __m128i”(显然是非标准),而不是依靠优化。考虑到QT正在广告宣传这一点,因为它大大提高了QT的速度,我想至少对于某些程序员而言,编译器的优化是不够的。

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

因此,这是我注意到的:具有矢量原始类型的语言似乎是例外,而不是规则。因为矢量原始类型看起来很明显,所以我猜想不包括这些类型有一些体面的理由。

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

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top