steve dekorte
about
blog
projects
2004 01 01      Thoughts on Computer Architectures

There seem to be some tacitly accepted assumptions in the comp sci community that I think may be a barrier to "thinking different" about computer architectures:

1. Computers have single instruction streams

Comp sci education tends to focus on minimizing "operations". But in the real world, we typically want to minimize time and these are not necessarily positively correlated with operations on parallel architectures. An algorithm that uses 1000x more operations may complete in far less time on a highly parallel architecture.

What seems really odd is that we program algorithms that could greatly benefit from concurrency in languages that have no notion of concurrency, compile to a serial instruction stream and then have our modern processors try to guess at how to break tiny bits of it back into multiple streams to eek out a bit more performance.

2. Computers must have instruction streams

Processors trade speed for the ability to perform any computation. With reconfigurable logic, we may be able to dispense with instruction streams entirely by compiling the algorithm all the way down to transistors which may be both faster and more energy efficient by several orders of magnitude.

3. Logic and data must be separated

This is the primary bottleneck on modern machines, but little has been done address it. Object oriented languages are not only more intuitive, but are ideal for mapping to hardware where data and logic are organized to minimize communication costs.

4. Instruction streams must share data

That is, instruction streams can touch each others data directly - as "threads" do. This creates enormous problems with programming concurrent systems, but few question this assumption at the level of programming language design.