Ответ 1
Я на 99% уверен, что основным фактором является стоимость реализации транзистора. Очевидно, что это будет очень полезно, и единственная причина, по которой он не существует, заключается в том, что стоимость реализации должна перевесить значительную выгоду.
Проблемы с кодированием пространства маловероятны; Кодирующее пространство VEX обеспечивает много места. Например, очень много, так как поле, представляющее комбинации префиксов, не является битовым полем, оно представляет собой целое число с большинством неиспользуемых значений.
Они решили реализовать его для AVX512VBMI, хотя с большими размерами элементов доступны в AVX512BW и AVX512F. Может быть, они поняли, как сильно это сосало, чтобы этого не было, и решил сделать это в любом случае. AVX512F занимает много площадей/транзисторов для реализации, так что Intel решила не реализовывать его в розничных настольных CPU для нескольких поколений.
(Часть этого заключается в том, что в наши дни много кода, который может использовать новые наборы инструкций, записывается для запуска на известных серверах вместо диспетчеризации времени выполнения для использования на клиентских машинах).
Согласно Википедии, AVX512VBMI не наступает до Cannonlake, но тогда у нас будет vpermi2b
, который выполняет 64 параллельных поиска таблиц из таблицы 128B (2 вектора zmm)). Skylake Xeon принесет только vpermi2w
и более крупные размеры элементов (AVX512F + AVX512BW).
Я уверен, что тридцать два мультиплекса 32: 1 намного дороже восьми мультиплексоров 8: 1, даже если мультиплексоры 8: 1 имеют ширину 4x.. Они могли бы реализовать его с несколькими этапами перетасовки (а не с одной ступени 32: 1), так как переходы с переходом между полосами получают 3-тактный временной бюджет, чтобы выполнить свою работу. Но все еще много транзисторов.
Мне бы хотелось увидеть менее волнистый ответ от кого-то с опытом проектирования аппаратного обеспечения. Я построил цифровой таймер из фишек счетчика TTL на макете один раз (и IIRC, зачитал счетчик от BASIC на TI-99/4A, который был очень устаревшим даже ~ 20 лет назад), но об этом.
Довольно ясно, что команда SSE PSHUFB в значительной степени относится к числу наиболее полезных инструкций всех времен.
Угу. Это была первая переменная-перетасовка, с контрольной маской из регистра вместо немедленной. Поиск маски в случайном порядке из LUT тасовидных масок на основе результата pcmpeqb
/pmovmskb
может сделать некоторые сумасшедшие мощные вещи. @stgatilov IPv4 dotted-quad → int converter - один из моих любимых примеров удивительных трюков SIMD.