Parallel Processing Requires Parallel IO

One common use-case for multicore processing on the desktop and elsewhere is “doing many things at the same time”. You could be running many user-interface programs at once, like the “typical today’s teenager template” of tens of IM clients, web sessions, email conversations, music and video players, downloading movies, etc. Or it is a more business-like background indexing of harddrives, backups being taken, downloading large business files, compiling software, updating source code repositories, etc.

I have been doing both of these modes to some extent, and the main problem with them at least on a PC is that while the processors might be good at multitasking and sharing the CPU load, my IO system is annoyingly non-parallel.

At least on my laptop running Windows Vista, any task that accesses the hard drive intensely (compiling, updating source tree, indexing files) blocks any other task that would also be hard drive intense. For some reason, that includes Microsoft Powerpoint and Outlook. So being productive while my machine churns in the background is pretty hard.

In general, this means that any multicore device intended to do many different things at once will have to have IO that is similarly parallelizable. And that means working hard to avoid any choke points where one stream of data can disturb another. The typical PC of today is not that system, with lots of bottlenecks where “all” data have to pass. Most embedded multicore SoCs appear at least to have more direct connections from IO to cores, but I have not seen how well it works in practice.

This small rant was written while everything else was locked-up competing for my hard drive. I want a parallel fast disk system in my laptop! Pain!

2 thoughts on “Parallel Processing Requires Parallel IO”

  1. I believe, it all should go to implementing mainframe-like architecture with multiple backup IO channels and disk subsystems, only for desktop PC.

  2. Quite right. That is one likely way to use lots of silicon space… with the possible issue that you might run out of pins to push to IO over, leading to physically-induced conflicts and bottlenecks once integration has been pushed sufficiently far. That’s why serial buses are so important today, provides us with more bandwidth per pin. You also need to consider IO throughout the system architecture — the reason a PC has problems is not because of CPU bandwitdh deficiencies, but an imperfect system design built for low cost and flexibility rather than maximal streaming performance.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.