Более быстрая целочисленная незанятая загрузка SSE, которая редко используется [дубликат]

На этот вопрос уже есть ответ здесь:

в чем разница между _mm256_lddqu_si256 и _mm256_loadu_si256 1 ответ

Я хотел бы узнать больше о_mm_lddqu_si128свойственный (lddqu инструкция с SSE3) особенно по сравнению с_mm_loadu_si128 встроенный (инструкция movdqu начиная с SSE2).

Я только обнаружил_mm_lddqu_si128 сегодня. Внутренний гид Intel говорит

эта внутренняя функция может работать лучше, чем _mm_loadu_si128, когда данные пересекают границу строки кэша

а такжекомментарий говорит Это

будет работать лучше при определенных обстоятельствах, но никогда не будет хуже.

Так почему же он не используется больше (SSE3 - довольно низкая планка, поскольку он есть у всех процессоров Core2)? Почему он может работать лучше, когда данные пересекают строку кэша? Являетсяlddqu только возможно лучше на определенном подмножестве процессоров. Например. до Нехалема?

Я понимаю, что могу прочитать руководство Intel, чтобы найти ответ, но думаю, что этот вопрос может быть интересен другим людям.

 Cody Gray14 июл. 2016 г., 18:57
«Я понимаю, что могу прочитать руководство Intel, чтобы найти ответ, но думаю, что этот вопрос может быть интересен другим людям». Я проголосовал за этот вопрос, но, пожалуйста, давайте не будем здесь обсуждать тему ...
 Peter Cordes03 дек. 2017 г., 08:27
Неименно так дубликат, но мой ответ на новый вопрос охватывает это и многое другое. Они должны быть как-то связаны друг с другом, и я думаю, что дубликаты работают. (Я мог бы отредактировать их оба со ссылками на другое.) Забавно, что я закончил тем, что написал примерно один и тот же ответ примерно 1,5 года спустя о версии AVX 256b.
 Rotem14 июл. 2016 г., 12:35
Я пробовал оба, и не видел разницы в производительности (пробовал на Core i7 2600)
 Z boson14 июл. 2016 г., 13:23
@Rotem, возможно, только лучше, чем Nehalem (то есть в системах с SSE3 и SSSE3, но не SSE4.1), но это только предположение.
 Peter Cordes14 июл. 2016 г., 22:37
@ Гарольд: Нет, только Прескотт P4, а не Мером.

Ответы на вопрос(1)

Решение Вопроса

lddqu использовал другую стратегию, чемmovdqu на P4, но работает одинаково на всех других процессорах, которые его поддерживают. Особых недостатков нет (так как инструкции SSE3 не занимают никаких дополнительных байтов машинного кода и на данный момент довольно широко поддерживаются даже AMD), но никаких положительных сторон нет, если только вы не заботитесь о P4.

Dark Shikari (один из ведущих разработчиков видеокодеров x264, ответственный за множество ускорений SSE)подробно рассказал об этом в блоге в 2008 году, Это ссылка на archive.org, поскольку оригинал находится в автономном режиме, но в его блоге много хорошего.

Самое интересное, что он подчеркивает, это то, что Core2 все еще имеет медленные невыровненные нагрузки, где вручную выполняются две совмещенные нагрузки иpalignr может быть быстрее, но доступно только с немедленным подсчетом смен. Так как Core2 работаетlddqu такой же какmovdquэто не помогает

Судя по всему, Core1 реализуетlddqu особенно, так что это не просто P4 в конце концов.

этоСообщение в блоге Intel об истории lddqu / movdqu (которую я нашел за 2 секунды с помощью Google дляlddqu vs movdqu, / ругайте @Zboson) объясняет:

(только на P4): Инструкция работает, загружая 32-байтовый блок, выровненный по 16-байтовой границе, выделяя 16 байтов, соответствующих не выровненному доступу.

Поскольку инструкция загружает больше байтов, чем запрошено, применяются некоторые ограничения. Lddqu следует избегать в областях памяти Uncached (UC) и Write-Combining (USWC). Кроме того, благодаря его реализации, lddqu следует избегать в ситуациях, когда ожидается пересылка данных из хранилища.

