about Multiprocessor

Hi all,

I’m not sure my understanding about multiprocessor.
So here, I have a very simple question.
All multiprocessors on a GPU are executed concurrently?
If so, the # of threads which can be executed at a time is 512(because 3216=512) for G80? (and 3230=960 for GTX280)?


I don’t think the number of threads per block depends on the number of processors. You can use many blocks, and have 512 threads per block.

Yes, but I wonder that whether all 16 (30 for GTX280) multiprocessors work concurrently or not…

Physically, only 32 threads (=a warp) are calculated at a time on 1 multiprocessor.

So, if my suggestion (that all multiprocessors work concurrently) is right, I think 32*(# of multiprocessors) threads are calculated at a time when all multiprocessors have more than 32 threads.

Am I right?

Thank you.

not completely, there are many more threads ‘in flight’. GTX280 for example can have 1024 threads running per multiprocessor.

In hardware processing is done in warps, and each warp is processed in 4 clocks by the 8 StreamProcessors on a MultiProcessor. So if you want to be very precise each clocktick, 8*20 = 240 threads are processing.

On GTX280 32 warps can be active at a time on a MP, so one warp is processed while other warps are e.g. waiting for data from memory.

So for GTX280 30720 threads can be running at a time at max (and running can thus also be, waiting for a time slot or for data from memory)

Thanks a lot :)

Then, the MPs work in time-slice fashion, right?

In other word, just 1 MP calculates at 1 time-slice. (other MPs are waiting)

No. All MPs are running concurrently. All warps on a single MP are time-sliced with zero overhead.

Oh, I see.

MPs work independently of each other?

Now my question has been solved!

Thanks a lot :D