2011-04-19 37 views
5

我一直認爲warp調度程序會一次執行一個warp,具體取決於哪個warp已準備就緒,並且此warp可以來自多處理器中的任何一個線程塊。但是,在Nvidia的網絡載入幻燈片中,有人說:「佔用率=多處理器上同時運行的經紗數量除以可同時運行的最大經紗數量」。所以一次以上可以運行多個warp?這個怎麼用?CUDA warp和佔用

謝謝。

回答

9

「正在運行」可能會被更好地解釋爲「在SM上有狀態和/或管道中的指令」。 GPU硬件調度儘可能多的塊,或者將其放入SM的資源中(以較小者爲準),爲每個包含的warp(即寄存器文件和本地內存)分配狀態,然後開始調度warp執行。指令流水線似乎大約需要21-24個週期,所以在任何時候「運行」的各個階段都有很多線程。前兩代具有CUDA功能的GPU(所以G80/90和G200)僅在每四個時鐘週期退出單個warp指令。每兩個時鐘週期從兩個經線計算2.0設備雙指令指令,因此每個時鐘有兩個經線退刀指令。 Compute 2.1通過允許有效的無序執行來擴展這個功能 - 每個時鐘仍然只有兩個經紗,但是一次可能有兩個來自同一個經紗的指令。因此,每個SM的額外16個內核可用於指令級並行,仍然由相同的共享調度程序發出。