- PVSM.RU - https://www.pvsm.ru -
Давайте попытаемся понять, что нового сделано в GCC компиляторе для процессоров архитектуры Intel Atom и как это влияет на производительность и размер кода известного бенчмарка EEMBC CoreMark [1].
Выше приведен график, отображающий производительность CoreMark, откомпилированного с пиковым и базовым набором опций разными версиями GCC относительно производительности базового набора опций для GCC версии 4.4.6 (выше – лучше).
При тестировании использовались следующие опции компилятора:
базовый набор опций (base): “-O2 -ffast-math -mfpmath=sse -m32 -march=atom”
базовый набор опций (base) + if convertion: “-O2 -ffast-math -mfpmath=sse -ftree-loop-if-convert -m32 -march=atom”
пиковый набор опций (peak): “-Ofast -funroll-loops -mfpmath=sse -m32 -march=atom”, для версий 4.4 и 4.5 “-Ofast” было заменено на “-O3 -ffast-math”
Подробнее про оптимальные опции для GCC на x86 было написано здесь [2]. Стоить отметить, что опция “-flto” пока не прибавляет производительности CoreMark.
Из графика видно, что базовый набор опций с “-ftree-loop-if-convert” достиг производительности пикового набора на CoreMark.
Ниже приведен график показывающий увеличение размера исполняемого кода CoreMark откомпилированного с пиковым набором опций относительного базового для разных версий GCC:
Ниже приведен график, показывающий увеличение размера исполняемого кода CoreMark, откомпилированного разными версиями GCC с базовым набором опций относительного базового набора опций на GCC 4.4.6:
“-ffunction-sections -Wl,--gc-sections -fno-asynchronous-unwind-tables -Wl,--strip-all” были добавлены к базовому и пиковому набору опций для измерения в размера кода. Данные опции не влияют на производительность CoreMark.
Более подробно про опции для оптимального размера исполняемого кода было написано здесь [3].
Из графиков видно, что размер кода на пиковом наборе опций в 2 раза больше, чем на базовом и продолжает расти. Базовый набор опций, напротив, обеспечивает незначительное снижение размера кода.
Все измерения производились для 1 потока на 2-х ядерном Intel Atom CPU D525, 1.80GHz с 4Gb памяти, операционная система Fedora 17.
GCC продемонстрировал очень хороший прогресс от версии 4.4 к версии 4.8 (в основном от версии 4.6 к версии 4.7 и от «-ftree-loop-if-convert» на базовом наборе опций версии 4.8). Размер кода на базовом наборе опций остается без изменений, на пиковом наборе растет.
Ниже приведено краткое описание опций и изменений в GCC от версии к версии:
Что, если в GCC версии 4.8 "-march=atom" включало бы лишь “-march=i686 -mtune=generic -mssse3”? Производительность на CoreMark упала бы на 5%. "-ftree-loop-if-convert” добавляет к производительности базового набора опций еще 13%.
Если для Вашего Atom приложения важен и размер кода, и производительность — переключайтесь на GCC версии 4.8 и пробуйте компилировать с опциями:
“-O2 -ffast-math -mfpmath=sse -ftree-loop-if-convet -fschedule-insns -fsched-pressure -m32 -march=atom”
Если же важна только производительность, то GCC 4.8 оптимален с опциями:
“-Ofast -flto -funroll-loops -mfpmath=sse -fschedule-insns -fsched-pressure -m32 -march=atom”
Автор: Evgeny1982
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/39945
Ссылки в тексте:
[1] EEMBC CoreMark: http://www.coremark.org
[2] здесь: http://habrahabr.ru/company/intel/blog/158939
[3] здесь: http://habrahabr.ru/company/intel/blog/167417
[4] подробнее: http://gcc.gnu.org/gcc-4.5/changes.html
[5] список изменений: http://gcc.gnu.org/gcc-4.6/changes.html
[6] Silvermont: http://newsroom.intel.com/community/intel_newsroom/blog/2013/05/06/intel-launches-low-power-high-performance-silvermont-microarchitecture
[7] Silvermont: http://newsroom.intel.com/community/intel_newsroom/blog/2013/05/06/intel-launches-low-power-high-performance-silvermont-microarchitecturehttp://
[8] список изменений: http://gcc.gnu.org/gcc-4.7/changes.html
[9] список изменений: http://gcc.gnu.org/gcc-4.8/changes.html
[10] Источник: http://habrahabr.ru/post/188386/
Нажмите здесь для печати.