LINUX.ORG.RU
ФорумTalks

Собираем бинарь с помощью ICC, меняем идентификатор процессора с Viaна Intel, и получаем 47% прирост производительности. Федеральная торговая комиссия США негодуэ.


0

0

Компилятор Intel предусматривает возможность включения в итоговый исполняемый файл нескольких оптимизирующих блоков кода, используемых в зависимости от CPU на котором выполняется приложение. В качестве примера приводится задействование инструкций SSE2 и SSE3 для поддерживающих их процессоров. При выборе стратегии оптимизации учитывается не только тип поддерживаемых наборов дополнительных инструкций, но и идентификатор производителя. Если в качестве производителя фигурирует Intel используется заведомо более оптимальный набор кода, а в противном случае - не оптимизированный вариант, даже если процессор полностью поддерживает технологии, позволяющие активировать более оптимальный набор кода.

Так как набор компиляторов Intel рекламируется как генерирующий наиболее производительный код, а тесты на CPU Intel это подтверждают, то многие разработчики используют для генерации итоговых исполняемых файлов ICC, не подозревая, что их приложения могут потерять в производительности при работе на CPU AMD и VIA. Например, один из тестов для процессора «VIA Nano» показал, что при подмене CPUID идентификатора данного процессора на одну из моделей CPU AMD производительность улучшилась на 10%, а при изменении на Intel производительность возросла на 47% (за счет использования SSE).

http://www.opennet.ru/opennews/art.shtml?num=24891

Ответ на: комментарий от Igron

> Дурак (имбецил, дебил) здесь тот, кто не понимает, что такое intellectual property of Intel® Corporation. И заткнуться-таки лучше именно ему.

И что же это такое intellectual property of Intel® Corporation?

anonymous_incognito ★★★★★
()
Ответ на: комментарий от vasily_pupkin

хорошо, не буду, хватит с меня шести зависимостей -))

FractalL
()
Ответ на: комментарий от Sylvia

Угу. А можно вообще все статиком собрать :] Тогда ваще никаких проблем не будет )

vasily_pupkin ★★★★★
()
Ответ на: комментарий от Igron

С какой стати коммерческий компилятор интеля должен вообще генерить код для амд?

Ты просто прикидываешься идиотом, или как? Дело не в том, что компилятор не генерит код для AMD, а в том, что он генерит нечто вроде такого:

long multiply(long a, long b) {
    if (cpu_vendor==VENDOR_INTEL) {
        return a * b;
    } else {
        c=0;
        while (abs(b)>0) { c += a; b-=sign(b); }
        return c;
    }
}
no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Не делай этого. ICC в генте - как наркотик. Потом выкинуть его сложно :]

emerge -e world

а еще лучше просто не терять файлик со списком пакетов, собранных icc

Gorthauer ★★★★★
()
Ответ на: комментарий от ARTh

> А разве AMD и прочии не покупают у Intel лицензии?

Кросслицензируют разные технологии, а что?

Igron ★★★★★
()
Ответ на: комментарий от smh

> С той же стати, с которой Microsoft обязали включать выбор браузеров в европе.

Во-первых, это все же странное требование. Во-вторых, интел не контролирует 95% рынка компиляторов.

Igron ★★★★★
()
Ответ на: комментарий от nu11

> спроси у интеля, зачем они чужие камни поддерживают. Идиоты наверное :)

Я думаю, им это хлопот не доставляет, т.к. наборы инструкций одинаковые.

угу, после фикса код вообще не будет запускаться на не-Intel процессорах.


А пусть даже так. Не нравится — пользуйтесь gcc.

Igron ★★★★★
()
Ответ на: комментарий от anonymous_incognito

> И что же это такое intellectual property of Intel® Corporation?

Это значит, что до тех пор, пока они не будут контролировать 95% рынка компиляторов, или до тех пор, пока они не выпустят ОС с компилятором в дефолтной поставке, которая захватит 95% рынка, они ничего никому не обязаны.

Igron ★★★★★
()
Ответ на: комментарий от Hokum

Hokum> Я как знал, что надо брать интел а не via...

