|
Вопрос по быстродействию 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, 12:27
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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 _dem А откуда вылезло
ORR R1,R1,#0x5300
? Mar 6 2008, 09:58 aaarrr Цитата(_dem @ Mar 6 2008, 12:58) А откуда... Mar 6 2008, 10:17  _dem Цитата(aaarrr @ Mar 6 2008, 14:17) В резу... Mar 6 2008, 10:33   aaarrr Цитата(_dem @ Mar 6 2008, 13:33) Хотя все... Mar 6 2008, 10:40 _dem Можно листинг посмотреть ? Mar 6 2008, 10:44   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
|
|
|