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

 
 
> Вопрос по быстродействию SAM7
evgene
сообщение Mar 5 2008, 09:28
Сообщение #1





Группа: Новичок
Сообщений: 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 тактов в одном цикле).
За счет чего падает производительность. Не понимаю где скрыт подвох.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_dem
сообщение Mar 6 2008, 09:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



А откуда вылезло
ORR R1,R1,#0x5300
?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 6 2008, 10:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_dem @ Mar 6 2008, 12:58) *
А откуда вылезло
ORR R1,R1,#0x5300
?

Код
    MOV      R1,#+458752
    ORR      R1,R1,#0x5300

В результате в R1 получим 0x70000 | 0x5300 = 0x75300 (480000dec). Это просто загрузка константы.
Go to the top of the page
 
+Quote Post
_dem
сообщение Mar 6 2008, 10:33
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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


Оптимизация отключена
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 6 2008, 10:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_dem @ Mar 6 2008, 13:33) *
Хотя все равно не понимаю - у меня IAR 4.41 сгенерил вот что на приведенный код :

Ну, evgene не указывал, какая именно версия IAR у него - так что могут быть варианты.
RVDS, кстати, генерирует на этот пример красивый код даже с выключенной оптимизацией.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:55
Рейтинг@Mail.ru


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