I wanted to catalog my currently available programmable processing power, eventually satisfying the questions that Norvig Wants to Know:
- IBM Thinkpad T42 outfitted with Fedora 10, 2GB of RAM, 1.7GHz Pentium M processor, ??? GB Hard drive. This is my main machine. My workhorse. I’m terrible about backing it up, even though I’ve gone to the trouble to craft the right rsync command and have plenty of external drives with lots of space on them laying around. What’s worse is that every new release of Fedora entices me to do a hasty backup of my home directory and upgrade. Its like I’m asking for it.
- Dell tower that I bought off Saint Louis University’s Law School IT dept for $75, shitty processor (P2, maybe) and small HD (couple hundred MB), almost no memory to speak of. Its currently running Arch Linux, because the Haskell guys have such good things to say about the distro. I’m excited about the fact that the base distro is light (no heavy desktop environment or system services to speak of) so anywhere it goes from here will be the result of my efforts. That’s an opinion I probably didn’t hold a year ago — not being savvy enough to make all of those decisions — but its becoming increasingly important to me with every piece of software I uninstall from my Fedora box.
- Also available to me as storage, are two Maxtor external USB hard drives. 300 and 200GB in size.
- I own a TI-83+ calculator, none of that silver bullshit, its got the Zilog-80 processor (?? MHz) and 160Kb of flash memory (I think).
- I own a HP-15C in perfect working condition. Something like 96-something words (read: bytes) of memory, and an even slower processor, but its a cool tool to hack on beause unlike any other platform I’ve worked on, you are always conscious of the fact that processing speed and memory are precious, exhaustable resources.
- Old Original Xbox, has a CPU, a GPU some amount of memory and a hard drive. Its basically an off-the-shelf computer. There are some security measures to get around, though.
- I own a PSP with a cracked screen, rendering it — unlike my fully functional Xbox 360 — sacrificable to the gods of hackery.
- A spare Linksys B router that I don’t use.
If my comfortable world ended tomorrow and I had to build autonomous, roving robots to stride the city and wreak devastation upon plagues of the undead, I guess I could probably sacrifice the following to serve as those robot’s brain:
- A network-critical Linksys G router, which isn’t as readily hackable as, say, the WRTL versions.
- Xbox 360 with an attached 20GB hard drive.
While putting together my answers for all of the computing power currently available to me, I came across something interesting. My primary computer is a Thinkpad T42 running Fedora 10. It has an Intel Pentium M, and according to the ‘About This Computer’ dialog, its clocked at 1.7GHz.
Imagine my surprise when I ran
cat /proc/cpuinfo and found this:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 1.70GHz
stepping : 6
cpu MHz : 600.000
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr mce cx8 mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe up bts est tm2
bogomips : 1196.11
clflush size : 64
600MHz!!?? Turns out my CPU, like most Intel CPUs have frequency scaling to cut down on power consumption and heat production when you don’t need all the raw horsepower. I must have caught my processor sleeping. The
cpuspeed daemon will help you scale your CPUs frequency as it is needed. Something to think about when you’re wondering if everything is running just a tad bit slower than you think it should.
Peter Norvig, the Director of Research at Google and all-around AI guru, has an article floating around on the interwebs which you may have heard of: Teach Yourself Programming in Ten Years. As near as I can tell, I’m in year 6 of 10 and intensely interested in knowing how I rank among my peers. Norvig asks a handful of questions that a programmer should know about the hardware he’s working on. As I am also mildly interested in world-domination, I’d add that each of these should be answered for every programmable processor currently available to you, I’m just trying to get a tally on the current and future hardware costs something like world-domination is going to incur.
- How long does it take for your processor to execute an instruction?
- How long does it take for your processor to fetch a word from memory with a:
- cache hit
- cache miss
- How long does it take to read consecutive words from your hard disk?
- How long does it take to seek a new location on your hard disk?
I think that a inventory of currently available programmable platforms and the answers to these questions for each should be a good baseline for discussing how to write kick-ass programs that run as fast they possibly can.