|
Вопрос по быстродействию SAM7 |
|
|
|
Mar 5 2008, 09:28
|
Группа: Новичок
Сообщений: 3
Регистрация: 12-02-07
Пользователь №: 25 262

|
Некоторое время использую в новых проектах AT91SAM7S. Ранее не требовалось оптимизации по быстродействию, но возникла задача, в которой очень важно обеспечить высокую производительность алгоритма. После экспериментов с быстродействием, столкнулся с необъяснимым эффектом. Суть проблемы такова: написал процедуру, просмотрел в дебагере сколько тактов процессора идет на обработку. Зная частоту проца, вычислил время исполнения кода. После практического измерения, реальное время исполнения оказалось значительно выше (примерно в 1.6 раза). Для упрощения задачи написал процедуру: __ramfunc void Benchmark() { volatile unsigned int i ; for ( i = 0 ;(i < 480000 );i++ ) ;
} При частоте ядра 48 МГц время выполнения должно составлять около 100 мс. На практике 160 мс. Частота ядра выставлена верно, измерения фактического времени выполнения тоже верны, все перепроверено несколько раз. Компилятор - IAR, оптимизация отключена. Смотрел асм. Там все верно (должно быть 10 тактов в одном цикле). За счет чего падает производительность. Не понимаю где скрыт подвох.
|
|
|
|
|
 |
Ответов
|
Mar 6 2008, 10:33
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970

|
Цитата(aaarrr @ Mar 6 2008, 14:17)  В результате в R1 получим 0x70000 | 0x5300 = 0x75300 (480000dec). Это просто загрузка константы. Мдя, не осилил сразу. В самом деле ужас. Хотя все равно не понимаю - у меня IAR 4.41 сгенерил вот что на приведенный код : Код \ In segment CODE_I, align 4, keep-with-next 140 __ramfunc void Benchmark() 141 { \ Benchmark: \ 00000000 00B5 PUSH {LR} \ 00000002 81B0 SUB SP,SP,#+4 142 volatile unsigned int i; 143 for ( i = 0;(i < 480000 );i++ ); \ 00000004 0020 MOVS R0,#+0 \ 00000006 0090 STR R0,[SP, #+0] \ ??Benchmark_0: \ 00000008 0098 LDR R0,[SP, #+0] \ 0000000A 0549 LDR R1,??Benchmark_1 ;; 0x75300 \ 0000000C 8842 CMP R0,R1 \ 0000000E 03D2 BCS ??Benchmark_2 \ 00000010 0098 LDR R0,[SP, #+0] \ 00000012 401C ADDS R0,R0,#+1 \ 00000014 0090 STR R0,[SP, #+0] \ 00000016 F7E7 B ??Benchmark_0 144 145 } \ ??Benchmark_2: \ 00000018 01B0 ADD SP,SP,#+4 \ 0000001A 01BC POP {R0} \ 0000001C 0047 BX R0 ;; return \ 0000001E C046 Nop \ ??Benchmark_1: \ 00000020 00530700 DC32 0x75300 Оптимизация отключена
|
|
|
|
Сообщений в этой теме
evgene Вопрос по быстродействию SAM7 Mar 5 2008, 09:28 Сергей Борщ Цитата(evgene @ Mar 5 2008, 11:28) За сче... Mar 5 2008, 09:51 evgene Цитата(Сергей Борщ @ Mar 5 2008, 19:51) 1... Mar 5 2008, 10:13  aaarrr Цитата(evgene @ Mar 5 2008, 13:13) Ниже л... Mar 5 2008, 10:20 aaarrr Цитата(evgene @ Mar 5 2008, 12:28) Смотре... Mar 5 2008, 10:02   aaarrr Цитата(_dem @ Mar 6 2008, 13:33) Хотя все... Mar 6 2008, 10:40 _dem Можно листинг посмотреть ? Mar 6 2008, 10:44 aaarrr Можно. RVDS 2.2, оптимизация отключена:
Код Bench... Mar 6 2008, 11:39 KAlex Цитата(aaarrr @ Mar 6 2008, 14:39) Можно.... Mar 6 2008, 12:27  Сергей Борщ Цитата(KAlex @ Mar 6 2008, 14:27) Вот IAR... Mar 6 2008, 12:38   KAlex Цитата(Сергей Борщ @ Mar 6 2008, 15:38) А... Mar 6 2008, 13:09 _dem Хм, приятно посмотреть хотя по тактам почти то же... Mar 6 2008, 12:12 aaarrr Цитата(_dem @ Mar 6 2008, 15:12) Хм, прия... Mar 6 2008, 14:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|