Global Sources
EE Times-India
Stay in touch with EE Times India
EE Times-India > Embedded

Think optimal algorithms, data structure designs

Posted: 22 Jan 2010     Print Version  Bookmark and Share

Keywords:optimal algorithm  design structure  project development 

Optimisation of applications should not be a final step in project development, but rather an ongoing design philosophy that begins from the planning stages all the way through completion. By thinking about the optimal algorithms and data structure designs early on, greater performance benefits can be realised with less work by the time the product is mature.

But, getting into this mindset requires being aware of everything from computational complexity of algorithms to the data structure design and implementation and the proper use of parallelisation.

Software optimisation can occur at any time during application development, but the earlier you start, the better. Typically, the later you start optimising in a development cycle the more the optimisations tend to be narrower in scope and focused more on algorithm implementations and choice of instructions, like adding a few SIMD instructions here and there, instead of broad high-level optimisations.

High-level optimisations include the basic software architecture, key data structures and buffers, algorithms, memory access patterns, and of course parallelism. It is in these high-level optimisations that huge performance improvements can be made for seemingly little effort.

Unless you are writing short applications, it is going to take a ton of more effort to make significant performance improvements at the local level as compared to the high-level or foundation-level.

That old cliche of laying a solid foundation is alive and well in software optimisation. Before any code is written, think about performance and what foundation-laying things can be done to guarantee a high-performance application.

Designing the performance foundation focuses on the selection and evaluation of the critical algorithms and how those algorithms store data and move it throughout the application.

The goal is to find an algorithm and general architecture that can be easily threaded, scales well to multiple processors, is easy on memory bandwidth, uses the processors' caches efficiently, stores data in formats that are SIMD-friendly, isn't limited by some of the slower instructions such as the transcendental functions (e.g. sine, cosine, logarithms and so forth), and does not bottleneck on an off-motherboard system component like the network or HDD.

That might sound like a real tough maybe even an impossible job, but remember any extra time spent improving the foundation means less time anguishing over how to make the application faster later when time is fleeting and you only really have time left to optimise a function or two at a local-level.

Good algorithms and data layouts are the foundations of a fast application, and apt use of them can open up many more performance opportunities later on and may even avoid the need to use anything more than the compiler.

View the PDF document for more information.

Comment on "Think optimal algorithms, data struc..."
*  You can enter [0] more charecters.
*Verify code:


Visit Asia Webinars to learn about the latest in technology and get practical design tips.


Go to top             Connect on Facebook      Follow us on Twitter      Follow us on Orkut

Back to Top