Я думаю, это объясняет, почему они не просто использовали эту стратегию для реализацииmovdqu все время.

Я полагаю, что декодеры не имеют доступной информации о типе памяти, и именно тогда должно быть принято решение, в какую строку выполнить декодирование инструкции. Так что попытка быть «умной» в использовании оппортунистически лучшей стратегии в памяти WB, вероятно, была невозможна, даже если это было бы желательно. (Который это не из-за пересылки магазина).

Резюме из этого блога:

от бренда Intel Core 2 (микроархитектура Core, с середины 2006 года, процессор Merom и выше) до будущего: lddqu делает то же самое, что и movdqu

Другими словами:
* если ЦП поддерживает дополнительные потоковые SIMD-расширения 3 (SSSE3) -> lddqu выполняет те же действия, что и movdqu,
* Если CPU не поддерживает SSSE3, но поддерживает SSE3 -> перейдите к lddqu (и обратите внимание, что рассказ о типах памяти)

 Z boson18 июл. 2016 г., 09:08
Если 10% пользователей без SSSE3 - AMD, я предполагаю, что у них SSE4a (микроархитектура Барселоны). Я бы догадался, чтоlddqu реализуется так же, какmovdqu, В таком случаеlddqu для всех практических целей устарел. Теперь я понимаю, почему SSE3 становится базовой, а не SSSE3. Вероятно, 99% пользователей Intel имеют SSSE3, но многие пользователи AMD не имеют.
 Z boson18 июл. 2016 г., 09:12
Мне кажется странным, что AMD внедрила SSE4a до SSSE3. Интересно, почему они это сделали. Это раздражает.
 Peter Cordes18 июл. 2016 г., 09:15
@Zboson:Антиконкурентная практика Intel не раскрывать детали с достаточным временем для их внедрения AMD это, вероятно, главная причина. Другие махинации x86, такие как FMA4 против FMA3, почти полностью принадлежат Intel, поэтому я полагаю, что это тоже.
 Peter Cordes18 июл. 2016 г., 10:25
@Zboson: Я только что понял, что сделал неявное предположение, что повреждение архитектуры x86 с таким дерьмом не повредит Intel. На самом деле вполне возможно, что ARM или что-то еще сместит x86 легче, но в долгосрочной перспективе основное влияние будет оказывать менее компактный машинный код и, возможно, ограничения будущей расширяемости (хотя пространство кодирования VEX по-прежнему имеет массу места; в настоящее время только 1 / 64-е использование, IIRC.) Поэтому я сомневаюсь, что это окажет большое влияние на долгосрочную конкурентоспособность x86. Люди, которые создают больше работы для (разработчиков), не те, кто принимает решения о покупке HW
 Z boson18 июл. 2016 г., 08:54
AMD объясняет это, спасибо. Я не осознавал, что AMD перешла с SSE3 (до бульдозера) прямо на AVX (бульдозер). У AMD был SSE4a до того, как у него был SSSE3. Я удивлен, что BIOS обновил твою материнскую плату SnB. У меня был процессор 68k, затем я решил изучать физику вместо компьютерных наук, и следующий компьютер, который я купил там, где я действительно знал, что это за процессор, был 2600k SnB :-)
 Mysticial03 авг. 2016 г., 21:50
Кстати, есть VEX-кодированныйvlddqu это также работает на 32-байтовой ширине. Пойди разберись. Я не могу сказать, является ли это намеренным, или просто результатом некоторой глупой жесткой проводки, которая одинаково продвигала все устаревшие SSE к VEX, независимо от их полезности. То же относится и кvpalignr/vpsrldq/vpslldq, Возможно, это упрощает их сокращение k-map для декодера команд.
 Z boson18 июл. 2016 г., 08:40
