Itanium tutorial
I’ll make a research-oriented entry before long; I promise. I’m starting to get towards writing up some of the cool stuff in my thesis.
I’ve started writing an Itanium tutorial. That document will magically update every now and then as I write more. On the one hand it’s slightly embarrassing how much I’ve written — it’s almost half as much as I’ve written for my thesis so far — but it’s an entirely different kind of writing. There’s really no rigour at all to it. I don’t have to worry about proving things or citing things; I’ve never proofread any of it. I just write whatever pops into my head, which makes it very quick and easy. Primarily it’s for my benefit, so I don’t forget anything and so that it forces me to figure things out more concretely than I would otherwise.
I should say there’s a very good chance that some of it is wrong. After I figure something out, I write down my understanding of it. As I figure more things out, my previous understandings change. I really don’t care much if I write something (temporarily) wrong since it’s still just playing around for me.
I think Mark thought of it as a sort of mental health protector, which I think it’s done. The first few days, as I said, I kind of went bananas, but I don’t spend so much time on it these days. I think I’ve done more on my thesis in the past week than I had in the previous two. It helps a lot against getting burnt out when you have an unrelated intellectual activity to play with.
It’s hard to explain precisely why I like playing with it. It seems like the hardware/software interface — assembly language — hasn’t kept up with the changes in computer architecture. On most modern architectures you have only clues and guesses as to what the computer is actually doing even when working at the lowest level. The Itanium seems to be the first decent stab at exposing the modern superscalar pipelined architecture, so that the programmer no longer is restricted to just giving a description of what to compute, but rather has absolute and complete control over how it’s executed. It reminds me of playing with computers in the 1980s when it was possible for a person to know exactly what was happening. That level of control and level of understanding is a big part of what lured me into computer science in the first place, I suppose.
It’s a pretty deep rabbit hole to go down, though. I’ve now found myself reading microarchitecture specifications, the gory details of the Itanium 2 pipeline and so forth. It’s the price of being able to calculate exactly how many cycles something should be taking and finding my predictions are off in some cases.
It’s a pretty cool architecture. So far I haven’t found anything that I can’t get to run on the Itanium at least almost as fast my laptop, which is pretty impressive since this particular Itanium is so far outdated and running at less than half the clock speed of my laptop.