By: rwessel (robertwessel.delete@this.yahoo.com), May 31, 2013 2:20 pm
Room: Moderated Discussions
Sebastian Soeiro (sebastian_2896.delete@this.hotmail.com) on May 31, 2013 2:22 pm wrote:
>
> - Ah, so it simply gives full priority to a second thread to utilize unused execution units? If so; can
> you please explain as to why some applications that ARE indeed multi-threaded, but still don't benefit
> from multi-threading? It's weird how I find some game benchmarks to either take very little/none at all/a
> performance HIT with hyperthreading enabled, when it's for sure that they use multiple threads...
>
There remains contention for resources. For example the decoders, branch prediction units, reservation and reorder stations, caches, memory, etc. Consider a simple case where the first thread is creating nearly enough memory references (after caching) that the available memory bandwidth is large consumed by the first thread. Adding a second thread won't make any more memory bandwidth available. Likewise, a single thread might cache well, but with two threads running, and both threads competing for a fixed size cache, they may both start generating many more cache misses.
>
> - Ah, so it simply gives full priority to a second thread to utilize unused execution units? If so; can
> you please explain as to why some applications that ARE indeed multi-threaded, but still don't benefit
> from multi-threading? It's weird how I find some game benchmarks to either take very little/none at all/a
> performance HIT with hyperthreading enabled, when it's for sure that they use multiple threads...
>
There remains contention for resources. For example the decoders, branch prediction units, reservation and reorder stations, caches, memory, etc. Consider a simple case where the first thread is creating nearly enough memory references (after caching) that the available memory bandwidth is large consumed by the first thread. Adding a second thread won't make any more memory bandwidth available. Likewise, a single thread might cache well, but with two threads running, and both threads competing for a fixed size cache, they may both start generating many more cache misses.