Сколько людей все еще используют компьютер x86 без SSSE3? Если я посмотрю статистику Steam (чего бы они ни стоили), почти 100% пользователей имеют SSE3, но только 90% имеют SSSE3? Есть ли на самом деле люди, все еще использующие P4 (или даже раньше)? Я думаю, что вы упомянули в посте, что вы все еще используете P4.
 Z boson18 июл. 2016 г., 09:35
Будет ли Intel причинять себе боль, потому что это означает, что SSE3 становится базовой линией, а не SSSE3. Я предполагаю, что именно поэтому антиконкурентная практика должна поощряться правительством. Это примерДилемма заключенного хотя некоторыене соглашаться.
 Peter Cordes18 июл. 2016 г., 09:02
@Zboson: Да, я тоже был удивлен и очень разочарован тем, что Intel ушлаопасное обновление BIOS для их материнских плат DZ68DB на странице загрузки без предупреждения за все эти годы. Я обновился, не читая дальше, пытаясь понять, улучшат ли они графические драйверы Linux. Думаю, много лет назад я видел эти предупреждения и не обновлялся, но я забыл. Хех, я всегда был фанатом процессора. Еще до того, как я узнал много нового, я читал новостные статьи о том, как они работают, и что быстрее. Большой сюрприз там: P
 Peter Cordes03 авг. 2016 г., 22:06
@ Мистика: еще хуже, есть_mm256_lddqu_si256 свойственный илюди на самом деле используют его / Facepalm. ИДК, почему они потрудились построить оборудование для случайного воспроизведенияvpalignr ymm, хоть; согласился на отсутствие вариантов использования с этой глупой семантикой. Есть некоторые инструкции, которые не имеют 256-битных форм, только SSE и AVX-128:movhps, pextr* / pinsr*, PCMPISTRM (и другие строки insne SSE4.2),MASKMOVDQU (не большая гранулярностьVPMASKMOVD/Q). Также AES-NI, иPCLMULQDQ, Расшифровка транзисторов все еще возможна.
 Mysticial03 авг. 2016 г., 22:22
Такlddqu наконец умирает в AVX512.vpalignr превращается вvalignr и делает правильные вещи. Ноvpsrldq/vpslldq все еще делаю смены в полосе. Мне любопытно, что варианты использования для 128-битного сдвига в полосе. На данном этапе, это больше не "свободно", чтобы держать это вокруг. Это не подмножество каких-либо других инструкций до перестановки байтов в Cannonlake. (Хотя я полагаю, это можно сделать дешево, если вы обобщилиvalign железо чуть чуть.)
 Peter Cordes18 июл. 2016 г., 10:10
@ Zboson: Базовая линия - только SSE3 вместо SSSE3 - не особенно больно для Intel, чем для AMD. Это вредит клиентам Intel, но мы все еще собираемся покупать их процессоры. Во всяком случае, подобная чушь действительно идет на пользу Intel, поскольку разработчики с большей вероятностью будут тратить время на внедрение ускорения только для процессоров Intel, чем для процессоров AMD. например даже AMD отказалась от XOP для будущих процессоров. (Я бы хотел, чтобы Intel приняла его;vpperm Перестановка байтов из двух источников заполняет так много пробелов ...) И тогда некоторые программы будут работать на Intel еще быстрее, чем AMD, увеличивая пропускную способность.
 Peter Cordes18 июл. 2016 г., 08:48
@Zboson: Большая часть этого предназначалась как исторический интерес, потому что это в основном все еще не актуально. 10% пользователей без SSSE3, вероятно, в основном AMD. У меня никогда не было P4. У меня был P-MMX, потом несколько AMD Athlons, потом K8, потом Core2 (Merom), потом SnB. Обновление BIOS от Intel поразило мою материнскую плату SnB, поэтому я снова использую свой Core2Duo E6600, пока не перестану лениться и не решу, какой Skylake mobo я хочу купить. Прошлым летом я видел P4, который все еще использовался на рабочем столе, я думаю, что это было в квартире, где мой брат жил с парнем, который совсем не был компьютерным фанатом (и имел консоль для игр).

Ваш ответ на вопрос