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

 
 
> Вопрос по быстродействию 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
Ответов
aaarrr
сообщение Mar 6 2008, 11:39
Сообщение #2


Гуру
******

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



Можно. RVDS 2.2, оптимизация отключена:

Код
    Benchmark
    $a
    .text
        0x00000000:    e3a00000    MOV      r0,#0
        0x00000004:    ea000000    B        {pc} + 0x8 ; 0xc
        0x00000008:    e2800001    ADD      r0,r0,#1
        0x0000000c:    e250c807    SUBS     r12,r0,#0x70000
        0x00000010:    225ccc53    SUBSCS   r12,r12,#0x5300
        0x00000014:    3afffffb    BCC      {pc} - 0xc ; 0x8
        0x00000018:    e12fff1e    BX       r14
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 6 2008, 12:27
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(aaarrr @ Mar 6 2008, 14:39) *
Можно. RVDS 2.2, оптимизация отключена:

Код
    Benchmark
    $a
    .text
        0x00000000:    e3a00000    MOV      r0,#0
        0x00000004:    ea000000    B        {pc} + 0x8; 0xc
        0x00000008:    e2800001    ADD      r0,r0,#1
        0x0000000c:    e250c807    SUBS     r12,r0,#0x70000
        0x00000010:    225ccc53    SUBSCS   r12,r12,#0x5300
        0x00000014:    3afffffb    BCC      {pc} - 0xc; 0x8
        0x00000018:    e12fff1e    BX       r14

А как же "volatile"?
Вот IAR без "volatile". Тоже ничего. Хотя загрузка константы осталась в цикле.
Код
   \                     Benchmark:
   \   00000000   0010A0E3           MOV         R1,#+0
   \   00000004   0100A0E1           MOV         R0,R1
   \                     ??Benchmark_0:
   \   00000008   701AA0E3           MOV         R1,#+458752
   \   0000000C   531C81E3           ORR         R1,R1,#0x5300
   \   00000010   010050E1           CMP         R0,R1
   \   00000014   0100002A           BCS         ??Benchmark_1
   \   00000018   010090E2           ADDS        R0,R0,#+1
   \   0000001C   F9FFFFEA           B           ??Benchmark_0
   \                     ??Benchmark_1:
   \   00000020   1EFF2FE1           BX          LR                ;; return
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 6 2008, 12:38
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(KAlex @ Mar 6 2008, 14:27) *
Вот IAR без "volatile". Тоже ничего. Хотя загрузка константы осталась в цикле.
А теперь включите оптимизацию и убедитесь, что цикл исчез вообще smile.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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


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

 


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


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