What does it mean by saying "requires additional independent work in a program"? Is it that the tasks in the program has be be written in a way to be less dependent on other tasks to improve parallelism? And how is it more independent work than ALUs?
If you have less independent work than ALUs, you will not be able to use the ALU and it will sit idle.
In order to see some speedup from the threads, we need a guarantee that we can run a set of instructions on the each thread at the same time, so we need there to be more independent work.
If a program was entirely sequential steps of dependent work, we would not be able to use the other threads at all and we would see no speedup.
What is an example of a case in which throughput may not be as important and multi-threading may actually have a negative impact on runtime? Only when there are fewer memory accesses?
@jaguar if your memory accesses are very simple sequentially and you are bandwidth bound, multithreading could potentially have a negative effect (very slight) just from the overhead cost and zero gain.
If your code was hand optimized and perfectly made for your system, I imagine multi-threading would offer either zero or negative gain.
I'm sure there are other examples.