реклама на сайте
подробности

 
 
> gcc в разы быстрее IAR. В чем может быть дело..., неужели все дело в компиллерах...
Gemm
сообщение Jun 26 2007, 08:04
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 61
Регистрация: 2-08-05
Из: Коломна
Пользователь №: 7 283



Есть плата на AT91RM9200, на ней поднят стек (uIP), операционной системы нет. Программа просто получает поток данных и кладет в SDRAM.

Скомпилировали программу под ИАРом и под gcc в Линухе. Скорость работы программы, скомпиленной под gcc в 3 (три!) раза выше, чем под ИАРом. Стабильность работы стека после gcc выше. В обоих проектах включены кэши.

Это нормально, когда так отличается скорость работы одной и той же проги, скомпиленной разными компилерами? Как "ускорить" код от ИАРа? Пробовал разные оптимизации - не помогает. Что может быть не настроено в ИАРе?...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VslavX
сообщение Jun 26 2007, 10:10
Сообщение #2


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Gemm @ Jun 26 2007, 11:04) *
Скомпилировали программу под ИАРом и под gcc в Линухе. Скорость работы программы, скомпиленной под gcc в 3 (три!) раза выше, чем под ИАРом. Стабильность работы стека после gcc выше. В обоих проектах включены кэши.

Это беспредметный разговор - версии GCC и IAR какие? Опции компиляции какие? Режимы ARM/Thumb?
IAR 4.1x имеет довольно много ошибок - в свое время регулярно на них наталкивались. Версии 4.3x значительно лучше, но один раз компилятор тоже "был пойман" на генерации не совсем требуемого кода. Текущий 4.41 вроде пока ни в чем плохом не замечен.
По опыту использования GCC 2.95, 3.1, 3.2 разных сборок под сygwin - некоторые проблемы есть, но все преодолимо, встроенный ассемблер у GCC считаю лучшим.
Очерь понравился MS EVC, но там ассемблер полностью в стиле MASM и много танцев с бубном для получения бинарника (в-основном, EVC заточен для написания приложений под WinCE).
Компилировалось несколько функций объемом 10-100 строк указанными компиляторами в режиме ARM - IAR впереди по компактности и скорости, но общие отличия действительно на уровне процентов, отнюдь не в разы.
Go to the top of the page
 
+Quote Post
Gemm
сообщение Jun 26 2007, 12:05
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 61
Регистрация: 2-08-05
Из: Коломна
Пользователь №: 7 283



Цитата(zltigo @ Jun 26 2007, 13:37) *
smile.gif Сначала стабильно работающую программу напишите, потом уже рассуждайте о качестве кода компиляторов.

А с чего вы взяли, что она не стабильно работающая?

Цитата(VslavX @ Jun 26 2007, 14:10) *
Это беспредметный разговор - версии GCC и IAR какие?...

IAR 4.41A. Режим ARM. Оптимизация отключена.

Цитата(AlexandrY @ Jun 26 2007, 13:41) *
Абсурд.
Скорее всего GCC неправильно выполняет какие-то операции и вылетает из процедур...

Да нет, вроде ничего не вылетает - корректное TCP соединение, корректные пакеты (смотрим снифером). Пингуется без ошибок. Только ГЦЦшная 0.19мс, а ИАРовская 0.3мс.

Цитата(Paramedic @ Jun 26 2007, 13:14) *
Простите за любопытство, просто тоже сейчас борюсь с производлительностью AT91RM9200, но на компилятор грешить даже мысли не было (теперь есть). А Вы под отладчиком работаете или нет?

Работаем в IAR, отлаживаемся в нем же через JLink. Может и не надо грешить на компиллеры - возможно ошибка в нашем коде.


Есть подозрение, что дата кэш не включился, тк прироста в скорости не обнаружил. Включаю так:
asm("MRC p15, 0, r0, c1, c0, 0");
asm("ORR r0, r0, #0x00000004");
asm("MCR p15, 0, r0, c1, c0, 0");

