Programming languages 无基本SIMD数据类型的基本原理

Programming languages 无基本SIMD数据类型的基本原理,programming-languages,language-design,simd,Programming Languages,Language Design,Simd,(如果这听起来像是咆哮,很抱歉,但这是一个真正的问题,我希望得到真正的答案) 我理解,既然C是如此古老,那么在当时添加它可能没有意义(MMX在当时甚至不存在)。但从那时起就有了C99,而且仍然没有SIMD变量的标准(据我所知) “SIMD变量”指的是: vec2_int a = {2, 2}; vec2_int b = {3, 3}; a += b; 我也知道这可以通过结构来实现,而且(理论上)编译器应该在适当的时候优化它以使用SIMD 但我最近看到了一篇文章,其中包含了一个类型为“uu m1

(如果这听起来像是咆哮,很抱歉,但这是一个真正的问题,我希望得到真正的答案)

我理解,既然C是如此古老,那么在当时添加它可能没有意义(MMX在当时甚至不存在)。但从那时起就有了C99,而且仍然没有SIMD变量的标准(据我所知)

“SIMD变量”指的是:

vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;
我也知道这可以通过结构来实现,而且(理论上)编译器应该在适当的时候优化它以使用SIMD

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

如果只是C,我会认为C是愚蠢的。但是,据我所知,新的语言,如C++、java和C语言也不包括这些。C#有Mono.SIMD,但它不是一个基本类型(而且由于C#有一个“decimal”关键字,我认为他们没有试图保存类型)

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


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

,因为并非所有处理器都支持SIMD指令。C语言和C++语言(甚至java和C语言)都被设计用于不同类型的硬件,如微型计算机,除了桌面计算机之外。
目前,算法的矢量化不是自动的(尽管这一点正在积极研究中)。必须明确编写“可矢量化”的算法,以利用执行环境的任何SIMD功能。

是的,但自动优化SIMD ify算法是很困难的。编写SIMD算法的非SIMD版本很简单。没错,但并非所有算法都是SIMD可初始化的。@在计算机中-并非所有算法都与字符串相关,但C#有一个字符串基元类型。您的参数可能有效,但仍然不足以证明本机SIMD类型的广泛缺乏是合理的。就像我说的,如果只有C一个人在这件事上,我会理解的。但是没有本地SIMD支持的流行语言的数量远远超过了使用SIMD的语言……如果流行是个问题,那么答案可能是没有多少人听说过或经常使用它。至少对于C++来说,哲学只是增加对程序员来说“普遍有用”的语言特征。SIMD可能没有做到这一点,即使它在某些情况下非常有用。@silico-我想这个解释就足够了。