Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Intel C++ Compiler на процессоре AMD, есть ли смысл использовать? 
V
    Опции темы
ksili
Дата 28.5.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



xvr, спасибо

Цитата(xvr @  28.5.2008,  12:03 Найти цитируемый пост)
Вообще то они отличаются не только дополнительными инструкциями, даже разные Intel'овские процессоры отличаются друг от друга в планировании кода.

Ну это-то понятно. Я только заметил про разницу в наборах команд.



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
MAKCim
Дата 28.5.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(KaraKum @  27.5.2008,  12:49 Найти цитируемый пост)
Нет никакой разницы какой процессор, если он совместим с x86 архитектурой. У процессоров Intel и AMD абсолютно одинаковые команды, только их реализация и выполнение внутри процессора осуществлены по-разному. 

так в этом и заключается низкоуровневая оптимизация: использовать свойства CPU в рамках конкретной архитектуры
в качестве примера возьмем C2D (IA-32e)

за каждый такт Instruction Fetcher из кэша L1 для кода передает предекодеру 16 байт
предекодер определяет границы закодированных инструкций (или инструкции) в рамках данного блока
причем для C2D есть следующий инварианты: 
 - количество инструкций в блоке не может быть > 6
 - если количество инструкций = x > 6, то за следующий такт могут быть предекодированы x - 6 <= 6 инструкций
 - если инструкция лежит на 16-ти байтной границе, то ее предекодирование откладывается до загрузки следующего 16-ти байтного блока

предекодированные блоки помещаются в очередь декодера (есть суть кэш L0) размером 64 байта (отсюда можно сделать вывод, что если цикл можно разбить на 1, 2, 3, 4 части с учетом вышеназванных инвариантов и при этом общий его размер не будет превышать 64 байта, то он будет постоянно находится в L0, что в 2 раза увеличивает производительность (засчет того, что декодер за раз извлекает из L0 не 16, а 32 байта))

декодер состоит и 4 частей: 1-ая декодирует инструкции, состоящими из <= 4uops; 2,3,4-ая - из <= 1 uops
отсюда вывод, если на вход декодеру подаются инструкции в последовательности 1 uops <- 4 uops <-1 uops <- 1 uops
то вместо 7-ми декодированных uops за такт, мы получим только 3, т. е снижение производительности в 2.3 раза

возьмем теперь концепцию micro-op fusion (объединение пары микроопераций в micro-op fusion-микрооперацию и интерпретация ее всеми частями конвеера (за исключением execution unit-ов) как одной микрооперации)
т. к большинство компонентов конвеера могут за такт обработать фиксированное количество микроопераций, слияние 2-ух микроопераций в одну повышает общую производительность

таким образом, только лишь изменяя порядок инструкций, мы можем получить повышение пропускной способности конвеера, а значит и общей производительности CPU
причем все, что написано выше специфично для С2D, хотя архитектура команд (за исключением некоторых расширений) идентична, скажем K10 от AMD


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 28.5.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



из всего вышесказанного можно сделать вывод, что лучше специфическую интеловскую оптимизацию не применять к АМДешным процессорам, т. к производительность может снизиться


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ksili
Дата 28.5.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Мне вот ещё интересно. Этот компилятор перед компиляцией определяет на каком он проце работает и оптимизирует под него? Если да, то значит он каждому AMD-шному процу сопоставляет какой-то свой? А если не так, то наверно флагами компилятору указывается, под что оптимизировать, а значит вообще без разницы на каком процессоре это делать, т.к. можно сделать кучу сборок и проверить какя быстрее (или вообще может можно отключить оптимизацию?).


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
xvr
Дата 28.5.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(ksili @ 28.5.2008,  10:15)
Мне вот ещё интересно. Этот компилятор перед компиляцией определяет на каком он проце работает и оптимизирует под него? 

Нет. 
Цитата

А если не так, то наверно флагами компилятору указывается, под что оптимизировать, 
Да. Есть куча флагов для управления (linux версия, beta):
Цитата

-x<code1>[,<code2>,...]
          generate specialized code to run exclusively on processors
          indicated by <code> as described below
            Host generate instructions for the highest instruction set and
                 processor available on the compilation host machine
 
            SSE2 Intel Pentium 4 and compatible Intel processors.  Enables new
                 optimizations in addition to Intel processor-specific
                 optimizations
 
            SSE3    Intel® Core™ processor family with Streaming SIMD
                    Extensions 3 (SSE3) instruction support
            SSSE3   Intel® Core™2 processor family with SSSE3
            SSE4.1  Future Intel processors supporting SSE4 Vectorizing
                    Compiler and Media Accelerator instructions
 
