Обоснование отсутствия примитивных типов данных SIMD - PullRequest
2 голосов
/ 06 сентября 2010

(Извините, если это звучит как напыщенная речь, но это настоящий вопрос, и я был бы признателен за реальные ответы)

Я понимаю, что, поскольку 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 # имеет ключевое слово «десятичное», я не думаю, что они пытались сохранить типы).

Итак, вот что я заметил: языки с векторными примитивными типами кажутся исключением, а не правилом. Поскольку векторные примитивные типы выглядят настолько очевидными, я предполагаю, что должны быть некоторые веские причины НЕ включать эти типы.

Кто-нибудь здесь знает, почему эти типы так часто исключаются? Некоторые ссылки на обоснования против их добавления?

1 Ответ

5 голосов
/ 06 сентября 2010

Потому что не все процессоры поддерживают SIMD инструкции.Такие языки, как C и C ++ (и даже Java и C #), предназначены для использования на различных видах оборудования, таких как микроконтроллеры, в дополнение к настольным компьютерам.

В настоящее время векторизация алгоритмов не является автоматической (хотя этоактивно исследуется).«Векторизуемые» алгоритмы должны быть написаны явно, чтобы использовать любые SIMD-возможности среды исполнения.

...