0

How do I know the behavior of CUDA scheduler? Apart from testing it by varying the grid sizes, block sizes etc. in my application is there any vendor provided documentation that explains exactly in what fashion the blocks are distributed?

Rakesh Kumar
  • 51
  • 1
  • 7

1 Answers1

2

It depends on the architecture you are working on.

On the Fermi architecture, for example, you have a GigaThread global scheduler that distributes thread blocks to the Streaming Multiprocessors (SM) schedulers. For each SM, a Dual Warp scheduler schedules threads in groups of 32 parallel threads called warps.

This is well explained in the NVIDIA White Paper on Fermi. I suggest also to take a look at this other document.

Vitality
  • 20,705
  • 4
  • 108
  • 146
  • Ok. That is correct. Thank you. I am actually interested to know if there is any way by which I can find out, to which all SMs, the scheduler has distributed the threads recently. i.e., is there any log file (or something of that sort maintained) which the scheduler updates everytime with this information (so that by looking into the log file we can find out, which all SMs are currently working)? – Rakesh Kumar Feb 16 '13 at 07:18
  • [continued..] I am using Tesla M2050 fermi. So, if GigaThread global scheduler distributes thread blocks to SM schedulers, then which scheduler exactly decides how many SMs to be used and which SMs? When the threads are scheduled onto those specific SMs, is there any way to find out the IDs of those SMs? – Rakesh Kumar Feb 16 '13 at 07:28
  • I'm not aware of any method to know which blocks or thraeds are assigned to which SMs. Concerning your question, I would say that the GigaThread global scheduler decides the number and the IDs of the SMs to be employed. – Vitality Feb 16 '13 at 08:09
  • Using %smid in the kernel helps know which thread executed in which SM. I tried this. But I want to fetch this information without the help of an application. I want to fetch this information from scheduler itself. According to you I need tocommunicate with the GigaThread global scheduler. Is it anyway possible? – Rakesh Kumar Feb 16 '13 at 08:19