-ax<code1>[,<code2>,...]
          generate code specialized for processors specified by <codes>
          while also generating generic IA-32 code.  <codes> includes
          one or more of the following:
 
            SSE2 Intel Pentium 4 and compatible Intel processors.  Enables new
                 optimizations in addition to Intel processor-specific
                 optimizations
 
            SSE3    Intel® Core™ processor family with Streaming SIMD
                    Extensions 3 (SSE3) instruction support
            SSSE3   Intel® Core™2 processor family with SSSE3
            SSE4.1  Future Intel processors supporting SSE4 Vectorizing
                    Compiler and Media Accelerator instructions
 
-mcpu=<cpu>
          same as -mtune=<cpu>
 
-mtune=<cpu>
          optimize for a specific <cpu>
            pentium3  - optimize for Pentium® III processors
            pentium4  - optimize for Pentium® 4 processor (DEFAULT)
 
-march=<cpu>
          generate code exclusively for a given <cpu>
            pentium3  - streaming SIMD extensions
            pentium4  - Pentium® 4 New Instructions
 
-mia32    generate generic IA-32 architecture code for Intel Pentium III
          and compatible Intel processors.  Disables any default or previously
          set extended instruction setting
 
-msse     generate code for Intel Pentium III and compatible Intel processors
 
-msse2    generate code for Intel Pentium 4 and compatible Intel processors
 
-msse3    generate code for Intel® Core™ Duo processors, Intel® Core™
          Solo processors, Intel Pentium 4 and compatible Intel processors with
          Streaming SIMD Extensions 3 (SSE3) instruction support
 
-mssse3   Intel® Core™2 processor family with SSSE3
 
-msse4.1  Future Intel processors supporting SSE4 Vectorizing Compiler and
          Media Accelerator instructions


Цитата

а значит вообще без разницы на каком процессоре это делать, т.к. можно сделать кучу сборок и проверить какя быстрее (или вообще может можно отключить оптимизацию?).
Можно

PM MAIL   Вверх
MAKCim
Дата 28.5.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(ksili @  28.5.2008,  10:15 Найти цитируемый пост)
Этот компилятор перед компиляцией определяет на каком он проце работает и оптимизирует под него? Если да, то значит он каждому AMD-шному процу сопоставляет какой-то свой? А если не так, то наверно флагами компилятору указывается, под что оптимизировать, а значит вообще без разницы на каком процессоре это делать

динамическое определение типа CPU (__intel_new_proc_init(), __intel_proc_init(), __intel_cpu_indicator(), ...)
+ возможность жесткой привязки через флаги на этапе компиляции


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
W4FhLF
Дата 28.5.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Интеграция последнего компилятора от Intel в студию >= 8.0 полностью автоматизирована. Я без проблем установил и чтобы переключаться между двумя компиляторами использую просто одну кнопочку(ну, грубо говоря). 

Что касается в общем уровня генерируемого кода в сравнении с компилятором от MS, то никаких гениальных и качественно новых идей в машинном коде, который генерируется компилятором от Intel, я не нашёл. Всё что я говорю связано, конечно, с тем спектром задач, которые решаю я. А пару месяцев назад я столкнулся с проблемой обоснования выбора языка и компилятора для реализации одной задачи. Я взял алгоритм, который в задаче используется достаточно часто. Алгоритмы называется SVD - singular value decomposition или сингулярное разложение матриц. Это достаточно ресурсоёмъкий и сложный алгоритм. 

Я брал матрицу 1681х1681 и применял к ней SVD. SVD алгоритм был реализован на 2х языках, в том числе на С++ он компилировался с использованием родного компилятора от MS из 2005 студии, и с использованием 10ой версии компилятора от Intel. На С++ он компилировался в одном случае с использованием SSE2 команд, а в другом без. 

Далее, все полученые модификации, были протестированы на 7ми разных процессорах. Вот сводная таблица(значения - время работы алгоритма в секундах):

user posted image

Я занимался профилированием алгоритма, основная часть(~80%) времени уходит на обращение к памяти и здесь C2D может быть быстрее только из-за того, что у него достаточно большой объём кеша по сравнению с AMD. В общем-то даже на самих процессорах от Intel их компилятор даёт весьма неоднозначный результат для процессоров разных семейств и поколений. 