Еще используем разные memcpy. Та, которая в ИАРовской библиотеке довольно медленная. Переписал свою на асме, но там траблы с выравниванием... Может кто поможет со быстрой стабильной memcpy и memset?
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 26 2007, 12:15
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(Gemm @ Jun 26 2007, 16:05) *
Есть подозрение, что дата кэш не включился, тк прироста в скорости не обнаружил. Включаю так:
asm("MRC p15, 0, r0, c1, c0, 0");
asm("ORR r0, r0, #0x00000004");
asm("MCR p15, 0, r0, c1, c0, 0");


Я для включения дата кэша использую библиотечные функции:
//*----------------------------------------------------------------------------
//* \fn AT91F_EnableDCache
//* \brief Enable D Cache
//*----------------------------------------------------------------------------
void AT91F_EnableDCache(void)
{
unsigned int ctl;

ctl = AT91F_ARM_ReadControl();
ctl |= (1 << 2);
AT91F_ARM_WriteControl(ctl);
}

//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadControl
//* \brief Read Control register
//*----------------------------------------------------------------------------
inline unsigned int AT91F_ARM_ReadControl()
{
register unsigned int ctl;
asm("MRC p15, 0, r0, c1, c0, 0");
return ctl;
}

//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WriteControl
//* \brief Write Control register
//*----------------------------------------------------------------------------
inline void AT91F_ARM_WriteControl(unsigned int ctl)
{
asm("MCR p15,0,r0,c1,c0,0");
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Gemm   gcc в разы быстрее IAR. В чем может быть дело...   Jun 26 2007, 08:04
- - Paramedic   Цитата(Gemm @ Jun 26 2007, 12:04) Есть пл...   Jun 26 2007, 09:14
- - zltigo   Цитата(Gemm @ Jun 26 2007, 11:04) Стабиль...   Jun 26 2007, 09:37
- - AlexandrY   Абсурд. Скорее всего GCC неправильно выполняет как...   Jun 26 2007, 09:41
|- - VslavX   Цитата(Gemm @ Jun 26 2007, 15:05) IAR 4.4...   Jun 26 2007, 12:41
|- - Paramedic   Цитата(Gemm @ Jun 26 2007, 16:05) Только ...   Jun 26 2007, 12:49
||- - Gemm   Цитата(Paramedic @ Jun 26 2007, 16:49) Ну...   Jun 26 2007, 12:58
|- - zhz   Цитата(Gemm @ Jun 26 2007, 15:05) Еще исп...   Jun 26 2007, 13:05
|- - zltigo   Цитата(Gemm @ Jun 26 2007, 15:05) А с чег...   Jun 26 2007, 14:44
- - e-yes   Могу дать уточнения по гэцэцэ, по версии IAR Gemm ...   Jun 26 2007, 11:33
- - e-yes   zltigo, читайте это так: при компиляции gcc (как A...   Jun 26 2007, 14:47
|- - zltigo   Цитата(e-yes @ Jun 26 2007, 17:47) z...   Jun 26 2007, 14:52
- - e-yes   Хорошо, как добиться работоспособности программы п...   Jun 26 2007, 15:22
|- - zltigo   Цитата(e-yes @ Jun 26 2007, 18:22) к...   Jun 26 2007, 15:32
- - e-yes   >Я не умею давать ответов на абстрактные вопрос...   Jun 26 2007, 18:42
|- - klen   парни, хватит бычится. я щас досебу gcc4.3.0-20070...   Jun 26 2007, 18:54
||- - zltigo   Цитата(klen @ Jun 26 2007, 21:54) я щас д...   Jun 26 2007, 19:31
|- - zltigo   Цитата(e-yes @ Jun 26 2007, 21:42) З...   Jun 26 2007, 19:02
- - e-yes   >Слушайте, любезный - ПРОЧИТАЙТЕ ПЕРВЫЙ ПОСТ СВ...   Jun 26 2007, 19:19


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016