2017-05-07 83 views
0

誰能告訴我爲什麼OpenCL告訴我,我的Nvidia Geforce GTX 970只有13個最大計算單位?另外,最大計算單位是否等於執行單位(EU)?因爲在我的Iris 6100筆記本電腦上,device.max_compute_units是48,與圖形卡的EU相同。OpenCL,PyopenCL,爲什麼GTX970只有13個計算單元?如何找出並行數量

import pyopencl as cl 
platform = cl.get_platforms()[0] 
device = platform.get_devices()[0] # Get the GPU ID 
print device.max_compute_units 

有人可以解釋一下這個問題嗎?我想知道在這裏可以並行執行多少個進程。所以也許我在看錯誤的參數?

萬分感謝...

+0

因爲GPU有13個計算單元(採用NVIDIA術語的流式多處理器)。 – talonmies

+0

[與工作組數量對應的計算單位數量]的可能重複(http://stackoverflow.com/questions/9326430/number-of-compute-units-corresponding-to-the-number-of-work-組) – talonmies

回答

1

您不能查詢核心數量,只有數量的計算單元。英特爾集成GPU通常每個計算單元只有8個核心,而Nvidia每個計算單元的核心數量爲192或128個。 Max_compute_units是計算單元的數量,應該可用於設備分區來查找(並限制)分區,但通常只有CPU支持設備分區。

可以並行執行多少個進程(工作項)取決於硬件的能力。對於AMD顯卡來說,內核數量可能會多達40倍(這是計算單元數量的64倍)。例如,一個8位計算單元的AMD GPU可以有20k(8 * 64 * 40)個線程在線,更多的線程在單個隊列中。

最大計算單元數量可以從驅動程序中更改,我已經看到集成的英特爾GPU儘管有12個測試版驅動程序,但只有8個計算單元,而且新的AMD GPU也獲得了對預留一些計算單元音頻計算在一些應用程序中,因此通用計算內核可能只會看到這些應用程序中剩餘的計算單元。

如果Nvidia GPU只有13個計算單元,並且驅動程序啓用了所有13個計算單元,則OpenCL可以使用它們的全部13個。 GTX970擁有比Intel Iris GPU更多的內核。

排隊的OpenCL內核的工作組作爲一個整體由計算單元執行,因此每個工作組的工作項與計算單元的相同內存與同一工作組中的其他工作項共享。但是一些供應商可以稍微擴展規則,更多的計算單元可以用於單個工作組的協作。如Intel igpu。

+0

英特爾GPU具有執行單元(EU)。每個可以從7個SIMD線程(波/扭曲)中選擇。英特爾驅動程序將這些映射到「計算單元」的OpenCL API,但它最多隻是一個不精確的映射。工作組可以(並且通常)運行在多個EU上。因此,跨蘋果架構比較並不是一個完全公平的蘋果。請參閱https://software.intel.com/sites/default/files/managed/c5/9a/The-Compute-Architecture-of-Intel-Processor-Graphics-Gen9-v1d0.pdf中的5.3。 – Tim

+0

什麼是共享內存那麼多歐盟呢?一片L3? –

+0

共享本地內存由幾個EU共享(我認爲是24)。是的,它已經超過L3(參見第5.5節中的圖,同一文件; SLM顯示在L3盒中)。 – Tim

相關問題