Quote Originally Posted by OhNoes! View Post
The key to all the confusion is workload. Though SMT allows for the simultaneous execution of threads, it's entirely dependent on shared resources. This is a liability CMT design should theoretically overcome.
Now this is an interesting point : what if being dependent on shared resources isn't a liability, but actually a desirable feature ?

SMT allows me to increase the utilization of an underutilized core. CMT duplicates the core or part of it, thus duplicating the lack of utilization also.

Example : we take a 4 issues wide core with 4 ALU units. Let's say, most of the time only 1 or 2 of those units are used.
-with SMT, we have 2 threads running in parallel on that core, the second thread being dispatched to the idle units. Thus we now have 3 or even all of the units in use.
-with CMT, I add another cluster of 4 ALUs for a total of 8. I have 2 threads, but I also have 2x as many resources available and each thread uses most of the time 1 or 2 ALUs. Thus, out of 8 in the module, I'm constantly using 3-4 units.