Обоснование без примитивных типов данных SIMD
-
01-10-2019 - |
Вопрос
(Извините, если это звучит как разглагольство, но это реальный вопрос, и я признательрую реальные ответы)
Я понимаю, что поскольку C настолько старым, это могло бы не иметь смысла добавлять его, затем (MMX даже не существует тогда). Но с тех пор был C99, и все же нет стандарта для переменных SIMD (насколько я знаю).
«SIMD переменные», я имею в виду что-то вроде:
vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;
Я также понимаю, что это можно сделать со структурами и (теоретически) компилятор должен оптимизировать его, чтобы использовать SIMD при необходимости в любом случае.
Но я недавно видел пост от Qt Labs который включает в себя пример с типами типа «__М128i» (который выглядит явно нестандартным), а не полагаться на оптимизацию. Учитывая QT, реклама это как значительно улучшая скорость QT, я угадаю оптимизацию компилятора недостаточны, по крайней мере, для некоторых программистов.
Если бы это было просто C, я бы подумал, что был глуп. Но, насколько я знаю, новые языки, такие как C ++, Java и C #, также не включают их. C # имеет MONO.SIMD, но это не примитивный тип (а поскольку C # имеет ключевое слово «десятичное», я не думаю, что они пытаются сохранить типы).
Итак, вот что я заметил: языки с векторными примитивными типами, кажется, исключение, а не правило. Поскольку векторные примитивные типы выглядят так очевидно, я предполагаю, что должно быть приличные причины не включать эти типы.
Кто-нибудь здесь знает, почему эти типы так часто исключены? Некоторые ссылки на рациона против их добавления?
Решение
Потому что не все процессоры поддерживают инструкции SIMD. Языки, такие как C и C ++ (и даже Java и C #), предназначены для использования на различных видах оборудования, таких как микроконтроллеры, в дополнение к настольным компьютерам.
В настоящее время векторизация алгоритмов не является автоматической (хотя, что активно исследуется). Алгоритмы, которые являются «вежливыми», должны быть явно написаны, чтобы воспользоваться любыми возможностями SIMD в среде выполнения.