avva: (Default)
[personal profile] avva
Любопытная новость: в Америке агентство по защите окружающей среды поймало "Фольксваген" на том, что они ставили в дизельные машины специальную программу. Эта программа определяла, когда машина проходит тест выхлопа (следила за работой двигателя, положением руля, итд.), и тогда включала режим очистки на максимум. А при обычной езде режим другой, и уровень загрязнения превышает разрешенный в 40 раз.

Теперь их обязали заменить 500 тысяч проданных за последние 7 лет автомобилей нескольких марок, и еще видимо оштрафуют на какие-то миллиарды.

Подробности напр. в: "Репутация Volkswagen задымилась".

[livejournal.com profile] ygam напомнил в одном из обсуждений, что это похоже на историю пятилетней давности уже из компьютерной индустрии. Тогда Интел поймали на том, что их компилятор выдает особо оптимизированный код, только когда его запускают на процессоре Интела, а на AMD генерирует код помедленней. То есть так: он смотрит на прошитое в процессоре имя вендора, и если это GenuineIntel, то делает всякие разные оптимизации в зависимости от того, что CPU реально поддерживает. А если нет, он никаких оптимизаций не делает, и для нового AMD выдает такой же код, как для древнего Pentium III.

Причем любопытно, что это так и не изменилось с тех пор. Вроде бы Интел заставили заплатить штраф и документировать это поведение компилятора, но он продолжает так себя вести. Год назад в реддите было обсуждение, и кто-то залез в свежую версию компилятора и проверил:



(это код, который ищет фразу GenuineIntel, и в зависимости от того, находит или нет, продолжает запускать разные процедуры оптимизации; если не находит, то оптимизации реально никакой нет)

Date: 2015-09-21 05:13 pm (UTC)
From: [identity profile] dibr.livejournal.com
1. А как вообще Интел должен делать оптимизацию для АМД? У него вообще говоря может даже не быть необходимой для этого информации - АМД ведь не тупой клон интела, у них "свои фишки" в процессоре.

2. Раз "компилятор выдаёт особо оптимизированный код [...] в зависимости от того, что CPU реально поддерживает", значит речь идёт не о коммерческой разработке ПО (разработчику важно чтобы его программа работала на процессоре заказчика/потребителя, а не на его собственном, а программа, идеально оптимизированная под особенности одного процессора может вообще не заработать на другом похожем), а о ситуации "написали программу, тут же и запустили" (какие-нибудь научные расчёты с самописными программами например). А это во-первых не такое уж частое применение, а во-вторых - пусть АМД выкатят свой компилятор, оптимизированный под АМД, и проблема решится (или станет симметричной).

Date: 2015-09-21 05:29 pm (UTC)
From: [identity profile] http://users.livejournal.com/_iga/
Речь идёт о проверке в runtime.
На AMD ICC-бинарники не используют SSE, хотя процессор их поддерживает:
https://github.com/jimenezrick/patch-AuthenticAMD
https://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Criticism
the Intel CPU dispatcher does not only check which instruction set is supported by the CPU, it also checks the vendor ID string. If the vendor string is "GenuineIntel" then it uses the optimal code path. If the CPU is not from Intel then, in most cases, it will run the slowest possible version of the code, even if the CPU is fully compatible with a better version.

Date: 2015-09-21 05:30 pm (UTC)
From: [identity profile] karpion.livejournal.com
1. Я так понимаю - AMD публикует спецификации.

2. Режим компилятора "определить текущий процессор и оптимизировать под него" вполне оправдан для людей, которые сами написали программу и тут же её исполняют.
При этом необходим и режим с ручным указанием целевой платформы, т.к. нередко сборка программы производится дома, а запуск - на мощной машине на работе.

Date: 2015-09-21 05:45 pm (UTC)
From: [identity profile] dibr.livejournal.com
1. Но интел не обязан их читать :-) Это работа, она денег стоит.
По факту, правда, там получается просто выбор ветки кода в зависимости от поддерживаемого набора инструкций, и для АМД не нужна какая-то особая оптимизация, достаточно той, что уже есть. Ну... пусть АМД выкатит свой компилятор, с блэкджеком и оптимизатором - кому надо, будут пользоваться.

2. Тут выше делают разумное предположение, что в посте немного перепутаны слова. И это не компилятор делает разный код в зависимости от CPU. А это код, который делает компилятор (неважно на каком CPU), будучи запущен на АМД выбирает для выполнения ветку, оптмизированную под "самый старый из поддерживаемых процессоров" (т.е. НЕ оптимизированную под АМД), а будучи запущен под интел - выбирает оптимальную ветку.
Вот это - ударит по всем пользователям АМД, а не только по узкому слою разработчиков.

Date: 2015-09-24 01:35 am (UTC)
From: [identity profile] karpion.livejournal.com
2. Т.е. там фактически две отдельные программы, т.е. количество кода в два раза больше???

Date: 2015-09-24 05:53 am (UTC)
From: [identity profile] dibr.livejournal.com
Почему две? Я так понимаю, их там с десяток, если не больше - под все существующие варианты интеловских процессоров/наборов инструкций.

Мне вот сейчас стало интересно, а как подобное реализуется в динамически линкуемых библиотеках? В "экзешнике"-то мы один раз выбрали нужную ветку кода при запуске, и так по ней и побежали. А dll могут дёргать часто, если выбирать при каждом вызове - это потери времени, если не выбирать - выполнение неоптимального кода...

Date: 2015-09-30 06:41 pm (UTC)
From: [identity profile] karpion.livejournal.com
Библиотека при инициализации предлагает несколько точек входа для каждой процедуры. И связывание каждого вызова происходит с той точкой входа, которая подходит для данной архитектуры процессора.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 06:26 pm
Powered by Dreamwidth Studios