I got a call from Rob Conery today asking for advice on building his own computer. Rob works for Microsoft, but lives in Hawaii. I'm not sure how he managed that, but being so far from the mothership apparently means he has the flexibility to spec his own PC. Being stuck in Hawaii is, I'm sure, a total bummer, dude.
Rob and I may disagree on pretty much everything from a coding perspective, but we can agree on one thing: we love computers. And what better way to celebrate that love by building your own? It's not hard. This industry was built on the commodification of hardware. If you can snap together a Lego kit, you can build a computer.
Maybe this is a minority opinion, but I find understanding the hardware to be instructive for programmers. Peter Norvig -- now director of research at Google -- appears to concur.
Understand how the hardware affects what you do. Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), transfer data over ethernet (or the internet), read consecutive words from disk, and seek to a new location on disk.
In my book, one of the best ways to understand the hardware is to get your hands dirty and put one together, including installing the OS, yourself. It's a shame Apple programmers can't do this, as their hardware has to be blessed by the Cupertino DRM gods. Or, you could build a frankenmac, though you'll run the risk of running a "patched" OS X indefinitely.
As Rob and I were talking about the philosophy of building your own development PC -- something I also discussed on a Hanselminutes podcast -- he said you know, you should blog this. But Rob -- I already have, many times over! Let's walk down the core list of components I recommended for Rob, and I'll explain my choices with links to the relevant blog posts I've made on that particular topic.
ASUS P5E Intel X38 motherboard ($225)
I'm a big triple monitor guy, so I insist on motherboards that are capable of accepting two video cards -- in other words, they have two x8 or x16 PCI Express card slots suitable for video cards. I also demand quiet from my PC, which means a motherboard with all passive cooling. Beyond that, I don't like to pay a lot for a fancy motherboard. After spending the last five years with motherboards packing scads of features I never end up using (two ethernet ports, anyone?), I've realized there are better ways to invest your money. People tend to respect ASUS as one of the largest and most established Taiwanese OEMs, so it's usually a safe choice. I'd go as far down on price on the motherboard as you can without losing whatever essential features you truly need. Save that money for the other parts.
Intel Core 2 Duo E8500 3.16 GHz CPU ($190)
Intel Core 2 Quad Q9300 2.5 GHz CPU ($270)
Ah, the eternal debate: dual versus quad. Despite what Intel's marketing weasels might want you to believe, clock speed still matters very much. Here's an example: SQL Server 2005 queries on my local box, a 3.5 GHz dual core, execute more than twice as fast as on our server, a 1.8 GHz eight core machine. Sadly, very few development environments parallelize well, with the notable exception of C++ compilers. Outside of a few niche activities, such as video encoding and professional 3D rendering, most computing tasks don't scale worth a damn beyond two cores. Yes, it's exciting to see those four graphs in Task Manager (and even I get a little giddy when I see sixty-four of 'em), but take a look at the cold, hard benchmark data and the contents of your wallet before letting that seductive 4 > 2 math hijack the rational parts of your brain.
It's also smart to buy a little below the maximum, with the ultimate goal of upgrading to a whizzy-bang 4 GHz quad core CPU sometime in the future. One of the hidden value propositions in building your own PC is the ability to easily upgrade it later. CPU is one of the most obvious upgrade points where you want to intentionally underbuy a little. Give yourself some room for future upgrades. Until a quad costs the same as a dual at the same clock speed, my vote still goes to the fastest dual core you can afford.
Kingston 4GB (2 x 2GB) DDR2 800 x 2 ($156)
Memory is awesomely cheap. When it comes to memory, I like to buy a few notches above the cheapest stuff, and Kingston has been a consistently reliable brand for me at that pricing level. There's no reason to bother with anything under 8 GB these days. Don't get hung up on memory speed, though. Quantity is more important than a few extra ticks of speed. But don't take my word for it. As an experiment, Digit-Life cut the speed of memory in half, with a resulting overall average performance loss of merely three percent. By the time your system has to reach outside of the L1, L2, and possibly even L3 cache -- it's already so slow from the system's perspective as to be academic. Memory that is a few extra nanoseconds faster isn't going to make any difference. This is also why I specified the latest and greatest Intel CPUs with larger 6 MB L2 caches. Remember, kids, Caching Is Fundamental!
Western Digital VelociRaptor 300 GB 10,000 RPM Hard Drive ($290)
This is arguably the only indulgence on the list. The Velociraptor is an incredibly expensive drive, but it's also a rocket of a hard drive. I'm a big believer in the importance of disk speed to overall system performance, particularly for software developers. At least Scott Guthrie backs me up on this one. Trust me, you want a 10,000 RPM boot drive. Buy a slower large drive for your archiving needs. You want two drives, anyway; having two spindles will give you a lot of flexibility and also help your virtual machine performance immensely.
This new raptor model is the best of the series. It's much quieter, uses less power, generates less heat, and is by far the fastest -- embarrassingly fast. It's expensive, yes. I won't hold it against you if you decide to disregard this advice and go with a respectably fast, less expensive hard drive. But to me, it's all about putting the money where the most significant bottlenecks are, and considered in that light -- man, this thing is so worth it. As Storage Review said, "[its] single-user scores .. blow away those of every other [hdd]".
Radeon HD 4850 512MB video card ($155 after rebate)
Even if you're not a gamer, it's hard to ignore the charms of this amazing powerhouse of a video card. The brand new ATI 4850 delivers performance on par with the very fastest $500+ video card you can buy for a measly hundred and fifty bucks! Modern operating systems require video grunt, either for windowing effects or high-definition video playback. Beyond that, it's looking more and more like some highly parallizable tasks may move to the GPU. Have you ever read stuff like "even the slowest GPU implementation was nearly 6 times faster than the best-performing CPU version"? Get used to reading statements like that; I expect you'll be reading a lot more of them in the future as general purpose APIs for GPU programmability become mainstream. That's another reason, as a programmer and not necessarily a gamer, you still want a modern video card. For all this talk of coming 8 and 16 core CPUs, eventually the GPU could be the death of the general purpose CPU.
We also want our video card to be efficient. Many don't realize this, but your video card can consume as much power as your CPU. Sometimes even more! The 4850, for all its muscle, is remarkably efficient as well. According to a recent AnandTech roundup, it's on par with the most efficient cards of this generation. Pay attention to your idle power consumption, because power consumed means heat produced, which in turn means additional noise and possible instability.
Corsair 520HX 520W Power Supply ($100 after rebate)
The power supply is probably one of the most underrated and misunderstood components of a modern PC. First, because people tend to focus on the "watts" number when the really important number is actually efficiency -- a certain percentage of energy that goes into every power supply is turned into waste heat. An efficient power supply will run cooler and more reliably because it uses higher quality parts. People think you need 1.21 Jigawatts to run a powerful desktop system, but that's just not true. Unless you have a bleeding-edge CPU paired with two high-end top of the line gaming class video cards, trust me -- even 500 watts is overkill.
The Corsair model I recommend gets stellar reviews. It has modular cables and the 80 plus designation, so it's 80% efficient at all input voltages. Note that a quality power supply is not a substitute for a quality UPS or surge protector, but it helps.
Scythe "Ninja" SCNJ-2000 cooler ($50)
Scythe "Ninja Mini" SCMNJ-1000 cooler ($35)
I'll be honest with you. I have a giant heatsink fetish. These giant hunks of aluminum and copper, and the liquid-filled heatpipes that drive them, fascinate me. But there's a more practical reason, as well: if you want a quiet computer, you don't even bother with the stock coolers that are bundled with the CPU. Over the last few years, I keep coming back to Scythe's classic "Ninja" tower cooler, which is available in tall and short varieties. They're so astoundingly efficient that, with adequate case ventilation, they can be run fanless. I even (barely) managed to squeeze the Ninja Mini into my home theater PC build, and it's now mercifully fanless as well. There are plenty of other great tower/heatpipe coolers on the market, but the Ninja is still one of the best, a testament to its pioneering design. The CPU is (usually) the biggest consumer of power in your PC, so it's sensible to invest in a highly efficient aftermarket cooler to keep noise and heat at bay under load.
There you have it. More than you ever possibly wanted to know about how an obsessive geek builds a PC -- painstakingly analyzing every single part that goes into it. Now, like Rob, you're probably sorry you asked; who needs all the philosophical digressions, just give us the damn parts list! OK, here it is:
The best bang for the buck developer x86 box I can come up with, all for around $1100.
I try to avoid posting about hardware too much, but sometimes I can't help myself. I blame Rob. Enjoy your new system, Mr. Conery.
| [advertisement] Complimentary paperback book on lightweight peer code review. 10 essays from industry experts. Free shipping. Order Best Kept Secrets of Peer Code Review. |
Posted by Jeff Atwood View blog reactions
« Coding Without Comments Is Money Useless to Open Source Projects? »
I'm interested to see how Rob Conery would use all 8 GB of memory. It seems that to use all 8 GB, he'd have to deal with the hassle of using a 64-bit clean OS and all the driver complications that come with it. And, in my experience, all that work doesn't really get repaid much, as I've never exceeded more than 3 GB of physical memory use.
Michael on July 27, 2008 07:06 PMNice setup :). What about the case? I don't see it in the parts list...
Also, I doesn't matter for an average home user, but I would definitely buy a second hard drive and put them in RAID1. Few hours of lost programmer's productivity (or may be even a day+ spent rebuilding the system) is definitely than $300.
Stas on July 27, 2008 07:07 PMActually, your hardware posts are some of your best I think.
Steve on July 27, 2008 07:12 PM>>The best bang for the buck developer x86 box
Don't you mean x64 box? You'll definitely be going 64-bit on this bad-boy, won't you?
PWills on July 27, 2008 07:22 PMI'm with Michael on this one. My first reaction was "8GB? You're out of your damn mind." I assumed it was just me, since I run Gentoo and can't stand Gnome or KDE because they're so full of junk I don't need. I've never had a computer with even 1GB, but 8GB really seems ridiculous. I'd like to see how you justify that.
Mark Tiefenbruck on July 27, 2008 07:24 PMGood call on the power supply. I had to learn that all the hard and expensive way.
Chris Missal on July 27, 2008 07:24 PMGood call on the power supply. I had to learn that all the hard and expensive way.
Chris Missal on July 27, 2008 07:25 PMI agree and disagree with you, Jeff. Getting "your hands dirty and put one together" doesn't really teach you anything more than what you'd learn from assembling a drum set for Rockband or building any other structure where the instructions are as simple as "insert rod a into slot b". I didn't truly understand how exactly the videocard pipeline worked until I wrote one, nor did I truly understand how a CPU worked until I got my "hands dirty" and wrote parts of one either. To say that assembling something from parts helps you understand the underlying principles is equivalent to saying that buying a swing set kit from Lowes and building it taught you all about carpentry.
Patrick on July 27, 2008 07:29 PMI have 4 GB. I must admit I'm a little surprised at the recommendation for 8 GB (but then, I've had 4 GB for 2 years now). Still, I know for certain that the only reason I've never used more than 4 GB physical is that I only HAVE 4 GB physical.
As for 64 bit drivers, it's hit and miss, but it's mostly hit (which really goes for 32 bit as well). 64-bit Vista has been fine for me and on a bunch of other machines I tried. It was not fine at RTM, mind you. But it's fine now (without changing the hardware).
Ens on July 27, 2008 07:30 PM"In my book, one of the best ways to understand the hardware is to get your hands dirty and put one together, including installing the OS, yourself."
Really? Putting PCs together taught me a lot about thermal paste, how to seat memory properly, and what your apartment smells like after you accidentally attach a jumper carrying DC power to the wrong bit of your motherboard, but it didn't really teach me anything relevant to developing software.
Charles Miller on July 27, 2008 07:31 PMa couple of things.
1. you dont need two video cards for triple monitor support. you can use one dual monitor card + onboard video or one video card that supports 4 monitors.
2. i dont see how building your own pc gets you a greater understanding from a programming perspective.
i have built dozens of pcs, from way back in the days when we had to choose interrupts and memory addresses via dip switch i also happen to know some assembly and rarely do the two meet.
>> you dont need two video cards for triple monitor support. you can use one dual monitor card + onboard video or one video card that supports 4 monitors.
Really? I've never seen a video card that lets you use 4 monitors, nor have I seen a BIOS/motherboard that lets you use chipset video and a discrete video card at the same time.
Michael on July 27, 2008 07:40 PMI never really understood how there could be programmers who don't know anything about hardware. I guess they're "Web Developers."
>>>> you dont need two video cards for triple monitor support. you can >>use one dual monitor card + onboard video or one video card that >>supports 4 monitors.
>>Really? I've never seen a video card that lets you use 4 monitors, >>nor have I seen a BIOS/motherboard that lets you use chipset video >>and a discrete video card at the same time.
http://www.newegg.com/Product/Product.aspx?Item=N82E16814121247
The 3870 X2 from ATI supports four monitors.
Also, Jeff, I'll echo many of the people here and ask what specifically you've learned about programming from putting computers together, which as you said, is fairly simple and a matter of putting the right piece in the right slot.
Hpsin on July 27, 2008 07:54 PMwhat's with an additional, relatively cheap solid state disk with about 16G for the operating system, programs, boot partition and eventually the common workspace? speaking of performance, i believe that disk is the worst bottleneck from all...
karl on July 27, 2008 08:08 PMI don't necessarily think Jeff meant that he learned more about programming by building a computer.
However I think that building a computer helps, you as a developer, understand your tools better. It may be just me but I'd think understanding that the big beige box under your desk is not magic, just might be a good thing. Then again I came to software development from a computer repair/build background.
actually, video encoding doesn't scale well with the number of processors. It's actually a reasonably difficult problem that wasn't around until recently. I say this as an employee of a company that was one of the first to actually do the multicore thing right. We used to have marketing material with all 16 cores of machine running at 100%, because no one else was able to do that. search for live hd flash, and I am sure you will find them
luke on July 27, 2008 08:12 PMnever be ashamed of public hardware lovin'. never.
Darren Kopp on July 27, 2008 08:20 PMWhat about optical drives, and a case (as mentioned above)?
RE the cheap SSD suggestion - Those cheapie Transcend drives aren't fit for a boot disk. Their read / write speeds are too slow. I believe Transcend has made a public announcement about this and mentioned they are working to release boot-disk worthy drives.
Anon for this on July 27, 2008 08:25 PMI love the hardware posts too. Putting a PC together is just fun.
I am thinking of building a Windows Home Server box.
Would you have time to post how you would build one of these?
Cheers
Quarterback16 on July 27, 2008 08:37 PMNo love for AMD?
Scott on July 27, 2008 08:39 PMI used to build all my PCs, but these days I only use laptops. Bulding my own desktops was fun when I was a kid, but now I'm just too lazy to bother.
As for CPU speed I never notice much difference unless I play games (and then, bus speed and graphics card is just as important). I honestly can't say I have noticed any significant difference in compile times between my old Pentium 4 2.4GHz and either of the newer Core 2 Duo laptops I use now. My old system couldn't play HD-quality video very well though. In my experience, CPU power is less significant if you have plenty of RAM, a fast hard drive and a fast graphics card.
Personally I think CPU upgrading is much overrated. Of all the PCs I have buildt over the years, I only once upgraded the CPU (from a Pentium 2 350MHz to Pentium 3 600MHz, since I got the CPU for free from my brother). I also know very few other people who actually did upgrade their CPU, ever (they upgraded plenty of other stuff, just not the CPU). Nine out of ten times when upgrading a system I have to get a new motherboard (and RAM) as well, because the CPU socket has changed in the meantime, or the motherboard is not compatible with the current bus architecture.
When it comes to hard drives I always prefer to have two. One for the OS and one for my data. It can give a nice performance boost in addition to making life a lot easier when reinstalling your OS.
I guess all of this really depends on how often you upgrade or replace your PC. For me, every three years has proven to be an adequate rate.
That being said, your setup looks rather sweet :)
What about using ECC for a reliable memory system? 4 GB of DRAM stores your info on 32 billion minuscule capacitors (~5 femtoFarads each) all of which are refreshed (read then written) several times per second. It is a miracle of modern technology that over the course of a month only a few soft errors (randomly flipped bits) will occur in a properly functioning system.
Without Error Correction Coding, it is not clear how those soft errors will affect the software running on your computer. With ECC, those soft errors are usually corrected or at least detected. Servers overwhelmingly use ECC memory systems.
Now Intel's X38 and X48 chipsets support ECC when used with ECC DDR2 DRAM. You still need to make sure that your X38/X48 motherboard also supports ECC and the BIOS is set to enable it.
If you use your computer to make a living, it should support ECC.
Beth on July 27, 2008 09:01 PM> The 3870 X2 from ATI supports four monitors.
I'll be darned; you're right:
http://news.softpedia.com/newsImage/Asus-039-EAH3870-X2-1GB-TOP-Four-Monitor-Insanity-2.jpg
Usually these X2 "two GPUs on one card" devices tend to have the standard 2.5 outputs (DVI, DVI, s-video) so this is an interesting deviation. Still, the X2 is awfully inefficient -- as are most SLI rigs, to be fair.
"If cool and quiet are your goals, the 3870 X2 is not a good answer."
http://www.anandtech.com/video/showdoc.aspx?i=3209&p=12
Personally, I'd go with a powerful primary card and a fanless secondary card from the same family. Or even two 3850s!
http://www.legitreviews.com/article/591/13/
Jeff Atwood on July 27, 2008 09:04 PMI built a very similar pc a couple of weeks ago. I went with the quad core for the little bit of extra speed editting the family videos in HD.
I disagree with your graphics card selection - unless rob plans to be doing any gaming. I opted for two ATI HD3650's for $56 each. I also, opted for the slightly cheaper ASUS p5Q-e motherboard. It handles dual montors and is $85 less than the P5E.
As for the raptor... for my money there is better value in 4 x 300 GB barracuddas in raid 1, raid 5, or raid 10.
Your ultimate dev rig posts with ScottHa were a great starting point when I was researching for the new pc.
BrianE on July 27, 2008 09:07 PMWhen Jeff alluded to the importance of a thorough hardware comprehension, I think he was referring to the functionality of every fundamental aspect from an electronic/electric/mechanical standpoint (e.g. CPU instruction execution, memory allocation, finding a location on disc, et al) -- i.e. he was not just denoting the act of putting a computer together.
I agree with Anders on this one: this setup kicks ass! (I wish I had the money to piece it together). :-)
Elvis Montero on July 27, 2008 09:08 PM>> Now Intel's X38 and X48 chipsets support ECC when used with ECC DDR2 DRAM. You still need to make sure that your X38/X48 motherboard also supports ECC and the BIOS is set to enable it.
That's cool... I haven't seen a DESKTOP chipset or motherboard that supports parity^H^H^H^H^H^H ECC memory in about a decade. It's great that Intel is finally recognizing that some people value the parity advantage.
Michael on July 27, 2008 09:20 PM... And I'm so very excited about my purchase! I should point out that the machine I'm building is my own - Microsoft isn't paying for me to go off and build my own. "The Boss" I was referring to Jeff was my wife :). Just details but it may keep me out of trouble :).
Thanks again for your help!
Rob Conery on July 27, 2008 09:42 PMYeah, that Norvig quote seems really out of context - he's talking about a totally different context w/r/t understanding hardware. Physically putting together a box has very little to do with understanding the fundamental components of software execution.
James on July 27, 2008 09:46 PMMatrox makes some quad display video cards as well. They are quite expensive and will not run any modern video games, but they are low power and would be great for a development machine I would think.
Here is one that can do quad DVI-D:
http://www.matrox.com/graphics/en/products/graphics_cards/m_series/m9140lppciex16/
Make that DVI-I actually (analog or digital)
Tim B on July 27, 2008 10:22 PMoh, freedom zero.
Let me know when your first processor is finished.
http://i539.photobucket.com/albums/ff356/jellob2/mem.png
That is with only 1 of the 3 regular VM's open that I use. With VMs it is easy to chew through 8GB.
64bit OS shouldn't have any driver issues if you are building a new machine.
I like to have dual DVI cards (shame not to drive nice big panels in digital), unfortunately video card manufacturors tend not to put these in the low end cards.
Nic on July 27, 2008 11:03 PMnice article! But I wonder whether you could write a similar post about Laptops... Is it possible/feasible/reasonable to assemble your own power laptop (fast, quiet, energy efficient)?
Gabriel Schenker on July 27, 2008 11:08 PMAnd what about the case?
A good developer must have a "flaming computer case"
http://www.azairfx.com/images/computer1.jpg
(People will think your PC is faster) ;)
> Yes, it's exciting to see those four graphs in Task Manager (and even
> I get a little giddy when I see thirty-two of 'em)
In that task manager picture in the article you linked to, there are actually 64 graphs - 4x16.
Excellent article. I really enjoy your hardware posts.
Christian on July 27, 2008 11:39 PM> And, in my experience, all that work doesn't really get repaid much, as I've never exceeded more than 3 GB of physical memory use.
Address-space limitations aside for a moment, the reason having gobs of RAM is important isn't that applications directly need it, but that your OS's virtual memory subsystem should be trying it's damnedest to use ALL of it, ALL the time, for *something*.
This is something I have to explain all the time to people when I see them using these "memory freeing utilities" that allege better performance by giving you more free RAM. If your VMM is doing it's job, then only the processes that are actively running or have recently run using should be resident (and then, only those pages that are being actively/recently used). The rest of RAM should be filled with writeback buffers and cached files from the disk.
Free physical memory is simply *wasted*, period. Memory-freeing utilities do nothing but head-fake the VM into freeing physical RAM, sabotaging performance.
This is important, I think, because a lot of desktopy applications such as most people tend to use are unscheduled for IO-waits (I'd guess mostly page faults, but sometimes explicit IO) more often than they are waiting to run/running on the CPU. Filling an IO request from RAM is orders of magnitude faster than hitting the disk, just as filling a memory read from L1/L2 is orders of magnitude faster than hitting RAM, and may mean the avoidance of getting unscheduled for IO-wait. What's more, these cached pages cost you nothing: if the system gets hard up for physical RAM, it can just delete them.
I think this is so important to system performance that on most of my Linux machines, I configure the VMM to actually swap out excessively-idle application pages to make room for caching disk contents that get used more often. All those "tray applications" and idle processes that seem to haunt Windows users, simply find themselves swapped to disk after while instead of loitering in RAM, and on the occasion they actually wake up: oh well, enduring that page fault probably saved me hundreds more page faults on some other app that I use more heavily.
(By the way, NT-based VMMs are by all accounts equally good at doing this dance, but I think your average Windows user is so deeply scarred from prior Windows' pathological VMM behavior that they will never be able to look at a lengthy process list without getting edgy and uncomfortable :)
I think it's this kind of thing that goes to the heart of Jeff's argument: what the VMM does and how it works deeply affects how things perform, yet it's mostly misunderstood and frequently sabotaged, even by programmers. And although the virtual memory subsystem of an OS is in fact software, it's inextricably entangled with, and indeed mostly responsible for mediating, the performance of the hardware.
Kyle S on July 27, 2008 11:42 PMFirst, I always like Jeff's hardware postings as they give me something to think about.
For those who keep pointing at 8GB, I have to say I see only 4GB of RAM (2x2GB) listed. Maybe someone would kindly point out the 8GB, please.
Jeff,
I am curious about the option of a Q9300 Quad when the Q9450 Quad appears to be a better choice.
I am also curious as to why the X38 board instead of a newer board?
Thank you.
I'd like to comment on the usefulness of a programmer building their own PC.
Assembling a PC from parts teaches only trivially useful things for a programmer: it's nice to have a concrete image of what the separation between CPU, registers, cache, and RAM looks like in the real world, for example. But that's as far as it goes, if you're just slapping together parts based on a list like Jeff's.
(Slapping parts together will teach you to respect hardware, and how fragile it is. I've learned my lesson, and won't ever touch hardware again... Hard disks catching on fire was the final step. Utmost respect to people who manage not to do that.)
Building a PC from parts can teach a programmer a lot of useful things, but they have to do more than just assemble things. They have to actually understand the parts, and how they interact. Why is this kind of memory better than that kind of memory? Why is a high rotational speed good for speed? What's the tradeoff between speed and heat generation, and speed and noise? And so on, and so forth.
A way of achieving that understanding, or some of it, is to do the research yourself. If you just use Jeff's list, you learn little.
All this understanding of the entire abstraction stack from atoms upwards is useful, even for those of us writing code in the highest level languages available. While we don't deal with things like register allocation, performance is a very leaky abstraction: things you do at the HLL level affect how things execute at the lowest level. Just because I write, say, Python code that executes on top of a sophisticated virtual memory system, does not mean I get to ignore the performance impact of overflowing the cache, or the RAM. Or the power/heat impact of using a polling solution over a trigger-event one. And so on, and so forth.
The actual assembling is orthogonal to the understanding, but probably helps most people if they do it at least once. If you don't release the magic smoke, it's even reasonably fun to do, and definitely gives you a feeling of being in control of your destiny.
This is what I think Jeff meant, and said, and what got misunderstood by several earlier commentators.
On memory and CPU cores: my main development machine is my laptop, with a gigabyte of memory. This is, mostly, more than plenty. However, these days a lot of what I do happens in virtual machines, and so my desktop has 8 GB of RAM, to allow me to run several virtual machines at once. Its CPU has four cores for the same reason. This allows me to, for example, do four concurrent Ubuntu installations without speed limitations. Or run test suites on several operating systems at once.
Lars Wirzenius on July 28, 2008 12:07 AMI used to buy components like this back at college, but these days I simply buy the latest Dell box. I know it isn't the best hardware configuration on the market, but it just works when I turn in on and is quiet!
I think it was the 'quiet factor' that kept me with Dell, but with this blog post maybe it is worth investigating how quiet a home rig can be..
Andrew on July 28, 2008 12:12 AMYou can also get a 64 GB SSD for the price of the velociraptor. http://www.hothardware.com/News/OCZ_Core_Series_SSD_Vs_VelociRaptor_Sneak_Peek/
Although you might want to wait for Intel's SSD first.
Jarno on July 28, 2008 12:14 AMRobert,
There's an additional x2 right next to the Kingston link, making a total of 8GB.
Rainier on July 28, 2008 12:25 AMIt's just a hobby, don't go saying how 'important' it is. Millions of people including programmers get work done on a computer that was factory built.
Mike on July 28, 2008 12:27 AMAhhhh; missed that "x2"
Thank you for pointing it out.
Robert on July 28, 2008 12:47 AM"hassle of using a 64-bit clean OS and all the driver complications"
Vista 64 here, on more than 1 computer. There is no hassle, and no driver complication. Do pay attention to the hardware you purchase, but I haven't yet encountered new hardware without 64-bit drivers. And applications, they just work. In either 32 or 64-bit versions.
Why 8GB? Why not?! It costs as much as 2GB did a couple of years ago. If you can't use more memory, you lack imagination or are using an outdated OS (like XP):
- Vista can cache more files in memory resulting in more performance
- You can run multiple Virtual Machines with multiple OSs
- You can compile while transcoding video
- You can game while your bittorrent client is busy downloading the latest Fedora
- You can dedicate a core and a couple of gigs to soving hard computational problems
- You can run distributed client/server or p2p servers developing the future killer app...
That was a thrill to read. I need to work on my hardware chops, so sifting through your multitude of links was great exercise. Thanks for all the info!
Evan Meagher on July 28, 2008 01:06 AMI do disagree with the quad core selectin though. It's not the sweet spot. Going from $270 to $330 (another 60 bucks) for twice the cache (and and insignificant .16 GHz) is, IMO, worth it.
Furthermore, the Q9450 price is supposedly set to be cut by Intel in the near future.
Also, I would have gone with a P45 chipset for the MoBo. It's fabbed in a shrunk-down process, resulting in lower temps and power consumption.
Finally the missing case selection: Antec Solo or P182 (expensive). A GREAT value is the NSK 4480.
Keyboard: Logitech Wave. G15 for gamers
Mouse: Logitech MX/VX Revolution. G9 for gamers.
OS: Vista 64, of course :)
Display: avoid the TN crapola. Nothing less than Dell 2408WFP. Pick 2 if you want to stare at a black divider in the middle. Pick 3 if you want two of them falling off your desk. Or just move up to the 3008WFP as any sane person should do. As an added benefit, you'll have the option to game in 1280x800, with the the Dell doing the upscaling for you. That just until the lasted vid cards will make gaming at 2560x1600 with all the eye candy turned on a reality.
Nick++ on July 28, 2008 01:14 AMI'm not sure I agree with that. I could agree that weeks of drooling over specs before you decide on the final configuration helps you understand the specs. I could agree that it maybe helps you better associate/remember details needed to program it. But I dont think that building a system in its self it teaches you anything about how to program it.
Intel's X38 and X48 chipsets can support ECC when used with DDR2 but not DDR3. The X48 doesn't add much value over the X38. The 875P chipset also supports ECC.
Intel's P31, P35, P43, P45, G43, G45, G35, G33, G31 chipsets don't support ECC.
If you want an Intel processor with Error Detection/Correction on the FSB, you need buy a Xeon with a server chipset motherboard.
While AMD Athlon and Phenom processors support ECC most motherboards don't support ECC so you need to select with care.
You should assume that laptops don't support ECC because SODIMMs don't support it.
The only Apples that support ECC are Mac Pros.
Beth on July 28, 2008 01:30 AMFor what it's worth (and I have to declare self-interest here, as they're my employers), the DisplayLink video-over-USB technology works well as an easy way of adding multiple monitors if you lack a motherboard with multiple video slots or an esoteric 3-or-more output video card. Sure, you won't be playing games on it any time soon, but for general development and office work (and the odd spot of web browsing between compiles) it works really well.
Chris on July 28, 2008 01:38 AM4 RAM stick are just devil baiting. Two are enough and diminish the failure chance rate by 50%.
Velociraptor WTF ? Just get a barracuda 7200.11 or a spinpoint and you get a little less speed but your comp won't be noisy.
For the motherboard, I'd advocate a P45 chipset which get less heat and overclock like beast while having 2 8X PCIe.
For the PSU : why not the 620, as it won't reach the point where the fan is used it'll be less noisy.
hardware is one of the things I'm the most clueless about, so any of your posts along these lines are comforting - my knowledge is mostly anecdotal, but I don't necessarily know all the measurements, where the plateau of cost-effectiveness levels off, and which 'features' are actually superflous. So don't come down too hard on yourself for the hardware blog entries..
matt on July 28, 2008 01:55 AMArkh:
HX520 and HX620 should sound the same with equal output.
http://www.silentpcreview.com/article692-page1.html Scroll down to "Noise".
Jeff, I have to chime in with many comments above and ask what exactly kind of understanding of "how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), transfer data over ethernet (or the internet)" you get by assembling off-the shelf components? It is paramount to claiming that you will understand the internal combustion engine by putting spoilers on your car...
I can see how you'd get a bit of insight into "[how long it takes to] read consecutive words from disk, and seek to a new location on disk" by examining HDD specs and deciding on the meanest one, though.
That said, I do enjoy your hardware posts!
dovetalk on July 28, 2008 02:09 AMA 4(-8-64) core CPU can deliver better throughput while executing highly parallelizable tasks like SQL queries.
Consider the scenario: you have 4 incoming requests, each one needs 1 second CPU time to execute and they arrive to the server at exactly the same time. The 2 core CPU server can finish executing the queries in 2 seconds, meaning it has a 2/second throughput. The 4 core CPU at the same clock speed can finish in 1 second, so it has 4/second throughput.
Now, in real life server applications where lots of clients use your server simultaneously there _is_ a performance gain in more CPU cores. However you are right, on a desktop, it doesn't really matter.
Zizi on July 28, 2008 02:14 AMi loled ~ "upgradeable" @ CPU .. LGA775 Socket is outdated soon. so have phun : D
mka on July 28, 2008 02:27 AMHi,
I have 8GB of RAM on a dual quad-core xeon (this is my personal computer).
Having 8GB of memory is not so stupid as people may think.
At work, I only have 4GB of memory and it's a pain in the ass to switch from one virtual machine to another.
At home, on my super personal computer, I don't have any problem. Having 2 ou 3 VMs running doesn't slow the computer and I can even play with modern games (aka Crysis) without having to shutdown or close my VMs.
Of course, you need to use a 64bits OS but even Windows 64bits systems are working great (especially Vista) and with modern hardware you don't have issues finding drivers.
I just like to add, that if a developper is using a lot of VMs, he should use a quad core (or more) CPU, that way he can assign 2 of more Virtual CPU without any software emulation of the many virtual CPU.
humble.jok on July 28, 2008 02:28 AMWhat, no keyboard or mouse? Getting new input devices is always a good idea when getting a new computer. I'm myself an input devices collector. I have about 10 mice, 3 trackballs, one touchpad and about 30+ keyboards :P
Regarding all the hardware stuff, sounds pretty nice, but as a Mac user, I'm pretty happy to buy ready to use out of the box systems where Apple already took the task to decide which components to combine. You may not always get the *perfect* deal for your bucks, but you get a decent system for an acceptable price.
Mecki on July 28, 2008 02:37 AMAcceptable price? maybe in the USA but in Europe, Apple prices aren't acceptable (except for the MacBooks).
My computer cost me 2000€ (3000$) and almost the same machine (Apple's one doesn't have a 8800 Ultra) in the french Apple store was priced 4000€ (6440$) without maintenance.
Quad-Core is good for virtual machines, since any reasonable VM software (Virtual Server 2005, Hyper-V, and presumably VMWare - not VirtualPC though!) would be able to use multiple cores for multiple machines.
... and then you hit the disk bottleneck. Having just done 4 concurrent installations, disk was definitely the limiting factor.
Jonathan on July 28, 2008 02:52 AMI've said it a few times, but I'll say it again: if you want an understanding of hardware and how your software runs on it, watch Herb Sutter's presentation to the Northwest (US) C++ User's Group.
The meeting page is at http://www.nwcpp.org/Meetings/2007/09.html, the video at http://video.google.com/videoplay?docid=-4714369049736584770, and the slides (which are illegible in the video) at http://www.nwcpp.org/Downloads/2007/Machine_Architecture_-_NWCPP.pdf.
Mike Dimmick on July 28, 2008 02:53 AMI think to buy a computer ready made is much quite better than building your own. Plus, you don't have warranties when you build it on your own.
Omar Abid on July 28, 2008 03:15 AMGreat post Jeff. I built a similar configuration a few months back (uses older chipset and processor though). But based most of my needs on building a Macintosh equivalent. This was a great compromise because my wife likes the easyness of all things Apple, but I prefer not paying the Apple tax (especially here in France). And it was a great way to get her involved in building a computer.
I have given up the upgrade path because by the time you need it you end up having to upgrade more than you intended. When I'm ready to upgrade my Q6600 I'm sure I'll also need to switch out the motherboard, upgrade to DDR3, and change the video card. Leaving just the case, drives, KVM, and power supply. Now I just buy those core pieces based on the budget and wants.
Joe Chin on July 28, 2008 03:34 AMMy development box had an 867 MHz CPU and 768 MB of RAM, then my second computer for testing is a 333 MHz Bondi Blue iMac with 96 MB of RAM.
I'll never understand why so many developers feel like they need the rock star treatment to deliver the best products out there. I mean, can you honestly tell me why you want 8 GB if none of your customers are ever going to have that much and you'll never come close to needing that much? The only thing that's going to do is make sure your product only works well on your computer.
My advice: use the hardware that just *barely* allows you to code and compile at an efficient pace (as in, builds take less than 10 seconds to produce), then test on a much slower computer with very large data sets. By forcing yourself to use your product on underpowered hardware, you'll guarantee that your product will absolutely SCREAM on the computers your customers will use.
Mike on July 28, 2008 03:37 AM>>It's a shame Apple programmers can't do this
Man, I'm getting a little sick of the little Apple digs Jeff. I've been a Mac user for a few years now, prior to that a long time windows user.
I use Macs because as a web developer it is unarguably the most productive environment for my work.
OS X isn't the best environment for everything; nor is windows.
I read blogs like this and a few other Windows dev blogs because I like knowing what's going on in all areas.
Religion; be it hardware or software; just bores me.
How about keeping the balance eh?
Indeed, there is a very big difference between two, four, eight or 64 cores for a server; and there is not so much of a difference between a one, two or three GHz core. This is one of the things that you will _not_ learn by building your own system (as others have said, putting LEGO bricks together will not teach you about plastic processing).
The comparison between SQL-queries on your own home computer and your webserver really don't mean anything because you're using different metrics and different benchmarks for the both of them.
If you really want to learn something about the internals of a computer system, please pick up a book on the matter and learn something about CPI, clock frequence, Amdahls Law, throughput and performance and all those other things that concern computer speed and their inner workings. I recommend "Computer Architecture: A Quantitative Approach" by Hennessy and Patterson. Even in chapter one you will learn more about the topics at hand than in a day of building your rig.
Finding out how to plug RAM-modules into their sockets or finding the best deal for a processor will not make you understand the parts better!
Shezi on July 28, 2008 03:59 AMJeff,
Your recent posts have been making me think. This post made me write a whole post on my blog. Please check and comment at your convenience:
http://srmrt.blogspot.com/2008/07/programmers-should-understand-hardware.html
Regards
Mahesh
http://srmrt.blogspot.com
a couple of things.
1. you dont need two video cards for triple monitor support. you can use one dual monitor card + onboard video or one video card that supports 4 monitors.
2. i dont see how building your own pc gets you a greater understanding from a programming perspective.
i have built dozens of pcs, from way back in the days when we had to choose interrupts and memory addresses via dip switch i also happen to know some assembly and rarely do the two meet.
Of course building a PC from a list like this doesn't get you a better understanding of how your software runs, although it's fun and gets you a great PC.
But doing the research does! Making informed decisions about RAM size, #cores vs clock, 10k vs 7k2, make me a smarter programmer, I think.
Until a few months ago, I wouldn't have known what to do with 8GB, but since I've been using virtual pc's it's pretty clear...
Erik on July 28, 2008 04:41 AM> Maybe this is a minority opinion, but I find understanding the hardware to be instructive for programmers.
Says the guy who can't see the point of learning C! ;-)
I'm a bit burnt out on hardware these days!
I used to have a sideline writing about hardware for www.HardwareCentral.com and also for www.TheInquirer.net - my evenings were spent tweaking my computer and keeping on the cutting edge.
These days I've got a laptop at home, which is nice quiet and reliable :)
I still enjoyed hearing about the latest graphics card or processor developments, but I'm not the walking hardware wizard I used to be.
Perhaps I'm just getting too old, but the outside world looks more appealing than sitting in front of a computer a little more each day.
Peter Bridger on July 28, 2008 05:06 AMdude you must really understand hardware, especially pipelines
amused on July 28, 2008 05:07 AMI don't think Radeon HD 4850 can support CUDA Applications. IMO better to choose a nVidia 8 or 9 series GPU. nVidia is far ahead of ATI in GPGPU programming.
Sarath on July 28, 2008 05:12 AM@Nick++: "Display: avoid the TN crapola. Nothing less than Dell 2408WFP."
Really? I agree TN displays are useless, and the 2408WFP does sound good on paper, but it is getting absolutely slated on the Dell forums.
Loads of complaints about input lag, sharpness halos, uneven backlighting, pink colours.
Read the problems described in this (extremely long) thread:
http://www.dellcommunity.com/supportforums/board/message?board.id=dim_monitor&thread.id=90203&view=by_date_ascending&page=1
The Rev A01 of this monitor is going to hit the Dell stockroom soon.
I'm waiting to see if they have fixed any of the issues before I jump.
What about SSD for HD performance? What pains me about PC gaming is the absurd amount of load times. I remember the days when it took less than 30s to start playing a game. Now Mass Effect (PC version) takes about 3 to 5 minutes to load plus a bunch of in-game load. Would a fast hard drive (or a SSD) mitigate reasonably that time?
Hoffmann on July 28, 2008 05:18 AMi would prefer a quad-core if you develop for the web or develop serversoftware or use databases intensively.
All these tasks are implicit made for parallel usage with many clients.
If you, for example, let xenu spider your website-project afer a refactoring, a quadcore machine is nearly twice as fast as a dualcore.
Same goes for databases or other client-server software with concurrent usage.
"I think to buy a computer ready made is much quite better than building your own. Plus, you don't have warranties when you build it on your own."
Here are a few examples of parts warranties that apply to the parts I put in the computers I build every day at work (these are the ones I know off the top of my head):
Intel CPU: 3 years
Western Digital Hard Drive: 3 years
Kingston Memory: FOREVER
I think the MSI motherboards we use come with a 3 year warrantee as well, but I don't remember. Compare all this to the 1 year warranty you get at Best Buy.
Also, I love heatsinks, too Jeff! I just traded in a 39 lb box of retired aluminum heatsinks at the local scrap yard for $25.
@Mike: "I mean, can you honestly tell me why you want 8 GB if none of your customers are ever going to have that much and you'll never come close to needing that much?"
Of course: I'll have to work highly in parallel with many different programs in alteration:
-Visual Studio 2003, 2005, 2008
-Macromedia Flash
-Photoshop
-IE7, Safari, FF, Opera, every with dozens of tabs
-Virtual Machine with IE6
-Office (MS Word, Excel, Outlook and Openoffice + Thunderbird + some other mailclients for testing purposes)
-Adobe Reader
-SQL Managment Studios
-some Terminal-Service-Clients
-and many other special programs.
-some background-tasks such as SQL-Server, indexing, and other
Once started, they stay open to lower the program-change-duration-penalty.
You need a lot of CPU-horsepower, and:
Nothing beats much of RAM - only more RAM...
Well done for step 1 Jeff. Now, when can we expect to see posts about:
memory usage v caching (the reason people like to see free ram is that the cache is not shown on windows)
multi-core programming and how having multiple physical cores makes it harder and slower, along with discussion of context switching, heap-memory allocations and its impact on cache sloshing.
Hard drives and how slow they are in relation to the rest of the PC, along with discussion on how to speed them up and provide fault tolerance especially with regard to 'fakeraid' and full RAID systems and how some types of RAID are really not a good idea for some software tasks.
How branching statements can impact CPU performance, and how graphics card-based parallelism can work for your business-app software.
While you're working on those, keep postin 'cos we still like these hardware-porn posts :-)
@Nick "Display: avoid the TN crapola. Nothing less than Dell 2408WFP. Pick 2 if you want to stare at a black divider in the middle. Pick 3 if you want two of them falling off your desk."
I have a 2407 at home, and I've been looking around for a second 4:3 monitor to side alongside. The hard part is getting something 1600x1200 with the correct height to match the 24" screen. No-one ever lists the dimensions of the actual panel, only the diagonal.
Also, regarding multiple video cards - there's also the option of a few (but only a few) different PCI-e 1x cards, and a cheaper mobo. If you don't mind that your auxilliary screens are less snazzy (like they would have been with AGP+PCI), it's potentially quite a saving.
Howie on July 28, 2008 05:56 AM"People think you need 1.21 Jigawatts to run a powerful desktop system, but that's just not true."
Sorry to be picky, but its spelled Gigawatts...
Meis
"What about the case?"
+1 on that. I bought an Antec P180 "sight unseen" for my current system, partly due to your recommendation, and while I can't fault the quality, it is, basically, a boat anchor. 14Kg (31 lbs) without PSU, and ridiculously bulky. There's got to be a less obtrusive solution...
Roddy on July 28, 2008 06:04 AM> Really? I agree TN displays are useless, and the 2408WFP does sound good on paper, but it is getting absolutely slated on the Dell forums.
Actually, I must admit that only own a 2407, which I am extremely happy with, and I just assumed that the 2408 is an incremental improvement. Mea culpa.
I do have a calibrator (the Spyder2express) which I deem essential in getting the most out of your display(s).
Nick++ on July 28, 2008 06:20 AMocz now makes some solid state drives that are certainly boot drive worthy, and are reasonably priced!
dnm on July 28, 2008 06:25 AM> I'm a big triple monitor guy, so I insist on motherboards that are
> capable of accepting two video cards -- in other words, they have
> two x8 or x16 PCI Express card slots suitable for video cards.
If you're playing games and running Vista that doesn't do you a whole lot of good. Vista doesn't support monitor-spanning video resolutions.
I solved the problem by buying a TripleHead2Go ( http://www.matrox.com/graphics/en/products/gxm/th2go/ ). It makes all three of my monitors look like one big monitor to Vista. If you got one of those, perhaps you wouldn't have to sweat out which motherboard you get quite so much too.
T.E.D. on July 28, 2008 06:25 AMThe P180/P182 is heavy just like the Solo is heavy for one very good reason. It reduces transition of vibration from the moving parts in your case.
P180 31 lbs at 21.3" tall
P182 30.9 lbs at 21.3" tall
SX835II 25 lbs at 20.6" tall
Solo 25.3 lbs at 17.5" tall
Sonata III 500 20.2 lbs at 16.7" tall
Admittedly when we get rid of the last hard drive on the planet and stop using DVD burners (or similar rotating media) we won't need mass to absorb vibration.
Until then anyone that cares about a quiet PC will buy a case that is heavy for it's size class.
dhanson865 on July 28, 2008 06:35 AMuggh, transition should be transmission in that second sentence. I'm not a morning person.
dhanson865 on July 28, 2008 06:38 AM"... Here's an example: SQL Server 2005 queries on my local box, a 3.5 GHz dual core, execute more than twice as fast as on our server, a 1.8 GHz eight core machine"
the server outperforms, hmm... still in use?
Nikos on July 28, 2008 06:42 AM@Mike: "My development box had an 867 MHz CPU and 768 MB of RAM.. use the hardware that just *barely* allows you to code and compile.."
Hmmm.. an interesting point of view Mike, but time is money. If all the developers on a product spend an extra half hour a day waiting on the hourglass (for builds, or large documents opening, or unit tests completing) then that would push up the cost of the final product. I doubt many customers will thank you for that.
Also, as titrat points out, the demands on a developers machine are vastly different than those of a customer. I expect (or hope) that my customers won't running the the debug build of the product via an IDE with five other development tools open at the same time.
Graham Stewart on July 28, 2008 06:44 AMThis is the kind of post I love this blog for. Software developers are often truly systems engineers. And hardware is a critical base for all software systems. Even if I don't agree with your hardware decisions, I love the analysis involved. Thanks, Jeff!
Michael on July 28, 2008 06:44 AMSilly question I'm sure, but how does spec'ing out a few stock parts and plugging together the prefab connectors and slots have *anything* to do with understanding the effects of cache miss penalties and disk latency?
These are geek projects, like building a model airplane. They have no educational value to a professional developer or engineer. I build my own PCs too, but only because I'm not satisfied with the offering of mass-produced shovelware PCs, not out of an illusion that it's helping me "understand" how any of it works.
Aaron G on July 28, 2008 06:49 AM@dhanson865: Thanks - I hadn't considered that factor. However I suspect the P180 mass is designed to cope with 'silencing' a fully loaded set of drive bays, whereas one or two HDDs is probably more typical.
> My development box had an 867 MHz CPU and 768 MB of RAM.. use the hardware that just *barely* allows you to code and compile..
I'll have to chime in with the detractors here. The *real* lesson from your setup (and mine too. I have separate test and build machines as well) is that you should have one system specced out like a customer (or target) system, and another for development.
The customer system should *not* be hotter than your minimum spec. Ideally it should match it, but not all applications can do that.
The development system needs to be tuned for development. That means lots and lots of RAM, two monitors at least, and a good CPU, in roughly that order. If you have to make trade-offs, don't trade down the RAM. When your compiler runs out of RAM, it goes *way* slower.
T.E.D. on July 28, 2008 07:13 AMJeff,
I still can't thank you enough for helping me pick out the parts for my new computer (http://secure.newegg.com/WishList/PublicWishDetail.aspx?WishListNumber=4988809).
I've had absolutely no problem with Vista x64 drivers, but that's probably because I obsessed for over a year picking out parts. It's been a great investment, lowered my energy bill, and got me into TF2.
The single problem I've had, which seems to be a problem with Vista itself from what I've read, is coming back from Sleep mode. Clicking the mouse button brings it back to the desktop within a couple seconds, but a little more than half the time, the mouse is frozen unless I unplug it from the USB port and re-plug it. I've changed all the power settings for the USB Root Hub to keep it powered during sleep, but nothing seems to work. Small price to pay for a monster machine I can't hear from 3 feet away.
I don't think I'd have been nearly as happy if I hadn't gotten the VelociRaptor, also.
Chris Doggett on July 28, 2008 07:14 AMFor what it's worth, I'd like to defend the Apple alternative. I used to build my own machines (or at least modify them), and also used to run both Windows and Linux. But now I have a Mac (although I still use a Linux box as a compute server sometimes), and I'm a lot happier.
I agree that building machines and installing and maintaining an OS is a valuable educational experience. But I finally got to feel that it wasn't an educational experience that I needed to repeat.
As someone who almost exclusively uses Open Source software (to me the Mac is mostly just a very capable Un*x box), I am sorry to have to say this, but I actually APPRECIATE the closed hardware platform. I'm just tired of having to figure out whether I should use the Windows driver or the Intel driver for my wireless card, or which of the n+1 linux sound servers I should be using right now (and how it will or will not play with the other applications running at the same time). And I'd rather not install an Operating System ever again (although I'm sure I will).
Yes, all this was educational, but every day I spend doing this is one off the finite pool I have, and futzing with boxes is not what I get paid to do, nor is it fun enough (or different enough from my day job) to be a hobby.
So until something else comes along, pour me another glass of the Kool Aid, Mr. Jobs.
Robert on July 28, 2008 07:27 AMI also find your hardware post very interesting and insightful, probably because I am rather ignorant in this area. I just got done building my first PC, and I went all-out. I will blog about it soon. I also went with the 300GB VelociRaptor, and it is amazing. Speaking of enormous heat sinks, I went with the Zalman and it's mammoth. I was somewaht disappointed with its cooling power though, I was at about 64C on core #0 after 4 hours at 100% with Prime95 (based on CoreTemp, not sure how accurate it is). I was expecting to hardly break 50C. Any tips?
Josh Stodola on July 28, 2008 07:41 AMI enjoy your posts about hardware. But as awesomely appealing as a great desktop setup is, I find myself exclusively working on a laptop these days. I value the portability, and there's nothing like kicking back and working on the couch.
monsur on July 28, 2008 07:48 AMNice. Thanks for the input. These kinds of posts are helpful. To be honest I don't really have the time to do this much research (even in all my geekiness). The wife, baby and house just means I don't have free time to really read all the reviews.
Even if your recommendations aren't absolutely the most perfect ever, they are pretty good—and a lot better than I would probably pull together with only a few hours of research.
Practicality on July 28, 2008 07:48 AMThanks; these hardware posts are great, Jeff. However, I couldn't help but snicker at the beginning...
"'Understand how the hardware affects what you do...'
"In my book, one of the best ways to understand the hardware is to get your hands dirty and put one together.."
The exact same principal is true (and for programmers, far more relevant) with respect to learning C to affect how you program. You know, for all the nit-pickery about the performance benefit of dual core vs. quad core, etc. it's mind-boggling that you ignore the potential performance benefit of learning C. You ARE a programmer, right?
Lazy programmers piling frameworks on top of libraries on top of frameworks on top of snap-ins on top of abstraction layers ... just to avoid the nitty-gritty is one major reason WHY we all need to keep building faster and faster PCs with more and more RAM and HDD space.
Sorry for the rant, but really. :)
bill on July 28, 2008 07:54 AMBuying an aftermarket heatsink is a giant waste of money if you're using a Core 2 Duo. The current Intel HSF design is one of the best on the market and comes free with your chip anyway. I have two myself and I wouldn't trade them for those big honking copper things you have to use on AMD chips even it was free.
Noah Yetter on July 28, 2008 07:55 AMHi!
About the 64bit issues. In case that you need one, it's an easy task for Windows Vista (because a lot of manufacturer provides one) and a little bit more difficult for Windows XP (because sometimes you need to use that one from i.e. the chip producer or a very general one).
But overall dealing with a 64bit environment is not too bad ... I am running 2 machines (1 Windows XP 64, 1 Windows Vista Ultimate 64) and I was never desperated :)
Juergen on July 28, 2008 07:55 AMI miss CP/M on a Z-80 with 64k of RAM :(
Charles on July 28, 2008 07:58 AMThere is a big difference between just assembling parts from a list and actually understanding what all those parts are doing and how they fit together to effect your system performance. eg. you are 100% correct about speed still mattering. Most software doesn't take advantage of multiple cores. You can run more programs, but in some cases (like with the 1.8GHz cores) those will actually run slower on multi-core hardware.
My background is in embedded systems, writing code on bare hardware with no OS. I cringe at the thought of developers who have no concept of memory addressing, cache or bus speed. Moore's law may be making these things less significant, but we can't ignore the details yet.
bcl on July 28, 2008 07:59 AMForget how the hardware slots together, that's not Peter Norvig's point.
Developers who don't understand _how_ the hardware works are not real programmers, IMHO. They're project liabilities who obsess over JavaScript based websites when the customer really doesn't want client side validation... Oh wait, that was a different article! :)
I'm not saying you need to have memorised http://www.sandpile.org/, but you need to know _why_ things are done in a certain way. I often get laughed at for this belief, but for this reason I think all programmers should start with Basic in order to do some old-school 16-bit x86 Assembly before they start really programming in the real world.
Development machines should be super fast, mostly because it will speed up the development cycles for the developer in question. If someone can manipulate data and compile code very quickly, you eliminate the "progress bar syndrome."
However, all developers need to be equipped with a test machine that is utterly awful in comparison. It should be the lowest specification of your target audience (be it the computers in your corporation, or the machine your customer will run the code on) - or even worse.
If your code runs really well on that horrible machine, you've done your job really well.
This rule can be extended to all areas of development. For example, web developers should always try their site on a busy dial-up connection at 800x600@8bpp and see just how friendly your site is.
Simon Butcher on July 28, 2008 08:06 AMSome of us like to have more than one skill. We have a term for programmers who have never assembled a PC or installed an operating system: "one-trick ponies".
A programmer who can build a server or workstation from a shopping basket full of parts that he chose himself, and can install and configure an operating system on it, is more flexible and more valuable than one of equal programming skill who has only the vaguest idea about what's in the beige box under his desk. The former can become the sole IT person for a company; the latter is restricted only to corporate jobs with a clearly defined area of focus. (Once I got a consulting job, which turned into a four-year contract, because their Java programmer couldn't figure out how to install a tape drive in a Sun machine).
My employer knows that he can call me and say: "We had a fire, and both servers melted. Get thee hence to Micro Center, get two machines with maximum memory and RAID-5, put Linux on them and bring them in." He never has to worry that his Perl programmer doesn't know which end of a screwdriver is which.
Matt on July 28, 2008 08:16 AMWhile I concur with some of the criticisms leveled above, I do appreciate you bringing up hardware from time to time, the resulting discussions are both instructive for the inexperienced, and amusing for the overly-experienced (e.g. electrical and computer engineers).
* I agree that snapping together a computer from off-the-shelf parts provides little instructive value as to "how your code runs on hardware" (though it is a hell of a lot of fun!) I doubt many programmers are so oblivious that they are surprised to learn what a hard drive, motherboard, processor, etc. look like. Moreover, very little of the information out there is any good, being authored largely by gamers, and others with limited technical background, whose scientific acumen in performing benchmarks is questionable, and whose technical chops mostly consist of an impressive ability to parrot back marketing-speak from Intel, AMD, nVidia, and the like. This situation is difficult to remedy, however, as a more sensible treatment of these things requires quite a bit of book-learnin'.
* Stating that "C++ compilers" are the only notable exception to a non-parallelizable build process is a considerable sin of omission. Indeed, the very example you give, "make -jN" does not depend on a multithreaded compiler at all! Any build process, with the common Linux make/gcc variant being no exception, is comprised of many, many commands, some of which are compiler invocations, some of which are moving files around, adding them to common environment variables (or registry, depending on your OS religion), or other common tasks. Each one of these commands, in an make-style incremental build process, is fired off in a separate shell. "make -j4" simply says how many thread contexts can run these shells, and all the smarts as to which jobs can run at the same time and which need to be serialized is baked into the Makefile!
*Memory speed (and thus bandwidth) does matter! I understand the gist of what you were trying to say, but in the interest of correctness, a "few nanoseconds faster" is a considerable amount, when the cycle time of modern DRAM is under 1 ns. DDR2-1066 over DDR2-800 will provide a noticeable performance difference, assuming that you aren't severely bottlenecked by something else. The test you mentioned doesn't really answer the general question, the effectiveness of a memory subsystem depends *entirely* on the access pattern and the size/nature of the program's working set and the rest of your hardware (and on your OS's virtual memory subsystem, if you want to get picky). Digit-life makes no effort to convince the reader that their setup is representative of the general case, and such benchmarking is remarkably tricky even when lots of thought is put into it.
Not to put too fine a point on it, but it is very important to distrust nearly all benchmarks you find on the internet, as there really are too many variables to trust a single number, or set of numbers, to truly represent the "goodness" of a hardware choice.
*There is a chicken-and-egg problem not discussed in the article. Wouldn't it make more economic sense for compiler devs (and pretty much all developers) to make their code parallelizable if more developers (users) owned multicore machines and demanded it? What are your thoughts on this? Who's going to "win" this game of chicken, and who's going to cave first, processor owners or software developers?
*I couldn't believe that "commodification" was the preferred option on Wikipedia (over "commoditization," which doesn't carry the unfortunate side effect of sounding like you meant that we're turning hardware into toilets!)
*Great work on the blog and on the stackoverflow podcast Jeff, I really do enjoy reading/listening, your focus on the human side of code is refreshing. The fact that I disagree with you on technical issues just makes it more fun!
Matt Johnson on July 28, 2008 08:23 AMI worked for a big company for several years. As the senior developer in my group, I would (together with my manager) do the interviewing when we were looking to hire more Java programmers.
We'd always ask the candidate to describe their home network, or at least their home PC setup.
Those who didn't get excited at the opportunity to describe what they had built tended not to get hired.
Matt on July 28, 2008 08:25 AMThe Q9450 has twice the cache of the Q9300. The Q9300 has even less cache than the 9660 (which has 8 MB).
I think quad cores are important for software developers. Well, I think non-parallel makes suck, but, anyway, having multiple cores is helpful in learning to program for multiple cores.
Of course, at this stage you can still take the wrong road of functional separation, which does not scale to the thousands of cores Intel is seeing in our future. But helps anyway. :-)
The fact that someone who works on the ASP.NET team has to call you for hardware advice is horrifying, and gives me fast insight as to why I hate ASP.NET so very very much.
Mattkins on July 28, 2008 08:40 AM*vast insight
Mattkins on July 28, 2008 08:41 AM@roddy
It only takes one hard drive with vibration problems to turn that big flat sidewall of a PC case into a speaker.
There is a reason people have spent years discussing all the ways to eliminate drive vibration turning into sound
http://www.silentpcreview.com/forums/viewtopic.php?t=8240 There is much more at that link but I'll quote some of the big picture type statements here:
Even a small amount of research on quieting HDDs in SPCR should have led you to these oft-repeated fact:
* Noise is made by moving components in two different ways: Acoustically, and via structure-borne vibrations.
* With hard drives, direct acoustic noise is often less intrusive than noise caused by its vibrations when installed normally in the chassis.
* The world biggest HDD maker, Seagate, says mounting methods matter more in perceived noise than direct air-borne noise.
* Mechanical decoupling is any method to minimize firm contact between structures, usually in an effort to reduced transmission of vibrations that can cause noise.
Subjectively, mechanical decoupling of HHDs not only reduces the low frequency hum that you probably think is an intrinsic part of a PC's noise signature; it also reduces high frequency noise and can virtually eliminate seek noise.
Elastic suspension is unbeatable for mechanical decoupling of HDD vibrations. You can hear and feel the difference.
dhanson865 on July 28, 2008 08:42 AM>> he said you know, you should blog this.
And so he gives you an excuse to dive into you favorite pass time - self linking. ;-)
Hartmut on July 28, 2008 08:49 AMWhen I was in college, there were two routes for someone that wanted to work with computers. One, the business route, and two, the engineering route. However, you could also double major so the business folks could get their hands on hardware, building circuits, assembly, and OS.
The days of flipping through the rather large Computer Shopper and building affordable Zenith Heath kits are gone, but if you like to tinker and learn by doing here's 3 true blue gotta love them tech resources: JDR Microdevices, Circuit Cellar, and Nuts and Volts.
http://www.jdr.com
http://www.circellar.com
http://www.nutsvolts.com
The book "Upgrading and Repairing PCs" was always a useful reference. "Toms Hardware" is a useful online site (www.tomshardware.com/us).
We use to build our own (and there is definitely value in doing it), but a couple of years ago we replaced our desktops with laptops (docking stations and all). What a huge disappointment (Sony VAIO) all around; too many issues to mention. But we are back to desktops. Although you learn tons when you build a machine (and this should be a requirement for every tech support person :-)), a respected, reliable local shop can supply us with a customized machine the same day. So if time is money, and you are conservative with both, this can be a good route. We just install all software, including OS of our choice.
dj on July 28, 2008 09:13 AM>> Free physical memory is simply *wasted*
I assumed that everyone knows that "free" physical memory is used for software prefetching on a modern OS. Maybe I should have been more clear.
I'd be interested to see, however, whether anyone has *quantitatively* compared the performance boost of software prefetching into main memory or a certain physical location on the hard disk, versus hardware prefetching into the CPU cache. I would suspect the latter has a significant advantage, though.
Michael on July 28, 2008 09:16 AMConsidering the salary of software developers, the "time = money" equation means that we should all be using machines at least this powerful at our day jobs. When I arrived at my current job (earlier this year), my development machine was a Windows XP box with 512 MB of RAM (Pentium 4, 70 GB HD, 1 monitor). No joke. The IDE took minutes to load, even on a fresh boot. That's right, I was working on a computer that's you could pick up on craigslist for less than a day's wage. I lobbied for a faster machine, second screen, etc. All I got in three months was a RAM upgrade (admittedly, a big help). I'm starting a new job at the end of this week. I'd love to drag that machine out into a field and get all "Office Space" on it.
steve on July 28, 2008 09:16 AM"Until a quad costs the same as a dual at the same clock speed, my vote still goes to the fastest dual core you can afford."
What am I missing there? It sounds like you're saying "When this thing that does more costs the same as this thing that does less, I'll buy this thing that does more." I know that precious little software has actually been written to optimize for n>2 processors, but from a hardware perspective, Intel made one with 4 cores, and one with 2 cores- Why would they sell them at the same price?
I think Quads are worthwhile because you can set processor affinity: When I'm doing web-dev I can set my database stuff to one processor, my IDE to another, all my job (but not real work) related apps (outlook, word, excel, etc) to another... The developer's burden is that we have so many computer-intensive apps 1open at the same time. Having 4 processors instead of two can be really handy if you use this feature. Otherwise, you're right: Based on the software's ability to utilize multiple processors, there's just no point in quads on the desktop (yet)
Got to agree at the moment quad core processors aren't really worth it unless they still have a good clock rate and are running something like video editing or database work.
I hope this will change as I have to say as a programmer I think more and more about threading whenever I start a new project as I know it is likely to be running on at least 2 cores at the moment with the possiblity of more in the future.
This was previously an unlikely scenario so I think programmers just tended to do enough threading to keep the GUI from freezing.
pete on July 28, 2008 09:50 AMI find it somewhat interesting that you make the (quite reasonable) comments that quad-core doesn't produce much benefit over dual-core, and then elsewhere in the post make the statement that GPUs may make general-purpose CPUs obsolete. (Yes, in the post you link to, you say "for folding and other distributed-computing efforts", but it's nearly buried there and not even mentioned here.)
The set of applications on which GPUs can produce the sorts of speedups that you describe are a small subset of the applications for which quad core will give you better performance than dual core. Not only that, but I would guess that they are a strict subset of the applications for which going to quad core will give you a full 2x speedup over dual-core.
As you point out, on a development box, that's a pretty small set of applications to start with. The fact that GPUs are painfully bad at branching on a fundamental architecture level [1] makes that a much smaller set -- and, given that parsing and compiling is pretty much all branches, it excludes most of what was left for things we'd want on a development box.
The only thing that I can think of that's left are things that you are not actually doing on your development box now and are unlikely to be doing for the next half-decade at least -- things like doing automated code optimizations by running large numbers of variants in simulation and adjusting the code with genetic algorithms. GPU processing in development boxes may enable radical new technologies like that which aren't possible on current CPUs, but they won't do much for anything we're doing today.
And the things we do today, we'll definitely still need to do. So, no, GPUs will not make general-purpose CPUs obsolete, for the simple reason that general-purpose computing is fundamentally what we do.
[1] On ATI's current best GPUs, unless all 64 processors in a bank take the same branch of the code they're executing in lockstep parallel, they will all execute all instructions of both branches, and merely discard the results of the instructions from the branch they're "not" taking. This is why they can be so fast -- 64 processors, but only enough die space for a single instruction sequencer for the lot of them -- so it's not going away.
Jeff said:
------------------------
Maybe this is a minority opinion, but I find understanding the hardware to be instructive for programmers.
------------------------
And I agree. I also find it pretty amazing that you don't think it is important to learn C programming (sorry to bring that up again) if you think that understanding the hardware to be instructive for programmers. While I agree with you, I also think that knowing C is actually more instructive than understanding the hardware.
Salt Racer.
Salt Racer on July 28, 2008 10:33 AMJust updated my system and frankly I think you are wrong about the quad core.
processor ghz is probably the least important number about a processor in today's day an age. With each new processor tossing in new tricks, more cache, smaller die sizes etc etc - getting a new 2.6 Ghz processor is much better than last year's 3.0 ghz anything.
That said, I have found that as ghz follows the law of diminishing returns just like ram, for about the same reason - anything outside of the cache is so slow by comparison. An extra 20% of ghz does not lead to an extra 20% of performance unless your entire OS and applications live entirely in cache - after that, well, kiss your linear performance curve good bye.
I found that extra cores provide that boost that more ghz just does not. If you have 2 cores, once they are pegged, that's it there is no more, its time for processes and you to wait. 4 cores? You can have 2 cores pegged and still have room to maneouver on the other 2 cores.
People talk about multithreaded apps, but they seem to blithly forget, THE OS IS MULTITHREADED and each app is a thread. More cores means its less likely that a cpu hogging task will dominate your machine leaving you wondering where the 386 on your desk just came from.
Oh, and a final note on harddrives : full support for AHCI can be more of a boon than spindle speed (even better when combined!) - make sure your motherboard, harddrives and OS support it. If you are just upgrading a vista machine that did not use it in past, getting it running can be a pain ( a failed attempt can lead to boot crashes or even drives running in PIO mode) but worth the effort to get running.
Oh, and unless you tweaked your BIOS before you installed your OS, chances are you don't actually have AHCI running. ( http://en.wikipedia.org/wiki/Advanced_Host_Controller_Interface )
Xepol on July 28, 2008 10:39 AMI'm using a Corsair HX series power supply and a honkin' heat sink as well, but you missed one important feature: a 200 mm exhaust fan on your case. I put my little screamin' quad core (quad core is very useful for distributed computing apps), GeForce 8800 multi-media/gaming system into an Antec 900 and I can barely hear it running. Very quiet indeed.
PaulG. on July 28, 2008 10:52 AMAnd all this is just lying on the bench, right? ;-) So what about a recommendation for a case to put it all in?
What about secondary hard drives? You said "you want two drives, anyway" but are you really suggesting multiple VelociRaptors?
Martin Cooper on July 28, 2008 10:54 AM@Mattkins "The fact that someone who works on the ASP.NET team has to call you for hardware advice is horrifying, and gives me fast insight as to why I hate ASP.NET so very very much."
Wow - that is a slam-dunk argument you have there. If you aren't an expert at EVERYTHING then you can't be an expert at ANYTHING - Great logic man. /sarcasm
HB on July 28, 2008 10:57 AMOn more than one occassion I have worked with developers who were actually afraid to open their case and take a peak.
At the end of the day it doesn't matter if you can follow a set of instructions to put together a machine. What does matter is whether you understand the components and the stresses your application is putting on them.
A prime example is in figuring out performance issues. The first thing to remember is that a spec is only a wet dream. No harddrive can transfer at 300MB/sec, even though they "support" that interface. Some are better at being workstation drives, others excel at being server drives.
If you don't understand hardware, how can you tell you boss where the bottleneck really is?
Chris Lively on July 28, 2008 11:59 AMToby Cox:
"Man, I'm getting a little sick of the little Apple digs Jeff. I've been a Mac user for a few years now, prior to that a long time windows user."
Perhaps you would be interested in reading about the "Hostile Media Effect"?
http://en.wikipedia.org/wiki/Hostile_media_effect
How would you have preferred him to have phrased it?
"One of the best ways to understand the hardware is to get your hands dirty and put one together, including installing the OS, yourself. However, an even better way to understand hardware is to buy a computer already fully built by the Apple Corporation! They're fantastic!"
If you kept reading for ONE MORE SENTENCE, you would have seen that he wasn't even slighting the MacOS itself, he links to a viable alternative to building a Windows machine, then discusses briefly, that it's not a perfect solution. (Which it isn't, for the reasons stated. Still pretty cool, though.)
The best part of your post is two paragraphs later when you agree with the very sentiment you're objecting to. You said yourself :
"OS X isn't the best environment for everything; nor is windows."
It should really go without saying that one of the things OS X is not the best environment for is running on a MACHINE YOU BUILT YOURSELF.
AndyL on July 28, 2008 12:07 PMWhy buy a spendy, low capacity 10k RPM drive when you can get 2 or 3 large, cheap 7200 RPM drives and just put them in a RAID 0 stripe for the same amount of money while achieving higher data throughput? You can put together a 1TB RAID 0 array with 14400 effective RPM for less money than that single 300GB 10k RPM drive. Just about every modern motherboard has support for SATA RAID levels 0,1,5,&10 out of the box, and the x38 based systems definitely do.
Robin Goodfellow on July 28, 2008 12:22 PMI've been thinking about upgrading my PC because it is a few years old and pretty slow. Would a dual core processor really make a lot of difference? My motherboard is maxed out at 2 GB. I do a lot of video encoding so I would be interested in a quad core processor if it could help with that.
I have several spare computers so my current solution is to just assign a task to an entirely different computer. If you just need to multitask then you might as well use several systems at once. I use my laptop to visit web sites that hog my system resources. I could probably set up a render farm using After Effects and put all my computers to work on video encoding.
Robert S. Robbins on July 28, 2008 12:39 PMRobin:
Striping seems like it more often talked about than it is used in actual practice in respect to home PCs. I don't know much about implementing striping or it's benefits, and would honestly like to know more. Obviously Gateway or Dell aren't advertising it as a viable option, so I'm a little curious about OS support and difficulty of setup.
Maybe it'll give Jeff another idea for a blog entry. :)
Hutch on July 28, 2008 01:24 PMCrap... your posts are good, you're probably getting more and more readers, but it is now a hell of a job to read soooo many comments!
Wouldn't it be nice to have a ranking system, so that interesting comments go up, and pointless ones go down the drain? A kind of Amazon-like nifty "did you find this comment useful" ajax-thingy...
Lapalisse on July 28, 2008 01:42 PMI see that the video card has a fan. Why haven't you used a fanless one, if you are so obsessed with silent computing? Both Asus and Gigabyte have some interesting cards with passive cooling:
http://www.newegg.com/Product/Product.aspx?Item=N82E16814121244
http://www.newegg.com/Product/Product.aspx?Item=N82E16814121243
Maybe their performance isn't very good, but when you want silence you have to pay a price.
Cristian on July 28, 2008 02:40 PMDon't help him.
This MS guy should not be using ultra fast computer - he should see how it is for normal people to use Windows xp or vista on normal computer.
Why dont you blog about the slowness of Windows.
This is year 2008 - it still takes 5 minutes for me to start my computer. It loads all the stupid processes before I can do anything. Sometimes I just need to open notepad or browse the net - why does I need to wait forever for that?
MS should focus on user experience - most important things needs to be fast and I shouldnt need to buy extra fast computer.
Don't ever build PCs from parts.
PCs built from parts don't have warranties. They don't have a single company you can call if anything goes wrong. They are a waste of time and money.
If you're building PCs from parts, you have to be prepared for the eventuality of one of your parts failing, or not working as desired. In that case you have to then buy two of everything.
I've been building PCs for 10 years and I've given up. It's impossible to make the process worthwhile in terms of time and cost. My opinion is that building your own PCs from parts is not only profoundly unwise, it is also fundamentally different from building something like, oh, say, a bicycle from parts, since the components of PCs go obsolete within 18 months, as vendors try to squeeze yet more dollars from the reluctant consumer.
Eric on July 28, 2008 03:19 PM>scads of features I never end up using (two ethernet ports, anyone?)
I sometimes use 2 ethernet ports...living in a dorm I only had 1 ethernet connection for me to get on the network and didn't have a router, so I just plugged my ps3 into my extra port to get internet through there.
My only issue is now getting this same setup to work in ubuntu...I have yet to be successful so my online gaming has cut down to almost nothing since I have to boot into windows to play.
DanaL on July 28, 2008 03:23 PMNobody seems to have commented on the fact that to utilise anything over 3G of memory, you're going to need a 64-bit OS, and even then, with most motherboards, you're likely to have a big unusable hole from 3G-4G.
To the uninitiated, Dan is the man when it comes to all things hardware.
http://www.dansdata.com/askdan00015.htm
I saw at least two comments about insisting that developers should have "normal" machines, or "a second slow" machine for testing. The intent of these comments is spot-on, however the approach is old-fashioned. With a powerful enough computer, you can simulate any combination of environments using VMs. For example, you can throttle back the RAM to just 512MB and test the performance of your application to see how it behaves. This is the modern approach to solving the same class of problem they mention. Granted, if you're doing low-level benchmarking tests, then you will need the actual hardware.
Lee Grissom on July 28, 2008 04:19 PMProgrammers shouldn't have "normal" machines... testers should have normal machines. Programmers should have the most blinding fast PC's they can. My PC at work is quick, but I'd like it to be faster still... I spent too much time staring at a blank screen while my apps compile.
Kris on July 28, 2008 04:34 PMBuilding your own PC teaches you as much about the underlying hardware as plugging in a set of headphones teaches you about acoustical engineering.
I built myself a half dozen PCs before I learned (from other sources) what the CPU was actually doing when executing code.
Writing assembly will teach you more about the hardware than snapping a few components onto a motherboard and stuffing the whole thing into a case will.
I first used a video card that supported 4 monitors around 15 years ago in the early 90's. STB (Simply The Best) had one (it was physically enormous) and they supplied drivers for Windows 3.11. The thing that impressed me the most was this space game where you were flying through a tunnel and your craft was stationary on the right hand side of the right hand screen. Your attackers would enter from the left of the left screen and fire at you but with 4 monitors it would take forever for them and their missiles to reach you. I was unbeatable if I didn't let anybody else use the single STB card that the company had bought.
Guy Ellis on July 28, 2008 05:30 PM> It seems that to use all 8 GB, he'd have to deal with the hassle of using a 64-bit clean OS and all the driver complications that come with it.
A Windows user I see. As Windows is the exception in this department rather than the rule. Because for just about every other OS I know of drivers that do not work in 64bit mode are rare, GNU/Linux, *BSD, Mac OSX, etc. All of these have "plug-n-play" 64bit drivers (and if they're not plug-n-play then they're not so in 32bit either).
> And, in my experience, all that work doesn't really get repaid much, as I've never exceeded more than 3 GB of physical memory use.
This, however, is quite true most systems don't really have much use for > ~2GB of physical memory (per system, not just per process). There are plenty of exceptions though, 3D rendering, video encoding, etc. Just about anything that'll run faster with more cores can also take significant advantage from more memory.
> As Windows is the exception in this department rather than the rule. Because for just about every other OS I know of drivers that do not work in 64bit mode are rare, GNU/Linux, *BSD, Mac OSX, etc.
That is true, since of the OS's you mention, all but Windows and OS X have source drivers, and OS X, well, Jeff's rants about Apple lock-in are frequent enough. Actually, though, my only device that did not work "out of the box" with Vista 64-bit was my old scanner (for which Canon refuses to supply