you can't have more parallelism by simply increasing #threads. Parallelism is bound by CPU cores.
Threads need to scale with CPU cores, however simply increasing #threads doesn't help. You need to split tasks of your program such that more tasks can be executed in parallel while not adding more overhead than you gain by parallelism.
Then you can distribute those tasks on as many threads as possible (while still being bound by #cores).
> you can't have more parallelism by simply increasing #threads. Parallelism is bound by CPU cores.
It's bound by the slowest shared resource in the system (Amdahl's law). That could be disk I/O, memory bandwidth, or power budget.
That isn't what Amdahl's law says. Amdahl's law is an equation describing the theoretical paralellizability of a given task. It doesn't have anything to do with systems bottlenecking on one resource vs another.
This is where Moore’s Law has brought us: if we want better performance, we need to take advantage of parallelism. Thus more threads.