Компиляторы Xscale для Linux? (также вопрос флагов компиляции Xscale) - PullRequest
1 голос
/ 21 января 2010

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

Спасибо, Ben

Ответы [ 3 ]

5 голосов
/ 21 января 2010

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

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

  • Там, где это возможно, минимизируйте использование чисел с плавающей запятой - в некоторых местах вы можете заменить вычисления с простым целым числом или с фиксированной запятой;
  • Компромисс памяти для скорости, путем предварительного вычисления таблиц значений, где это возможно;
  • Используйте float с вместо double с в вычислениях, где вам не требуется точность последних (в том числе с использованием версий math.h функций C99 float);
  • Минимизировать преобразования между целыми числами и типами с плавающей точкой.
4 голосов
/ 21 января 2010

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

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

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

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

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

Если он использует inspa FPA, вам нужно скомпилировать весь пользовательский мир, используя -msoft-float.

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

2 голосов
/ 21 января 2010

"Другие xscale компиляторы"

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

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

...