(Извините, если это звучит как напыщенная речь, но это настоящий вопрос, и я был бы признателен за реальные ответы)
Я понимаю, что, поскольку C настолько стар, возможно, не имело смысла добавлять его тогда (MMX тогда даже не существовал). Но с тех пор был C99, и до сих пор не существует стандарта для SIMD-переменных (насколько я знаю).
Под «переменными SIMD» я подразумеваю что-то вроде:
vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;
Я также понимаю, что это можно сделать с помощью структур, и (теоретически) компилятор должен оптимизировать его для использования SIMD при необходимости в любом случае.
Но недавно я увидел сообщение из Qt Labs , которое включает пример с типами типа "__m128i" (которые выглядят явно нестандартными) вместо того, чтобы полагаться на оптимизацию. Учитывая, что Qt рекламирует это как значительное улучшение скорости Qt, я предполагаю, что оптимизации компилятора недостаточно, по крайней мере для некоторых программистов.
Если бы это был просто С, я бы подумал, что С глупый. Но, насколько мне известно, в более новых языках, таких как C ++, Java и C #, их тоже нет. C # имеет Mono.SIMD, но это не примитивный тип (а поскольку C # имеет ключевое слово «десятичное», я не думаю, что они пытались сохранить типы).
Итак, вот что я заметил: языки с векторными примитивными типами кажутся исключением, а не правилом.
Поскольку векторные примитивные типы выглядят настолько очевидными, я предполагаю, что должны быть некоторые веские причины НЕ включать эти типы.
Кто-нибудь здесь знает, почему эти типы так часто исключаются? Некоторые ссылки на обоснования против их добавления?