Какие наборы инструкций есть в архитектуре Piledriver, чего нет в Bulldozer?

Я пишу довольно много кода на 64-битном языке ассемблера x86_64, и я собираюсь начать еще одну большую библиотеку функций, чтобы предоставить все стандартные побитовые, сдвиговые, логические, арифметические, математические операторы и функции для s0128, s0256, s0512, s1024 подписанных целочисленные типы и типы f0128, f0256, f0512, f1024 с плавающей запятой.

У меня есть процессоры AMD FX-8150 (бульдозер) на обоих моих компьютерах (ubuntu64 и win7-64). Изучив операции, которые должен выполнить мой код, я обнаружил, что большое количество недавних инструкций по манипулированию битами будет чрезвычайно полезным.

Однако, когда я читаю различные документы, в том числе официальные документы AMD на их веб-сайте, я нахожу бесконечные противоречия относительно того, поддерживаются ли определенные инструкции и наборы инструкций процессорами Bulldozer (FX-8150) и / или piledriver (FX-8350). Путаница особенно распространена в отношении различных недавних инструкций и наборов инструкций по манипулированию битами, а также наборов инструкций FMA3 и FMA4.

Я знаю, что некоторые документы AMD ошибочны, потому что я программировал с помощью FMA3 и FMA4 инструкций на моем FX-8150, и они работают нормально, в то время как документ AMD, сравнивающий бульдозер и погрузчик свай, противоречит этому.

Учитывая, что ВСЕ источники документации, которые я могу найти, кажутся в некоторой степени неправильными в отношении этой проблемы, знает ли кто-нибудь, какие инструкции и / или наборы инструкций работают на piledriver (FX-8350), но не на bulldozer (FX-8150)?

Поскольку моя проблема заключается в достоверности имеющейся документации, пожалуйста, не указывайте мне просто на какой-то документ , если вы не уверены, что он правильный. Наилучшие ответы могут дать программисты, которые протестировали эти инструкции и наборы инструкций на своих процессорах Bulldozer [и piledriver].


person honestann    schedule 22.12.2013    source источник
comment
потому что я программировал с помощью инструкций FMA3 и FMA4 на моем FX-8150, и они работают нормально - я сомневаюсь в этом. Вы уверены, что используете FMA3 на Bulldozer? Бульдозер не имеет FMA3.   -  person Mysticial    schedule 23.12.2013
comment
О FMA3. Хорошо, я помню, как программировал с ними, но когда я понял, что FMA4 доступны, я переключился. Инструкции FMA4 намного более эффективны для моих целей, потому что мне не нужно было перезаписывать какой-либо операнд. Кроме того, их примерно в 1000 раз легче понять при программировании. Я найду место, где должна работать FMA3, и посмотрю, что произойдет.   -  person honestann    schedule 23.12.2013
comment
@Mystical: Кстати, расскажите мне, что вы видите на странице 2 следующего документа AMD: developer.amd.com/wordpress/media/2012/10/   -  person honestann    schedule 23.12.2013
comment
@Hans: См. Предыдущий комментарий (документ AMD). Честно говоря, я не уверен, что верю CPUID в этом вопросе. Если никто не может окончательно исправить меня, я пойду напишу какую-нибудь сборку и сам протестирую каждую из инструкций (пошагово с помощью отладчика), чтобы увидеть, что на самом деле работает. Я действительно не хотел прилагать все эти усилия, но похоже, что мне, возможно, придется. Различная документация так сильно расходится между собой, почему я должен верить CPUID? Похоже, никто не знает, что здесь происходит.   -  person honestann    schedule 23.12.2013
comment
Первое открытие. Что ж, думаю, у меня действительно неполноценная память. Когда я попытался выполнить инструкцию FMA3, она сгенерировала SIGILL (недопустимую инструкцию), в то время как инструкции FMA4 работают нормально (и действительно, в моем коде есть десятки FMA4 инструкций). Конечно, если вы посмотрите на документ AMD, на который я дал ссылку выше, он утверждает, что бульдозер МОЖЕТ выполнять FMA3 инструкций (неправильно), но НЕ МОЖЕТ выполнять инструкции FMA4 (неправильно). Теперь о побитовых инструкциях.   -  person honestann    schedule 23.12.2013
comment
Следующее открытие. Новые битовые инструкции не работают в моем бульдозере (FX-8150). После кропотливой проверки различных CPUID битов они кажутся в основном точными (но понять это очень сложно). Один странный бит - это FMA бит (который содержит false в моем бульдозере FX-8150), хотя он выполняет FMA4, но не FMA3 инструкции. Но я нашел еще один бит FMA во втором наборе (с префиксом 0x80000000), который установлен в 1. В целом, CPUID действительно кажется довольно надежным, в то время как документация по бульдозеру в мире очень противоречива и в значительной степени неверна.   -  person honestann    schedule 27.12.2013


Ответы (1)


Как вы уже догадались, официальный Документ о выпуске AMD (стр. 2) действительно вводит в заблуждение. В частности, первая строка в этой таблице неверна: поддерживаемые инструкции (неверно)

Bulldozer поддерживает FMA4, но не FMA3.

Для полноты изложения инструкций Piledriver, которых нет в Bulldozer, являются BMI, _ 2_, _ 3_ (ранее назывался CVT16) и FMA3 (2).

Они должны подтверждать отсутствие FMA3 в Bulldozer. Но, кроме того, вы можете доверять Руководству GCC. Архитектуры названы bdver1 и bdver2 для Bulldozer и Piledriver соответственно.

Более того, вы можете доверять возвращаемому значению cpuid. Для удобства я воспроизвожу здесь скриншоты для Zambezi и Vishera (десктопные части):

Ядра Zambezi и Vishera (скриншоты из Aida64) Источник: Список дампов CPUID

Обратите внимание, что cpuid использует просто fma для обозначения поддержки как FMA3, так и FMA4. GCC следует той же семантике. Из ссылки на Википедию можно сделать вывод, что это связано с тем, что на самом деле был реализован вариант FMA4 до FMA3 (так что ранее определенный идентификатор fma4 нельзя было просто отбросить, иначе это нарушило бы существующие приложения).

person Marc.2377    schedule 11.06.2017