The Parallel Universe: Mining Parallelism Pt. VII
Gems in the Dust. As if we hadn’t found enough parallelism already (is there ever really enough?), we shouldn’t overlook the mundane, but ubiquitous instructions that handle bookkeeping, intermediate results, and program state manipulations. Even subtler is the practice of computing results that may not be needed if a certain condition is true,
but that can be computed in parallel with evaluating the condition. It’s easy to miss these gems in the dust of computing because we don’t often think of them on algorithmic level. But when the code is executed, they are there, they are necessary, and very often they can be easily moved around to increase the overall instructions executed each cycle.
When I was a graduate student, frustrated with the lack of progress on my thesis, I once challenged my adviser as to how pervasive parallelism was in computing and the world in general. He told me that parallelism is everywhere; you just have to look for it, grab hold of it, and use it. Actually, in the way of all truly great teachers, he simply said “that’s not going to make much of a thesis,” and let me work out the rest. So when someone tells me that there’s no parallelism to be found in one or another computing problems, I simply smile and let them see for themselves the endless expanses of the Parallel Universe.