Что касается машинного кода. Машинный код, полученный двумя этими компиляторами фактически оказался идентичным, т.е. в рамках этой задачи я не увидел, чтобы Intel C++ Compiler 10.0 проводил какую-то тонкую оптимизацию. Возможно из-за того, что я не указывал точно семейство процессоров для которых компилирую(т.к. алгоритм используется на разных процессорах в этом просто нет смысла). 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
georain
Дата 29.5.2008, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Я с VC не сравнивал, но вот разница между gcc4.1 и icc10.0 огромная.
Например у меня при оптимизации -О3 (без указания типа процессора, т.е. программа может работать как на intel так и на amd) программа от gcc весит 450кб, а от iсс 240кб (причём даже меньше чем при -О2 smile ), ну и соответственно выполняется процентов на 30 быстрее.
ИМХО тут важна не оптимизация под процессор, а оптимизация собственно кода.

Это сообщение отредактировал(а) georain - 29.5.2008, 02:03
PM MAIL   Вверх
W4FhLF
Дата 29.5.2008, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



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


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
georain
Дата 29.5.2008, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Я не говорил что размер влияет на скорость, я лишь привёл результаты на основе моего проекта. Не обращая внимания на размер, интегральный прирос в 30% это результат хороший.
Кроме того icc производит более глубокую диагностику и намного лучше придерживается стандарта, мне даже приходится не использовать некоторые возможности для совместимости с gcc.
В общем моё мнение такое, если позволяют возможности обязательно используйте icc.
PM MAIL   Вверх
ksili
Дата 29.5.2008, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Так сложилось, что я в MS VS практически не работал. Использую BCB6. У меня в нем установлено расширение С++ Compiler Enchancements 2.75. Служит оно в основном для увеличения скорости компиляции. Но я нашёл в нём настройки bcc32.exe replacement (C++ Compiler) и ilink32.exe replacement (Linker). Т.е. стандартные компилятор и линковщик можно заменить. 
Так может возможно использовать ICC не только с MS VS, но и Билдером? Как думаете, стоит попытаться их подружить или уже проверено, что не будут вместе работать?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
xvr
Дата 29.5.2008, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(ksili @ 29.5.2008,  05:33)
Так сложилось, что я в MS VS практически не работал. Использую BCB6. У меня в нем установлено расширение С++ Compiler Enchancements 2.75. Служит оно в основном для увеличения скорости компиляции. Но я нашёл в нём настройки bcc32.exe replacement (C++ Compiler) и ilink32.exe replacement (Linker). Т.е. стандартные компилятор и линковщик можно заменить. 
Так может возможно использовать ICC не только с MS VS, но и Билдером? Как думаете, стоит попытаться их подружить или уже проверено, что не будут вместе работать?

C VCL на 99% работать не будет - там используются нестандартные расширения языка, icc их не понимает

PM MAIL   Вверх
JackYF
Дата 29.5.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(georain @  29.5.2008,  03:40 Найти цитируемый пост)
возможности обязательно используйте icc. 

Какие архитектуры поддерживает этот компилятор? насколько эффективный код он генерирует для процессоров AMD? Какая лицензия и цена у этого компилятора?

Добавлено через 52 секунды
Цитата(georain @  29.5.2008,  03:40 Найти цитируемый пост)
более глубокую диагностику и намного лучше придерживается стандарта, мне даже приходится не использовать некоторые возможности для совместимости с gcc.

Давай конкретику. gcc бери версии 4.3.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
W4FhLF
Дата 29.5.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Не совсем ясно, что за диагностику вообще компилятор призван проводить? И прямо-таки намного лучше по части стандарта? Последний компилятор от студии кстати, версия 9.0, очень даже неплох. У самого пока нет возможности перейти, но со слов очень грамотных коллег, занимающихся разработкой драйверов(т.е. люди много времени проводят за асм-листингами) компилятор неплохо эволюционировал.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
georain
Дата 29.5.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(JackYF @  29.5.2008,  14:52 Найти цитируемый пост)
Какие архитектуры поддерживает этот компилятор? насколько эффективный код он генерирует для процессоров AMD? Какая лицензия и цена у этого компилятора?

У меня работает на amd и intel 32-х и 64-х разрядных версиях. ОС: windows, linux, mac os x.
На данный момент для 64-х разрядных систем эффективность кода для intel и amd почти одинакова, наверное ввиду близкого набора команд. Как дальше будет не знаю. Для 32-х не проверял к сожалению.
Для некоммерческого использования под linux он бесплатный. Для остальных систем есть 30 дней тестового периода. А цена около 500. smile
А вообще лучше смотреть на www.intel.com ;)

Цитата(JackYF @  29.5.2008,  14:52 Найти цитируемый пост)
Давай конкретику. gcc бери версии 4.3. 

Не могу брать, 4.2.3 под 64 не протестин, а 4.3 вообще пока считается нестабильным. Мне кажется нужно говорить о том что есть.
Вот недавно столкнулся, в gcc не могу внутри класса определить явную специализацию для шаблонной функции.
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.