Там вообще-то под VIA собрали. Только подменили CPUID на интеловский. И получили прирост производительности.

Quasar ★★★★★
()
Ответ на: комментарий от Igron

Igron> С какой стати коммерческий компилятор интеля должен вообще генерить код для амд?

Так пусть честно не генерирует. А официальная поддержка есть, значит вопросы и ругань будут.

Quasar ★★★★★
()
Ответ на: комментарий от wyldrodney

wyldrodney> Плохой флешь не пересоберёшь...

Флеш без всякого сомнения гамно. Но интел атом - это говно куда более вонючее.

Quasar ★★★★★
()
Ответ на: комментарий от Igron

Igron> Во-вторых, интел не контролирует 95% рынка компиляторов.

Ты алкоголик - штеуд контролирует нехилый кусок рынка процессоров x86.

Quasar ★★★★★
()
Ответ на: комментарий от Igron

Igron> Я думаю, им это хлопот не доставляет, т.к. наборы инструкций одинаковые.

Что тогда штеуду мешает генерировать одинаковый код, если наборы инструкций одинаковые?

Quasar ★★★★★
()
Ответ на: комментарий от Igron

Igron> Это значит, что до тех пор, пока они не будут контролировать 95% рынка компиляторов

Алкоголик-некрофил С ником Igron на ЛОР ходил.

Если что, речь о процессорах, а не о компиляторах.

Quasar ★★★★★
()
Ответ на: комментарий от Igron

Igron> они ничего никому не обязаны.

Обязаны. Они _официально_ поддерживают процессоры от AMD и VIA. И тут вдруг видим, что если процессор от VIA нарядить в интеловский - код генерируется гораздо лучший.

Quasar ★★★★★
()
Ответ на: комментарий от wyldrodney

И да, разве NetBeans не на жаве писан?


На жаве. А JVM написана на C++, и теперь мы знаем, что если она откомпилирована Sun C++ Compiler, а не ICC, то мы полчучаем тормоза во жабих прогах, использующих Gdi, DX, Direct3D, etc

Karapuz ★★★★★
()
Ответ на: комментарий от Igron

> Это значит, что до тех пор, пока они не будут контролировать 95% рынка компиляторов, или до тех пор, пока они не выпустят ОС с компилятором в дефолтной поставке, которая захватит 95% рынка, они ничего никому не обязаны.

Умышленно постараться сделать код, работающий под другими процессорами медленнее, чем под своими они тоже не должны при любом % рынка, потому что это называется нечестной конкуренцией.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от Quasar

Так пусть честно не генерирует. А официальная поддержка есть, значит вопросы и ругань будут.

Осиль уже этот текст:

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R) PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE Так пусть честно не генерирует. А официальная поддержка есть, значит вопросы и ругань будут.

FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR. Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked «reserved» or «undefined.» Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order. Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or by visiting Intel's Web Site. Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across different processor families. See http://www.intel.com/products/processor_number for details.

Igron ★★★★★
()
Ответ на: комментарий от Quasar

> Ты алкоголик - штеуд контролирует нехилый кусок рынка процессоров x86.

С процессорами дела будем вести отдельно. Если они пользовались методами нечестной конкуренции для наводнения рынка своими железками — отлично, докажем это в суде и получим от них компенсацию (или накажем их иным образом).

А вещества я не употребляю. Алкоголик, похоже, сидит на твоем стуле.

Igron ★★★★★
()
Ответ на: комментарий от Quasar

> Что тогда штеуду мешает генерировать одинаковый код, если наборы инструкций одинаковые?

Выше уже было сказано, или снова носом ткнуть?

Igron ★★★★★
()
Ответ на: комментарий от Quasar

> Алкоголик-некрофил С ником Igron на ЛОР ходил.

Спасибо, что позволил мне определить твой примерный возраст. В следующий раз не буду тратить время на дискуссии со школотой.

Igron ★★★★★
()
Ответ на: комментарий от Quasar

> Обязаны. Они _официально_ поддерживают процессоры от AMD и VIA. И тут вдруг видим, что если процессор от VIA нарядить в интеловский - код генерируется гораздо лучший.

