Компилятор от Intel намеренно ухудшает качество кода на компьютерах с процессором AMD

отметили
89
человек
в архиве
Компилятор от Intel намеренно ухудшает качество кода на компьютерах с процессором AMD
Многие программисты считают компилятор Intel лучшим оптимизирующим компилятором из имеющихся на рынке, и предпочитают использовать именно его для наиболее требовательных к производительности программ. Кроме того, Intel поставляет много сильно оптимизированных библиотек для различных технических и научных целей. Во многих случаях достойных альтернатив библиотекам Intel не существует.

К сожалению, программы, скомпилированные с помощью компилятора или библиотек Intel, работают значительно хуже на процессорах AMD и VIA. Причина в том, что для программного кода компилятор (или библиотека) может выдать несколько версий машинного кода, каждая из которых оптимизирована для определённого процессора и набора инструкций, например, SSE2, SSE3, и т.д. Система включает в себя функцию, которая определяет, на каком типе процессора она запущена и выбирает самую подходящую версию. Эта функция называется диспетчером процессора. Диспетчер процессора Intel проверяет не только набор инструкций, поддерживаемый процессором, но также идентификатор производителя процессора. Если идентификатор — строка «GenuineIntel», то выбирается наиболее оптимальный вариант кода. Но если процессор не от Intel, то в большинстве случаев будет выбран самый медленный из возможных вариантов, даже если процессор полностью совместим с лучшей версией.
Добавил Vlad2000Plus Vlad2000Plus 5 Января 2010
проблема (4)
Комментарии участников:
Vlad2000Plus
+3
Vlad2000Plus, 5 Января 2010 , url
В статье об этом написано — если бы компилятор позиционировался как продукт только для процессоров Интел, претензий бы к компании не было бы
LevM
+5
LevM, 6 Января 2010 , url
Он и позиционируется как продукт заточеный под интеловский процессор. Именно изза этого компилятора, уже лет десять как пользую исключительно их железо. Зачастую (не всегда, конечно) код сделаный на нем бежит на 15-20% быстрее чем на MS-ном. Не говоря уж об остальных 'конкурентах'.
linx0id
0
linx0id, 6 Января 2010 , url
В дополнение в Вашему комментарию, необходимо отметить, что я сам и мои знакомые тоже — неоднократно сталкивались с тем, что одна и та же программа — могла без проблем работать на Intell, однако — без каких либо уведомлений — отказываться работать на AMD.
LevM
+4
LevM, 6 Января 2010 , url
Там даже свичи под конкретные модели процессоров. AMD что-то не замечал.
linx0id
+2
linx0id, 6 Января 2010 , url
Кто мешает AMD и VIA создать свои специализированные программные продукты, которые будут превосходить качество ПО от Intell?
Легче всего обижаться на дугих (в том числе на своих конкурентов) — закрывая глаза на плоды своего собственного бездействия. ;-)
Не забывайте также и о том, что схемные решения AMD и VIA — реально отличается от продукции Intell, и это тоже необходимо учитывать.
В любом случае и AMD и VIA — стараются обеспечить совместимость с продукцией от Intell, не прибегая к ее повторению. Поэтому — другие решения порождают в свою очередь — другие результаты
mumu
0
mumu, 6 Января 2010 , url
Да потому, что программа должна быть одна. Вам было бы приятно, если бы браузер, в котором вы пишете, тормозил именно под вашим процом? Нахрена так делать?
linx0id
0
linx0id, 6 Января 2010 , url
Для того, что бы сбылась ваша мечта — должна исчезнуть альтернатива, то есть должен остаться всего лишь один производитель. ;-)
По факту, на текущий момент, и AMD, и VIA работают над тем, что бы создать изделия, которые будут максимально соответствовать параметрам продукции от Intell (при условии использования только их собственных решений — иначе будет нарушение патентов Intell, со всеми вытекающими для нарушителя).
В результате, получается продукт, который во многом подобен образцу для подражания, но все же — другой, а другой, как вы сами понимаете, работать точно также как и образец для подражания — не может.
Вам было бы приятно, если бы браузер, в котором вы пишете, тормозил именно под вашим процом?

Этот вопрос адресуйте к поизводителям продукции, которая не совсем соответствует реально существующим стандартам, на которые обращают внимание производители программного обеспечения.
Кстати — программы не тормозили, а просто не запускались, при чем — напрочь отсутствовали сообщения о каких-либо ошибках.
linx0id
+2
linx0id, 6 Января 2010 , url
В статье автор может написать все что ему угодно, а Intell позиционирует свои продукты как оптимизированные под свою собственную продукцию.
Ruzzz
0
Ruzzz, 7 Января 2010 , url
Ну вообщем то все мои "претензии" основаны на утверждении, что интел НЕ позиционирует свои продукты как оптимизированные под свою собственную продукцию, если вы правы, то спорить тут не о чем. Нужно будет для себя просто уточнить этот момент.
pda
+9
pda, 5 Января 2010 , url
Вмесло логотипа на картинке должен быть баян. Ибо все заинтересованные знают уже много лет. :)

