CUDA questions

Miscellaneous Forums/General Discussion/CUDA questions

I've had the chance to attend a CUDA talk of an NVIDIA employee today at our university so I was able to get some more precise information:

IF:
if a branching statement is reached which does not get replaced with prediction, the warp will get split into 2 warps (divergent warps) which both will executed. At the end of the execution of both warps they are will be combined again into one warp and the result of the "wanted" warp will be used.

On the first part:

Each Shader Core consists of 2 SMs, each SM of 8 SPs

Those SPs have a pipeline delay of 6 clock cycles, this means that each thread will have a delay of 6 clock cycles between 2 following commands. For that reason each SP needs at lest 6 Threads to work on to at least have a chance to be busy all the time.

To compensate pipeline delay you need at least 192 threads
to compensate memory fetch delay thought you need at least 768 threads


blocks always should have a multiply of 32 threads assigned as each warp has a size of 32.
Better and more optimal is 64 thought, due to priority handling

As well, with the 8800GTX (G80) you have the not current CUDA model (1.0), the newer ones have 1.1
the only real difference is that the G80 does not support atomic operations. (__syncronizethread() exists on all, so thats no problem)