Gaming PC Builder Challenge, pt 3

Here are some of the follow-up questions my friend asked me after posting the previous two posts.

SLI

Why not go for SLI or Crossfire?

For those unfamiliar with the terms, Scalable Link Interface (SLI) and Crossfire are terms used by nVidia and ATI (now AMD), respectively, to call their method of allowing two or more video cards of the same to work on the same graphics rendering tasks at the same time. This should theoretically allow the computer to produce twice/thrice/etc the frames per second (fps) for games or other graphics-heavy programs.

In practice, however, the performance gains provided by both configurations are unpredictable. The performance might double in some applications, while the performance difference might be negligible on other applications.

Another downside to using SLI/Crossfire is that not all motherboards can support them. For example, none of the motherboards that I chose in the previous two posts support SLI, but all support Crossfire. If you’re planning to build an SLI-ready or a Crossfire-ready PC, you will have to make sure that the motherboard supports it.

The increase in the power requirement of your system from using multiple (energy guzzling) video cards might also require you to upgrade your PSU. You can go to this site to check if your (brand-name) PSU can provide enough power to your planned SLI/Crossfire system.

Speaking of PSUs, manuals usually ask the system builder to connect each video card to a dedicated line from the PSU to avoid overloading the line. You must make sure that the PSU has enough lines for your card as some PSUs only have one line for the 6-pin PCI-Express connectors.

There are cases where SLI and Crossfire make sense, though. One obvious scenario would be getting the absolute highest performance from the cards in the market. No single card would be a match to a system two or more of the most powerful video cards in the market working together in SLI/Crossfire.

Of course that scenario would only be applicable to the most hardcore of system builders. For the average enthusiast builder, SLI and Crossfire provides a way to beat the market sometimes. Recall what I said about the cards I chose being in a sweet spot:

…go any cheaper than the HD 4850 and you’ll get a large decrease in performance, but going for even a slightly more powerful card will give you a large increase in price.

Depending on the state of video card retail prices, there are times where SLI or Crossfire configurations would provide the same (or better) performance compared to their more expensive counterparts. This is currently the case for Radeon HD 4850 / 4870 and GeForce GTX 260 (that is, if you can find stores that sell those cards at those prices).

Another possible practical scenario takes advantage of the fact that prices always go down as new hardware gets introduced in the market. A system builder can therefore settle with just one video card first and just buy the second video card when the price goes down. This would allow him to “upgrade” his computer without having to buy a new (and more expensive) single video card.

Any incompatibilities should I watch out for when choosing parts?

First would probably be the motherboard. Some of the older motherboards do not support newer processors even though the processor sockets are compatible. There’s also the IDE ports: because of SATA, most of the newer motherboards do not carry more than one IDE socket so if you plan to carry over more than two IDE hard drives or IDE DVD-RW drives from your old PC, you’ll have to make sure that the motherboard you choose has two IDE sockets.

Another would be the PSU. As I mentioned above, you’ll have to make sure that the PSU has enough compatible connectors with your planned parts. It should also be able to provide enough power for your entire system.

Finally, there’s also the PC case. I’m sure you won’t make the mistake of buying a “micro-ATX” case when your motherboard is clearly labeled as “ATX“, but even the most well-informed computer user might not realize that some high-end video cards don’t fit in smaller cases.

I’m planning to buy this in December…

Don’t.

By December the lists I provided will already be obsolete. Who knows whether nVidia would release a new chipset that would quickly dominate the sweet-spot in the video card market? Who knows if AMD would release far better processors than Intel’s proposed i5 line? Would SSD (Solid State Drive) prices go down low enough to make the average consumer buy one instead of the traditional magnetic platter based hard disk drives?

Nobody knows the answers to these questions. Because of this, you will have to re-conduct research on parts on December.

Fortunately, most of the rules of thumb I mentioned will still work by then. For example, focusing on the video card will still be applicable by December given that the speed of improvements in graphics card chips is faster than in CPU chips.

For additional information, some sites like Tom’s Hardware provide system builder guides and buying guides giving readers details on how to choose parts based on the current state of the market. You can also go to vendor neutral sites like TipidPC where you can ask members for suggestions on parts.

And that’s it for this post. I’ll post another one if my friend asks more questions.

Gaming PC Builder Challenge, pt 1

A former co-worker/student/underling texted me out of nowhere late this afternoon. At first I thought he was going to inform me that one of my programs blew up and I’ll have to go to the office to fix it. Fortunately it wasn’t the case (on the contrary, he informed me that my program was bug free all this time… riiiiight) and he was just asking for suggestions on building a gaming PC with PhP 50k.

I’m bored so what the hell. Here’s my take on building a system with that budget.

This first post will be partida*: I won’t be using parts from PCO, PC Hub or PC Express. Instead, I’ll be using parts from VillMan Computers. Their parts are more expensive and they have a narrower range of products, but as Lex mentioned, their customer support is better.

Think of this post as the safe approach in building the gaming PC.

Continue reading “Gaming PC Builder Challenge, pt 1”

Going Back 5 Years…

June 16 came and went last week without me realizing that it would have been my 5th anniversary in my former company had I not departed from it. Not that I had a reason to remember, though.

However, once I had realized it, I couldn’t help but ask myself the question:

If you would go back five years in the past, what advice would you give your past self?

Continue reading “Going Back 5 Years…”

Code Comments

Code Comments: novice programmers either use too much or too little, while so called “experienced programmers” don’t even know where they should be placed.

Actually, the proper use of code comments is one of the issues in software engineering with the least amount of debate. Overall, there are only two rules of thumb to keep in mind when using code comments.

Comments should explain the why instead of the how or what.

In other words, your comments should not repeat what the code is saying. Code Complete uses these two examples:

//set product to base
product = base;

//loop from 2 to "num"
for ( int i = 2; i <= num; i++ ) {
    //multiply "base" by "product"
    product = product * base;
}
System.out.println( "Product = " + product );
//compute the square root of Num using the Newton-Raphson approximation
r = num / 2;
while ( abs( r - (num/r) ) > TOLERANCE ) {
    r = 0.5 * ( r + (num/r) );
}

System.out.println( "r = " + r );

Both code snippets don’t look good (i.e. the variable names are bad). However, only the latter’s comments are useful, and the former would be better off with no comments at all.

If the code is so complicated that it needs to be explained, it’s nearly always better to improve the code than it is to add comments.

There are many ways to do this, ranging from using more descriptive variable names to inserting white space when needed. My personal favorite is to extract methods.

...

//get user input
...

//process user input
...

//format and display output
...

In this case, the programmer crammed all of the logic into one function. This usually happens when the developer reached his state of “flow” and just keeps on typing hundreds of lines of code into the system. The problem with functions longer than a couple of dozen lines is that not only is it hard to read, it’s also hard to debug.

By extracting the logic of the comments, we can have clearer code without even using comments, not to mention an easier to debug program:

public void run() {

	getUserInput();

	processUserInput();

	displayOutput();

}

private void getUserInput() {

	...

}

private void processUserInput() {

	...

}

private void displayOutput() {

	...

}

And yes, this is post is a lame excuse for trying out the SyntaxHighlighter plugin. :P