What is a wavelet? Wikipedia defines wavelets as:
A wavelet is a representation of a signal in terms of a finite length or fast decaying oscillating waveform.
This definition is not used often outside of mathematics circles, but some of its applications are. For example, wavelets are used for image processing, blood pressure analysis, ECG analysis, DNA analysis, climatology, speech recognition, computer graphics, and the list goes on.
So, why should we take a look at wavelets? I read an article today by Larry O’Brien about multi-threading. In his article, he discusses how multi-core processors enhance the utility of wavelets by compressing a 16 Mega-pixel image. Using Visual Studio 2005, OpenMP, and his multi-core machine, he saw a speed increase of 70% with 100% CPU utilization. The results were impressive and something to consider with other applications.
He argues that dual core speedup does not always outweigh the complexity of writing parallelized code. He continues by saying that optimizing single-threaded code often results in application speed up rivaling the speed increase of multi-threaded applications. However, he states that it won’t be long before quad-core, 16-core, and 32-core processors will arrive, and it will be impossible to deny the benefits of multi-threaded processing.
As developers we are essentially support staff automating tasks for end-users. (This might not be a popular definition, but we are). We build software for businesses, scientists, academics, and consumers. We do this to make their lives easier and more productive. We are asked build solutions that leverage and improve existing techniques.
We must also remember why we build software. We build software so individuals who have lost the ability to type can continue to work using speech recognition software. We build software so that people in need of heart surgery can be diagnosed sooner. We write software not only to make money, but to help people. Multi-threaded software extends this purpose.
There a lot of reasons to be afraid of multi-threaded development (race conditions, hard to debug, etc), but I think the rewards far outweigh any of these uncertainties.
Michael Cassens
mcassens@3leaf.com
Comments