Very Small Dreams
I'm still thinking about college. My school had a month in January where you would work on special projects. It would be four weeks on intensively working on one thing. My junior year, I worked a little bit with robotics. One of the computer science professors had some small robots. They had self powered wheels, a few infrared distance detectors and a control board with a little processor and 32 KB of memory - no hard drive. Programming these little buggers was an exercise in learning to live with less. Today, I write codes that can be GB in size by themselves and require many times that in memory to run. I had to code everything this little robot did with only 32 KB of memory. Of course, we didn't store any external data. Effectively, we programmed the robot to have no "memory" of it's environment, to only act instinctively. We programmed to it go through a maze - only, the maze needed to obey certain rules. The maze could only have right turns and it could have no loops. Otherwise, the robot would run into a wall at a bad angle or could get caught running in circles. It is possible we could have worked in a lower level language than the C we were using, but we had limited time and it was understood that the project was not so grand in design.
It got me thinking at the time about where I thought computing would be going. It's been clear that computers and the internet have revolutionized our lives. That you are reading this blog is a great example. However, it was not clear to me then just how much specialized computing would change our lives. I'll put here a list:
automobiles
cell phones
mp3 players
air conditioners
GPS
DVD players
security systems
refrigerators
washing machines (and dryers)
dish washers
ovens and stoves
microwave ovens
locks
classroom polling systems
restaurant book-keeping
All these items have been created or recently been enhanced through the use of specialized computing. Rather than some large machine that controls your whole house (as envisioned perhaps at Disney), it turns out that we put microchips in all kinds of things these days. A mechanic can connect a wire to your car and a screen will tell him what needs to be fixed. I have seen washing machines that calculate how much time is still required for the clothing to get clean. Waiters take lunch orders by entering them into small handhelds which tabulate the bill and automatically relate the information to the kitchen. The other items are more obvious.
We've gone through and experienced one computer related revolution. We all know how much better our lives are for the existence of PCs and laptops, for being able to access the internet. I think, however, we are just at the beginning of a very different computing revolution. You see, these kinds of dedicated computers, small cheap devices meant to better enable one particular task, have only been around for a short time. Further, it's a large divergence from the majority of computer development over the last fifty years.
In Star Trek, the spaceships generally have a computer which has ultimate control over the whole vessel. It controls everything from doors to the reactor core. This is where I think ideas of the future of computing have gone wrong. Imagine such a system getting a virus or having a hardware failure - it would be catastrophic. On the other hand, we are already using computers in specialized tasks - where we only have as much computing power as absolutely required. If one computer fails, all the other devices we use continue to function. It's also much easier to replace a cell phone than every piece of electronics you own all at once. I think this trend will continue and grow. I think we will be cheap, highly specialized computers applied in more ways than I can currently imagine - and I can imagine a lot. It makes me think, maybe that experience I had with making my robot's mind fit in only 32 KB was good training for the direction where the computer industry will be seeing the most growth.
RISC vs Pipeline, two philosophies in (single core) computer architecture
So back in the day, I got myself a degree in computer science. When I graduated, Windows XP was still fairly new and most people were using Pentium IVs or some form of these (at the time) cheaper AMD chips. 64 bit chips were only discussed in the computer science community at the time. In my computer architecture class, we studied chip design - particularly the instruction sets.
For those who aren't tech nerds, an instruction set is sum total of all the unique commands that can be run on a processor. They can range from simple commands such as *get* which retrieves a data item (called a word) to addition, multiplication and many other sets of instructions. An instruction is built from logical operators like *or* and *and*. An *or* statement is true if either option a or option b is true and returns false only if a and b are false. An *and* statement is true if both option a and option b are true but returns false if either or both are false. Anyhow, that's getting into the nitty gritty. Around this time were two main design philosophies: Pipeline and RISC.
The pipeline philosophy was about having as many instructions running at one time as possible. This would mean you spend your chip space on having a vast array of instructions that cover everything you'd possibly want to do. The instructions would have many steps and you would start the new instruction before the old one had finished. You would measure throughput (instructions finished per second) and try to maximize this. Certain functions which required multiple simple instructions would get specialized streamlined instruction paths. It is the cutting edge of using every little trick in the book. There are many popular examples of this design philosophy. The x86 architecture is perhaps the most famous. IBM put out the 386 and 486 chips which had these long pipelines and vast instructions sets. Of course, this design essentially became the basis for Pentium chips which vastly sped up computing power when they made certain developments related to clock speed (Mhz and Ghz). These chips are by far the most popular and commercially successful. Even todays dual core chips are mostly pipeline based.
The other design philosophy was RISC which meant reduced instruction set. This philosophy was based on the idea chip space is valuable. Rather than spend it on special instructions that rarely get used and a long pipeline, it should be spent on storage space. You see, a computer chip needs registers where it stores data it is currently working on. If you had a huge instruction set, you had little room on your chip for registers. That means you spend more time waiting to pull data from memory. It is worth nothing, on average, it would take twenty clock cycles (twenty times the time to execute a single instruction in a full pipeline) to retrieve a data item for one register. So this was the plan, spend as little chip space on instructions as possible and put as many registers on the chip as you can. In this way, you spend less time waiting for data to show up - that means more time executing useful instructions.
The natural question comes then as to which philosophy is better: pipeline or RISC? As always, the answer is, it depends. Today, the major leaps in chip design have been in moving up clock speed and reducing the size of integrated circuits. Smaller ICs mean things take up less space which in turn means a smaller footprint on the chip space. Given this, it seems better to go with the pipeline philosophy - a kind of "have your cake and eat it too" mentality. You get all those instructions and you still get lots of registers. Also, the large pipeline and vast array of instructions are very useful for multitasking and graphics based work. It would be easy to conclude that based on recent developments and trends that RISC was a good idea but today we are advanced enough to do away with such simple systems (I hear a million tech nerd voices scream from a distance and then go suddenly silent...)
The argument is still not settled here though. Scientific computation rarely needs a vast array of instructions - particularly when most operations are simple addition and subtraction. Of course, scientific computing hasn't driven the computer industry for a very long time - games have. Still yet, we may soon hit problems with the pipeline philosophy. We've managed to shrink integrated circuits by orders of magnitude. But we've started to hit some physical limits and we're quickly approaching more physical limits). We have made integrated circuits so small and so fast that they build up enough heat during the course of one cycle localized so finely that the IC loses functionality. We are literally looking at strips of material on the order of ten atoms thick. We are hitting other issues as well. As we devise more demanding tasks for our computers to handle, we may no longer have such freedom with chip space. Lately, we have moved towards multicore processors to find speed ups. This form of "parallel processing" means the chip space is being further and further divided up. Our silicon real estate is again rising in value. With out amazing breakthroughs that can allow us to design circuits at the almost atomic level, we will not be able to improve computers the way we have in the past. The cell processor could be the first sign that we may well need to return to a RISC architecture so we can have enough registers (the voices are quiet, but still there, perhaps).
I can't truly predict what happens, but we may see a return to an old philosophy is computing design.
EDIT: Man_Hammer brought to my attention that I have been using the wrong word. It should be RISC rather than RISK. I think I've fixed this now throughout the blog. Also, I should point out that while I use the words RISC and pipeline to refer to philosophies in computer design, they do also refer to very specific ideas. RISC is a very specific instruction set. A pipeline is a mechanism to speed up computations by having multiple instructions running at the same time. I should also point out that the specific RISC instruction set has a pipeline - just a small one. In this blog, I am only using these words to refer to the base ideas of computer design. We will literally never see a return to the specific RISC instruction set nor will we ever again be without a pipeline in processors.
This is the eseence of Japan
I'm no expert on Japanese culture but I think this game represents perfectly the experience I've had with oddball Japanese culture. Particularly, check out the video. This is so far beyond Katamari...
So...
New Chairs
We got new chairs at work. They're supposed to have allkinds of ways toadjust them. Unfortunately, it's alittle too complicated for someone like me.


