Почему готовые приложения работают на процессорах Intel и AMD?

StackOverflow https://stackoverflow.com/questions/832007

  •  06-07-2019
  •  | 
  •  

Вопрос

Единственное, в чем я не разбираюсь, это как код, скомпилированный для процессора Intel, работает на процессоре AMD.

Мое базовое понимание состоит в том, что если вы, например, компилируете код на C, компилятор преобразует исходный код в машинный язык, который будет содержать инструкции для конкретного процессора. Итак, вам нужно скомпилировать компилятор для любой платформы, которую вы хотите, чтобы ваше приложение использовало. Почему вам не нужен компилятор для AMD и Intel, и вам не нужно покупать программное обеспечение для конкретного процессора?

Я знаю, что процессоры AMD и процессоры Intel имеют некоторую совместимость со старыми инструкциями x86; что я хотел бы знать, как они это делают? Я имею в виду, что AMD или Intel не должны звонить друг другу и рассказывать друг другу свои коммерческие секреты, так как они могут создавать совместимые наборы инструкций?

Вся совместимость по-прежнему основана на наборе инструкций 386, с набором операторов типа «IF AMD CPU», делайте это иначе, если INTEL сделает это? «

Это было полезно?

Решение

Процессоры AMD и Intel x86 и x86-64 практически полностью совместимы. Они оба реализуют все x86 и x86-64. У каждого из них есть свои собственные расширения (например, MMX и 3DNow), но компиляторы обычно не используют их, если вы сами не скажете им. В настоящее время AMD и Intel поддерживают практически все расширения друг друга. Единственный случай, когда вам придется беспокоиться о разнице, это когда вы делаете действительно низкоуровневое ядро.

Кстати, набор инструкций на самом деле не является "коммерческой тайной". Реализация есть. Обе компании выпускают документацию по набору инструкций, поэтому каждая может скопировать ее. Причина этого, вероятно, заключается в том, что если все больше компаний будут производить совместимые чипы, для этого набора инструкций будет написано больше программного обеспечения, поэтому больше людей будут покупать эти чипы. x86 / x86-64 - это стандартная архитектура для настольных компьютеров, гарантирующая, что люди будут продолжать покупать чипы Intel и AMD. Intel и AMD имеют очень разные реализации, они просто выполняют один и тот же код.

Другие советы

На самом деле у них есть соглашение о перекрестном лицензировании. Информация и инновации передавались от Intel к AMD еще в 90-х годах, когда AMD была вторым источником процессоров 386 и 486, а затем от AMD к Intel, когда Intel приняла расширения x86-64.

Помните также, что наборы команд для этих процессоров публично документированы; обычно один поставщик изобретает новый набор инструкций, а через одно или два поколения другой поставщик реализует совместимые расширения. Таким образом, вместо IF 386 .... у вас есть нечто большее, если IF SSE4 ПОДДЕРЖИВАЕТСЯ ..., безотносительно к конкретному поставщику.

Оба поставщика реализуют один и тот же набор инструкций, поэтому, когда ваш скомпилированный код превратится в машинные инструкции, они будут работать на обоих чипах. Тем не менее, есть некоторые специальные наборы инструкций, такие как SSE, которые могут быть специфическими для одного поставщика или другого. Если вы хотите повысить производительность приложения, вы можете выполнить проверки во время выполнения, чтобы использовать эти функции, когда они доступны.

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