avr-libc-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-libc-dev] OPTIMIZE_SPEED for avr5?


From: David Brown
Subject: Re: [avr-libc-dev] OPTIMIZE_SPEED for avr5?
Date: Tue, 06 Mar 2007 08:50:53 +0100
User-agent: Thunderbird 1.5.0.10 (Windows/20070221)

Dmitry K. wrote:
On Saturday 03 March 2007 07:57, Eric Weddington wrote:
Today, there is a bit of functions (memset, memcpy and
memcpy_P), which are in 2 variants: compact and speed.
This acceleration is very effective: a few of progmem
words give 10..30% speed increase. I plan to expand this
function list slightly.

Avr-libc compiles a speed variant for avr3 family only.
What about to add avr5? Is there any objections?
Hi Dmitry,

This brings up the overall issue of what should the goal be for avr-libc?
Speed, or size?


Speed is, IMHO, often an important aspect in embedded programming. Faster code means lower clock frequencies for the same job, leading to lower emissions and lower power. It can also mean more options regarding the hardware (such as less stringent voltage restrictions). Alternatively, it means the processor spends more time asleep, and therefore use less power. All in all, faster code is good.

I still lean towards *size* as the number 1 priority for all code, for all
architectures and devices. When AVR compilers are compared, they are always
compared on code size, not code speed.


Size is the main priority when you are low on flash space - otherwise, it is irrelevant. If your chosen AVR has 16k flash, then it does not matter if the program code takes 2k or 15.9k of that flash. In particular, for smaller devices, program space will be at a premium, while for the larger devices, much of the flash will often be things like tables or other data that is of fixed size.

There are only two things I have ever compared AVR compilers on - features (where gcc wins), and "quality" of the generated code, which is at least as much to do with speed as size. I can't see any reason to generate poorer code just to look better on someone else's comparison benchmarks, just because it is easier for them to give a code size than do a proper comparison.

OK, I shall not change any compilation options.
Though a discrepancy remains between avr3 and avr5.

Nevertheless, I shall a little expand the list of functions
where this option is present. Certainly, it can affect a code
only in case of compulsory inclusion of this option. I shall
repeat, that it is a question only of small quantity of functions
which it is often enough used and where such optimization is
effective enough. For example (not commited now):
   memset:          3.5 vs 6 clock/byte, cost= 4 words
   memcpy,memmove:  5.5 vs 8 clock/byte, cost= 5 words
   memcmp:          7.5 vs 10 clock/byte, cost= 6 words
   strlen:          4 vs 5 clock/byte, cost= 2 words


Personally, I'd choose speed over size in all of these cases - the gains are high and the costs low.

I would not be so categorical in an estimation of a priority
of the size. Eventually, speed is important from the very
beginning of the project, and the size starts to interest only
after overflow of memory.


For what it's worth, I agree with you fully, Dmitry.

mvh.,

David


Dmitry.



_______________________________________________
AVR-libc-dev mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/avr-libc-dev







reply via email to

[Prev in Thread] Current Thread [Next in Thread]