Unless you possess a degree in computer science or a related discipline or spend your free-time immersed in technical manuals like I do it is unlikely you’re aware of the epistemic crises facing software developers.

That is the issue of parallel processing, also known as concurrent processing. The basic theory of parallel processing allows for multiple operations to be performed simultaneously on different processors and the results to be combined and returned.

This is contrast to how processors have typically worked unto now, which is sequentially. A processor (such as the Central Processing Unit or CPU in your PC) performs operations in strict linearity - one step precedes another. Computers give the appearance of simultaneous activity by switching rapidly between each application’s processing tasks. Modern PCs can also offload certain types of processing by delegating it to specialized hardware - graphics processing goes to your graphics card, sound to your sound card etc.

Parallelism exists not because of some brilliant innovation in computing science, it exists because there hasn’t been a brilliant innovation. The amount of computing power available in a fixed amount of space, that is in a single chip, has a ceiling and we have essentially reached it.

You may have heard the marketing terms “multi-core” processor, such as Intel’s “Core 2 Duo” - these processing units add additional processors rather than making the one single processor faster.

The problem arrises because the way software is engineered prevents any sort of linear performance boost - for each processor you add you’ll experience a logarithmic decay in performance as each processor must coordinate its tasks with the other processors. Obviously this doesn’t happen, instead you simply get no performance enhancement despite the extra billion switches in your box.

Software isn’t engineered this way because there aren’t many commonly used languages that support parallel processing, moreover parallel processing isn’t merely a superficial change to phrasing  - it’s an entirely different architectural paradigm with which to architect software.

The holy-grail in computing research is to automate the process of parallel processing conversion from serially conceived software. Currently there is no such process that is commercially feasible.

C, C++, Java, PHP, COBOL, Ruby are all descended from the same serially premised roots. In the same way object-orientation revolutionized programming - pushing all but ANSI C to the procedural fringes, parallel processing will likely cause many languages to be abandoned.

What does this mean to consumers? Aside from the curiosity it presents, one can hope that it means very little. No hardware on the market is designed to truly take advantage of parallel processing even if though there are a few languages that support it. In the future it will likely mean an initial up-tick is shoddily made software as the current-generation of software programmers are forced to relearn their trade.

I suppose one could hold out hope for the 15 Ghz 100-Watt single-core processor, but I’d sooner wait on cold fusion or quantum-computing.

On the other hand - this does give another chance for small-businesses and obscure geniuses to break into a whole new market. The accumulated girth of the code currently available could be shed - the best applications would be ported over quickly and the rest deprecated, it could be seen as an industry-wide refresh. This means those otherwise intimidated by the dizzying array of platforms and tools (talk to anyone learning C++ or Java from scratch) might find it more enticing to get in on the ground floor.

While Parallel Programming models are being deployed in contemporary languages, these seem (to my illtrained eye) to be inappropriate bolt-ons to satisfy programmers enamored with a particular syntax.

Curiously, one of my favourite languages has supported parallel processing for more than a decade, Ada - the friend of anal-retentive high-integrity programmers the world over. Parallel processing is far from a new concept, it has its roots in the days of reel-to-reel tape media, room sized Cray machines and the computational hegemony of Lawrence-Livermore Labs.

Which language will be the next C? Will Haskell’s initial popularity carry it through? What about Castle’s impressive innovations? Sun certainly knows how to make a language. How about IBM’s X10? or good ole Cray’s Chapel?

Ultimately parallelism is the way to a new generation of ultra-fast computers. These machines will be not just folding proteins but simulating gene-expression, modelling the biosphere, monitoring the market, predicting the weather, encrypting data and of course….calculating really big prime numbers.

Something to say?