I see the point of having, say, a quad core computer, is being to increase throughout. But I'm wondering at exactly what stage of normal day-to-day computing this is happening.
If I write C code to do a matrix multiplication (the "Hello World" of parallel computing) will the compiler on my system automatically know how to optimize this for all 4 cores? Or would I have to explicitly create multiple threads in my program to take advantage of all 4 cores?
Basically what I want to know is how much of a program is made parallel automatically versus how much a programmer can optimize by making multiple threads that the scheduler will send to the different cores.
Pretty much if you write a program in any the languages you know about, it won't run in parallel.
To get parallelism in such languages, you have to resort either to built-in language features ("fork" or "do parallel") or to external libraries that somehow use threading.
The functional language guys claim one of the principal values is that there are no side effects, so in fact your entire functional program can be executed in parallell. I find it astonishing that the Haskell guys then proceed to provide you with (and as far as I can tell, insist you use) explicit parallelism primitives where you want it.