2012-03-22 61 views
3

我想知道是否有以編程方式確定可以在GPU上運行的最大併發工作組數量的標準方法。計算最大併發工作組

例如,在具有5個計算單元(或SM)的NVIDIA卡上,每個計算單元最多可以有8個工作組(或塊),因此可以同時運行的最大工作組數量爲40。

由於我可以找到clGetDeviceInfo計算單元的數量,我需要的是可以在計算單元上運行的最大工作組數量。

謝謝!

回答

-1

我通常使用計算單位的數量作爲工作組的數量。我喜歡擴大團隊的規模以飽和硬件,而不是強迫GPU同時安排許多工作組。

我不知道如何確定組的最大數量,而無需查看供應商規格。

+0

我無法從任何供應商文檔(AMD,Intel)中找到最大數量的工作組,我不認爲有最大工作組數量之類的問題,工作組數量僅受工作項目數量的限制,所以如果你的工作項是1024,那麼'1024/CL_DEVICE_MAX_WORK_GROUP_SIZE'確定工作組號。 – kiranputtur 2012-03-23 04:07:53

+0

情況並非如此。當你使用clEnqueueNDRangeKernel時,你給了一個local_work_size參數。這是工作組的大小(和尺寸)。您還可以指定global_work_size,它是全局大小和維度。假設一維佈局工作組的數量是global_work_size/local_work_size。最初的問題是如何找出在GPU上同時工作組'在飛行中'的限制。理論上可能沒有這樣的限制,但實際上緩存和寄存器交換會顯着影響超過一些組的性能。在其他方面是不可能的。 – mfa 2012-03-23 12:27:58

+1

如果您使用此方法,它不會保證設備上的完全佔用。此外,我不想限制可以從主機啓動的工作組數量。 – KLee1 2012-03-23 21:23:08

3

每個執行單元/ SM的最大組數受硬件資源限制。讓我以英特爾Gen8 GPU爲例。它包含每個子片16個屏障寄存器。因此不超過16個工作組可以同時運行。

此外,每個子片(64KB)可用的共享本地內存量。例如,如果工作組需要32KB的共享本地內存,那麼無論工作組大小如何,只有2個工作組可以同時運行。