marvellouz
-4
marvellouz, 6 Января 2010 , url
На войне все средства хороши, хотя в целом это реальное западло!
X86
0
X86, 6 Января 2010 , url
Конкуренция — это не война и нужно обоюдно соблюдать правила.
allx
+6
allx, 6 Января 2010 , url
какие правила?
rimpocha
+7
rimpocha, 6 Января 2010 , url
Но если процессор не от Intel, то в большинстве случаев будет выбран самый медленный из возможных вариантов, даже если процессор полностью совместим с лучшей версией.

Все объясняется очень просто. Даже если процессор полностью совместим по командам с интеловским аналогом, он не может не отличаться внутренней архитектурой, то есть структурой конвейера, алгоритмами предсказания ветвлений и прочим. Простой пример, одна и та же CISC операция выполняться будет за разное количество тактов на этих двух процессорах. О какой совместимости оптимизированного кода в таком случае может быть речь? Естественно, в для альтернативного вендора будет выбран самый медленный вариант, потому что оптимизированный на нем просто не заработает из-за сбитых таймингов.

P.S. Новость ни о чем. Хабр как всегда радует.

shuron
0
shuron, 6 Января 2010 , url
Тоже так подумалось.
Хотя мои познания в ло лэвел програмировании скудеют, так как я на на яве сижу с универа.
Ruzzz
0
Ruzzz, 6 Января 2010 , url
"Тоже так подумалось" — не плохо вам подумалось при скудеющих то знаниях :)
Ruzzz
0
Ruzzz, 6 Января 2010 , url
"не заработает из-за сбитых таймингов" — а можно подробней? Я наверное не компетентен в этом вопросе, но мне кажется это чушь. Они там что такты подсчитывают? При современной многозадачности набор инструкций легко прерывается. В статье идет речь о том, что для разных моделей процессоров используется разный набор инструкций. Если процессор поддерживает более эффективные инструкции, то используются они. Для AMD этот нюанс не учитывается. Насколько я понял статью. Интересно услышать ваше мнение.
LevM
+1
LevM, 6 Января 2010 , url
Оптимизация учитывает миллион деталей имплементации процессора. Стандарты гарантирующие совместимость требуют идентичности на уровне выполнения инструкций, а не того как они выполняются. Методы кэширования, параллелизации, даже глубина pipeline все меняется от модели к модели. Плюс, имеются нестандартные расширения.
Кстати, та-же история и с кучей интеловских библиотек типа performance lib, mkl и т.п. И у AMD тоже есть свои библиотеки.
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Понятно что у процессора есть разные характеристики, и что стандартом определена "ширина рельс, а не что внутри локомотива". Но оптимизация имеет свой лимит, учесть все "вплоть до такта, байта" не возможно, ввиду разнообразия процессоров от самого же интел, я не говорю про разнообразие ситуаций в исходных кодах. Конечно можно приблизиться к определенной степени эффективности, но что мешает этот же код "пускать" и для других процессоров? Ведь использование кеша нескольких уровней, па<b>
linx0id
+1
linx0id, 6 Января 2010 , url
но что мешает этот же код "пускать" и для других процессоров

Конструктивные особенности конкретных изделий
Ruzzz
-1
Ruzzz, 6 Января 2010 , url
Это все пустые слова, я был бы благодарен за толковое объяснение, не могу понять какие особенности.
linx0id
0
linx0id, 6 Января 2010 , url
Это все пустые слова
Реально существуют отличия в конструкции, в…
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Допишу :) А еще тот факт с манипуляцией ID в новых процессорах, позволяющий выполнять на них именно оптимизированный код, при этом врядли кто-то мог учесть их архитектуру "до мелочей". Конечно можно приблизиться к определенной степени эффективности, и пусть даже они повышают кпд своих процов до 99% :) но что мешает этот же код "пускать" и для других процессоров? Ведь использование кеша нескольких уровней, параллелизации и т.д., все это стандарт для всех современных процессоров. И вряд ли бы процы от AMD исполняли оптимизированный код менее эффективно чем не оптимизированный, скорее наоборот.
LevM
+2
LevM, 6 Января 2010 , url
Да, наличие кэша и многих ядер — стандарт. Но логика их использования и архитектура железа очень отличаются. Оптимизатор обязан это учитывать. И я не вижу, зачем Интелу стараться и напрягать своих программистов чтобы делать это для процессоров конкурентов. Они не особо зарабатывают на продажах компилятора. Но очень — на процессорах эффективно гоняющих код.
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Ну прям фух :) Ну почему бы просто не подключать оптимизированный код и для процессоров конкурентов? Есть поддержка SSE3, значить подключим код использующий этот набор инструкций. Второе, логика использования кеша, достаточно прозрачна. Покрайней мере основные принципы используются всеми. Не думаю что есть какие-либо мелочи, предусмотрев которые в коде, нужно "боятся" дать исполнить "не своему" процу.
linx0id
0
linx0id, 6 Января 2010 , url
Не думаю что есть какие-либо мелочи

