Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top