Еще раз прочитай вышеприведенный кусок лицензии. Перечитывай каждое утро, возможно тогда тебе это поможет.

Igron ★★★★★
()
Ответ на: комментарий от no-dashi

Ты просто прикидываешься идиотом, или как? Дело не в том, что компилятор не генерит код для AMD, а в том, что он генерит нечто вроде такого[...]

Ты хочешь прослыть дурачком или ты и в самом деле искренне заблуждаешься?

Он работает примерно так:

switch ( cpu_id )
{
    case INTEL_NetBurst: 
        cpu_supports_sse2 == true;
        break;
    case INTEL_M: 
        cpu_supports_sse2 == true;
        break;
    case INTEL_Atom: 
        cpu_supports_sse2 == true;
        break;
    case INTEL_Core: 
        cpu_supports_sse2 == true;
        break;
    case AMD_Phenom: 
        cpu_supports_sse2 == true;
        break;
    default:
        cpu_supports_sse2 == false; 
}
[...]
long multiply(long a, long b) { 
    if (cpu_supports_sse2) { 
        return a * b; 
    } else { 
        return multiply_without_sse2(long a, long b);
    } 
}

Скорее всего у них просто не до конца заполнена информация о поддерживаемых инструкциях процессоров других фирм (достаточно заполнить ее, и компилятор будет генерировать «правильный» код). Во-первых, обратное не доказано, а во-вторых, интеловский компилятор — продукт интеля. И лицензия у него соответствующая.

Igron ★★★★★
()
Ответ на: комментарий от anonymous_incognito

> Умышленно постараться сделать код, работающий под другими процессорами медленнее, чем под своими они тоже не должны при любом % рынка, потому что это называется нечестной конкуренцией.

Так-то оно так, но пора перестать верить в мировые заговоры. У нас, как бэ, презумпция невиновности. Федеральная торговая комиссия США не дремлет и работает на наше благо.

Igron ★★★★★
()
Ответ на: комментарий от Igron
        cpu_supports_sse2 == true; // OH, SHI~~~

Ну вы поняли, да?

        cpu_supports_sse2 = true; // Self fix

Igron ★★★★★
()
Ответ на: комментарий от Quasar

Это был сарказм. На самом деле, некрасиво это несколько, насколько противозаконно - не знаю, амеры сами решат, у них хоть есть какие-то суды. К счастью, у нас есть честный gcc, и на icc мне вообщем-то ложить.

Hokum ☆☆☆☆
()
Ответ на: комментарий от Hokum

Я как знал, что надо брать интел а не via...

В статье сказали: «Достаточно поменять CPUID» и Intel будет в пролёте.

iZEN ★★★★★
()
Ответ на: комментарий от Igron

Скорее всего у них просто не до конца заполнена информация о поддерживаемых инструкциях процессоров других фирм

Похоже, ты относишься таки к разяду тех кто идиотом не прикидывается, а является. Такая таблица (CPUID->Features) НЕ НУЖНА. Список поддерживаемых процессором наборов команд доступен как битовая маска в регистрах, и такой ошибки допустить ТЕХНИЧЕСКИ НЕВОЗМОЖНО. Как допустить ошибку в таком коде?

cpuid(&registers);
has_sse2 = registers->edx & SSE2_BIT;
has_sse3 = registers->edx & SSE3_BIT;
has_sse4 = registers->edx & SSE4_BIT;
has_sse5 = registers->edx & SSE5_BIT;
has_vtx = registers->edx & VTX_BIT;

Такое поведение (разные ветви кода для процессоров с одинаковыми наборами команд) может быть заложено только УМЫШЛЕННО.

Ты хочешь прослыть дурачком или ты и в самом деле искренне заблуждаешься?

Ты знаешь, только идиот может думать, что бинарник может выбрать набор набор поддерживемых инструкций на основании данных о CPU Stepping, как это делал ты.

no-dashi ★★★★★
()
Ответ на: комментарий от Hokum

> На самом деле, некрасиво это несколько, насколько противозаконно

Это действительно очень нкрасиво, но вполне законно. Компилятор интеловский, что хотят - то в нем и творят.

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.