2010-01-21 4 views
1

В настоящее время я использую кросс-компилятор на основе GCC 3.3.3 для компиляции для платформы разработки Xscale PXA270. Тем не менее, мне было интересно, есть ли другие компиляторы Xscale, которые работают в Linux (или Windows, если на то пошло)? Настройка кросс-компилятора, которую я использую, имеет ужасную производительность на целевом устройстве, причем некоторые программы, которые делают приличное количество математических операций, которые в 10-20 раз хуже, чем на процессоре Xscale, чем на аналогичном такте Pentium 2. Любые другие варианты для компиляторов там или конкретные флаги компилятора, которые я должен установить с моим компилятором на основе GCC, который может помочь в производительности?Компиляторы Xscale для Linux? (также вопрос об объектах компиляции Xscale)

Спасибо, Бен

+3

GCC 3.3 !? Вы понимаете, что им больше 5 лет? Будьте «настоящим программистом» и скомпилируйте свою собственную цепочку инструментов GCC 4.4.2! – LiraNuna

+0

Я собрал для него целую цепочку инструментов GCC 4.1, но это кажется ужасно удачным или пропущенным, поэтому я вернулся к тому, что предоставил мне поставщик. – user21293

+0

Не знаю, что такое «настоящий программист», но если вы измеряете недавние операции GCC, вы обнаружите, что для ARM, по крайней мере, 4.2 был локальным минимумом времени, затраченным на компиляцию, память, используемую для компиляции, размер результирующего объектного кода и время, которое должен выполнять объектный код для запуска. Начиная с 4.3 и далее, какой-то экспоненциальный рост во всех 4 наборах. – martinwguy

ответ

4

Да, у вас нет FPU, поэтому с плавающей запятой необходимо выполнить математическую математику. Однако для этого есть два механизма, а один - в 11 раз быстрее, чем другой.

GCC target arm-linux-gnu обычно включает в себя настоящие команды с плавающей запятой в коде для первого FPU ARM, «FPA», теперь настолько редкого, что он отсутствует. Они вызывают незаконные ловушки команд, которые затем пойманы и эмулируются в ядре. Это очень медленно из-за контекстного переключателя.

-msoft-float вместо этого вставляет вызовы в библиотечные функции (в libgcc.a). Это позволяет избежать переключения в пространство ядра и в 11 раз быстрее, чем эмулированные инструкции FPA.

Вы не говорите, какую модель с плавающей запятой используете - возможно, вы уже создаете всю пользовательскую область с помощью -msoft-float, но, возможно, стоит проверить, что в ваших объектных файлах нет инструкций FPA. Вы можете проверить:

 
objdump -d file | grep '<space><tab>f' | less 
где file - любой объектный файл, исполняемый файл или библиотека, которую выдает ваш компилятор. Все инструкции FPA начинаются с f, в то время как другие инструкции по ARM не выполняются. Это фактическое пространство и символы табуляции, и вам может потребоваться указать <control-V><tab>, чтобы получить символ табуляции за вашей оболочкой.

Если вы используете FPA insns, вам необходимо скомпилировать все свое пользовательское пространство с помощью -msoft-float.

Наиболее полное дальнейшее чтение по этим вопросам - http://wiki.debian.org/ArmEabiPort, которое в первую очередь связано с третьей альтернативой: с использованием компилятора arm-linux-gnueabi, более новой альтернативы ABI, которая доступна из gcc-4.1.1 и далее и имеет разные характеристики. Дополнительную информацию см. В документе.

5

В отличие от Pentium 2, архитектура XScale не имеет собственных команд с плавающей точкой. Это означает, что математика с плавающей запятой должна эмулироваться с использованием целочисленных инструкций - примерно 10-20-кратное замедление звучит правильно.

Для повышения производительности, вы можете попробовать несколько вещей:

  • Где это возможно, свести к минимуму использования плавающей запятой - в некоторых местах, вы можете быть в состоянии subsitute простого числа или вычисления с фиксированной точкой;
  • Обменная память для скорости, путем предварительного расчета таблиц значений, где это возможно;
  • Используйте float s вместо double s в вычислениях, где вам не нужна точность последних (в том числе с использованием функций C99 float функций math.h);
  • Минимизировать преобразования между целыми числами и типами с плавающей запятой.
+0

Или, если устройство имеет графический процессор, посмотрите, можете ли вы его использовать. –

2

«Другие компиляторы XScale»

с открытым исходным кодом: LLVM и PCC, из которых LLVM является наиболее линукс-удобный и функциональный, а также имеет Gcc переднего конца; pcc, потомок почтенного Portable C Compiler, кажется более ориентированным на bsd.

Коммерческий: компилятор Keil (принадлежащий ARM Ltd), по-видимому, производит более быстрый код, чем GCC, но не сильно повлияет на ваше отсутствие FPU.