2011-04-15 58 views
15

我是GPGPU編程新手,我正在使用OpenCL的NVIDIA實現。有多少個線程(或工作項目)可以同時運行?

我的問題是如何計算GPU設備的限制(線程數)。
從我所瞭解的情況來看,有許多工作組(相當於CUDA中的塊)包含許多工作項目(〜cuda線程)。

  • 如何獲得目前工作組的數量我的卡上(這可以在同一時間運行)和工作項的存在於一個工作組中的號碼?

  • CL_DEVICE_MAX_COMPUTE_UNITS對應什麼?
    核心的khronos規格說明(「OpenCL設備上的並行計算核心數量」。)與我的圖形卡規範中給出的CUDA核心有什麼區別。在我的例子中,openCL給出了14個,而我的GeForce 8800 GT則有112個基於NVIDIA網站的內核。

  • CL_DEVICE_MAX_WORK_GROUP_SIZE(在我的情況下爲512)是否與給定特定工作組的工作項總數或工作組中可同時運行的工作項數量相對應?

任何建議將不勝感激。

回答

21

OpenCL標準並未指定OpenCL提供的抽象執行模型如何映射到硬件。你可以排隊的線程(工作項目)的任意數量的T,並提供了一個工作組大小(WG),至少有以下限制(詳見OpenCL的規格5.7.3和5.8):

  • WG要分牛逼
  • WG必須至多DEVICE_MAX_WORK_GROUP_SIZE
  • WG必須以最KERNEL_WORK_GROUP_SIZE通過GetKernelWorkGroupInfo返回;如果內核消耗大量資源,它可能會小於設備最大工作組大小。

該實現管理硬件上內核的執行。單個工作組的所有線程都必須安排在單個「多處理器」上,但單個多處理器可以同時管理多個工作組。

工作組內的線程由32組(NVIDIA warp)或64(AMD wavefront)組執行。每個微架構都以不同的方式做到這一點。您可以在NVIDIA和AMD論壇以及各供應商提供的各種文檔中找到更多詳細信息。

要回答你的問題:線程數沒有限制。在現實世界中,您的問題受限於輸入/輸出的大小,即設備內存的大小。要處理4GB浮點緩衝區,可以排列1G線程,例如WG = 256。該設備將不得不安排4M工作組的小號(例如2到40)多處理器。

相關問題