8
« on: February 24, 2012, 07:30:46 pm »
It depends on what the limiting factor is. If it's CPU-bound, then faster CPU will help the most of all other possibilities. If it's memory-bound, then bigger L1/L2 cache and faster bus will help. If it's IO-bound then more memory (i.e. more file buffer space) and a faster or second drive will help. I really, really doubt DF is IO-bound.
Unless you're I/O bound, getting more memory will do little for the speed, until you run out and hit swap. If you're swapping, for the love of Armok, get more RAM.
Parallelism is hard. I recently had the joy of rewriting our implementation a complicated algorithm, from scratch (ask me about this time next year what it is; for now I'm embargoed). It basically runs in two phases: one where we gather a bunch of data, another where we iterate over the data and make complicated decisions one item at a time with complicated dependences between the decisions. The first phase is possible to parallelize. The second, not so much. So I knocked myself out and parallelized the first phase up the wazoo. Running on a 12-core machine, the speedup on the first phase is very nearly a factor of 12! Overall that means it's a whole... 10-15% faster than it otherwise would be. Woot!