"Не думаю" — это крутой аргумент.
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Хех, профессиональный тролль, покормил и отбежал? Я уже писал, что не считаю себя достаточно компетентным, но пишу свои размышления. В защиту интел, ничего толкового не услышал. Надеюсь человек заинтересованный прочитает и сделает правильные выводы.
linx0id
0
linx0id, 6 Января 2010 , url
Из того, что можно пощупать руками — это тепловыделение аналогичных по производительности процессоров Intell и AMD, а оно отличается и существенно.

P.S.Защищать Интелл — нет никакого проку, лишь собственные наблюдения.
P.P.S. От троля слышу
Ruzzz
0
Ruzzz, 7 Января 2010 , url
И каким боком сюда тепловыделение можно пристроить?
linx0id
0
linx0id, 7 Января 2010 , url
К тому, что в реализации процессоров разных производителей присутствуют различные схемные технические решения.
Очень похоже на то, что вы не особенно интересовались электроникой, поэтому, вероятно, не представляете о том, что функционально аналогичные устройства могут быть выполнены по различным схемным решениям и с использованием различной элементной базы (например, выходной каскад транзисторных усилителей мощности низкой частоты может быть выполнен как по однотактной, так и двухтактной схеме; как на биполярных, так и на полевых транзисторах).
Ruzzz
0
Ruzzz, 7 Января 2010 , url
Я в курсе о различиях внутренней реализации ) Это настолько примитивные вещи, что я не могу понять, как вы вообще согласились со мной вступать в дискуссию, подозревая что я не знаю об этом) Выше я писал "Понятно что стандартом определена "ширина рельс, а не что внутри локомотива" ) Давайте лучше прекратим этот спор и С Рождеством Вас!!!
linx0id
0
linx0id, 7 Января 2010 , url
Выше я писал "Понятно что стандартом определена "ширина рельс, а не что внутри локомотива"

Процессоры Intell и AMD по разному ведут себя в разных приложениях.
linx0id
0
linx0id, 7 Января 2010 , url
Для закрытия вопроса — прошу ознакомиться с Сравнение процессоров бюджетной категории Новички AMD Sempron и Intel Celeron D.
Статейка не самая свежая, однако показывает отличие (переменный успех) процессоров Intell и AMD в разных задачах.
LevM
+1
LevM, 7 Января 2010 , url
Речь не об использовании конкретных инструкций. Все поддерживают SSE с MMXом. Речь о том что ту-же задачу можно сделать разными наборами инструкций и на разных моделях каждый из этих наборов выполняется с разной эффективностью. Задача оптимизирующего компилятора выбрать тот набор что будет работать наиболее эффективно. И интеловский делает это наилучшим образом для интеловских машин.
У вас там, кстати, промелькнул вопрос о том на сколько специфичен генерируемый код. Код умеет динамически определить на каком процессоре он выполняется и запустить различные функционально эквивалентные участки кода. Так работает на пример MKL (intel math kernel library).
Ruzzz
0
Ruzzz, 7 Января 2010 , url
Да здесь я с вами согласен, если речь не о базовом наборе инструкций SSE MMX, а о подпрограмме как наборе инструкций. Просто лень сейчас перечитывать статью, спать пора), но вроде как там ставили упор именно на базовый набор, типа SSE3.
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Вообщем ваш ответ по сути из двух частей: "Оптимизатор обязан это учитывать" — я этого не то что не отрицал, но наоборот, мы сейчас говорим о том как это делается. Второе "не обязаны" — как и сказал выше, пусть оптимизируют под свои, но дают выполнять код процам конкурентам того же "класса", или пусть открыто заявят "оптимизируем только под свои процы".
outcast
0
outcast, 6 Января 2010 , url
В статье ни слова не сказано о том, что это за компилятор, для какого языка. Приходится догадываться, что для C+.
Marlan
0
Marlan, 6 Января 2010 , url
А может для Явы?
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Intel делает компиляторы для C+ и Fortran, это те о которых знаю.
LevM
+1
LevM, 6 Января 2010 , url
Это тот-же самый компилятор. Фактически их четыре 'близнеца' — C+, Fortran, для Винды и Linux. Так-же как у C# и VB.NET тот-же кимпилятор.
Ruzzz
0
Ruzzz, 6 Января 2010 , url
Ну вполне логично предположить что в результате работы получается одинаковые конструкции, и что отличие лишь в анализе конкретного языка.


Войдите или станьте участником, чтобы комментировать