I was wondering if there is any (significant) difference between CUDA SIMT and GCN SIMD, or the SIMT keyword was creating to differentiate between the CPU SIMD approach (and VLIW one) ? As far as I can see, they behave basically the same (even the branch handling is quite similar, I think?).
I’ve checked most of the topics on the net, but there are some controversies …
i think the following statement should evaluate as true:
hypothetically, if you constrain cpu code to only make use of simd instructions, you would loosely approximate a gpu, predominantly running simt instructions
practically, you would of course fail to write simd-instruction-only cpu code
Here’s how I usually try to explain it to people:
SIMD is a processor datapath organization where the same instruction is executed concurrently on different datapath lanes.
SIMT is a multithreading model. An application launches a number of threads that all enter the same program together, and those threads get dynamically scheduled onto a SIMD datapath such that threads that are executing the same instruction get scheduled concurrently.
So SIMT is an extension to SIMD. By itself, SIMD just describes how instructions are executed. It doesn’t describe how threads are scheduled.
I don’t know that there is any “official” definition of SIMT, but I find that this one is helpful in conversation.
Makes sense, thanks.