2011-06-21 35 views
7

我正在使用OpenCL並擁有ATI 4850卡。它具有:GPU設備上可以同時執行多少任務?

  • CL_DEVICE_MAX_COMPUTE_UNITS:10
  • CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:3
  • CL_DEVICE_MAX_WORK_GROUP_SIZE:256
  • CL_DEVICE_MAX_WORK_ITEM_SIZES:(256,256,256)
  • CL_DEVICE_AVAILABLE:1
  • CL_DEVICE_NAME:ATI RV770

有多少ta sks可以同時執行嗎?

它是CL_DEVICE_MAX_COMPUTE_UNITS * CL_DEVICE_MAX_WORK_ITEM_SIZES = 2560嗎?

更具體一點:單核處理器一次只能執行一個任務,雙核可以執行2個任務...一次可以執行多少個任務?或者改說:我的GPU有多少個處理器?

+0

你是什麼意思?可以一次執行多少個內核,或者可以在GPU上運行多少個線程? –

+0

可能是內核。我看過規範,它被稱爲「處理元素」。所以這個問題可以改寫:「我的GPU有多少處理單元?」 – Dmitriy

+0

你不能那麼容易說出來。 GPU具有多個計算單元,每個計算單元並行地同時執行多個線程(「warp」或「wavefront」)。對於nVidia來說,目前這個數字是32,對於ATI 64.我不確定是否有一個與扭曲大小相關的CL上限。此外,每個計算單元的每個計算單元都有一個未知數(nVidia表示1024),這些計算單元在由於某些原因而發生變形時會進行硬件調度。假設類似的數字,這將使你的GPU更接近320,000個線程。 – Damon

回答

6

RV770有10個SIMD內核,每個內核包含16個着色器內核,每個內核包含5個ALU(VLIW5架構)。共有800個ALU可以執行並行計算。我不認爲有辦法從OpenCL中獲取所有這些數字。我也不確定你會等同於一個CPU核心。也許是着色器的核心?你可以閱讀約VLIW at Wikipedia。這是一個有趣的設計。

如果你說任何時候CPU內核只執行一個「任務」,即使它有多個ALU並行工作,那麼我想你可以說RV770將在160個任務上工作。但隨着不同芯片工作方式的差異,我認爲「核心」和「任務」可能難以定義。具有超線程的CPU甚至可以同時執行兩組代碼。對於OpenCL,我不相信在任何時候都可以執行多個內核 - 除非最近的驅動程序更新已經改變了這個。

無論如何,我認爲以提供最佳性能的方式將您的工作呈現給GPU更爲重要。不幸的是,除了試驗之外,沒有辦法找到最好的工作組規模。至少不是我所知道的。一個幫助是,如果驅動程序支持OpenCL 1.1,則可以查詢CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE並將工作大小設置爲其倍數。否則,去掉64的倍數可能是一個安全的選擇。

+1

我想你會發現它是SIMD內核(**單指令**,多數據),它執行指令獲取和解碼,然後提供這些指示給着色器。因此,16個着色器內核都必須在特定時間運行相同的代碼。結果是一個RV770只能在10個任務上工作,而不是160個。 –

1

GPU工作結束成爲波前/彎曲。

使用GPU進行用戶界面和計算可以有效地將它用於許多程序,而不必察覺它。許多用於GUI繪圖,加上你執行的任何計算內核。快速的OpenCL客戶端是異步的並且重疊多個工作實例,因此它們不會受到延遲限制。預計你會並行使用多個內核。

除了限制您可以使用的緩衝區數量的內存,似乎沒有「硬」限制。當使用相同的GPU進行用戶界面和計算時,您必須節制您的工作。根據我的經驗,發佈太多的工作會導致GUI和/或計算內核的匱乏。似乎沒有任何方法可以確保您不會餓死(在工作項目開始實際執行之前的長時間延遲)。某些工作項目可能需要很長時間(在不好的情況下需要10秒或更長時間),而GPU則執行其他工作項目。我推測,基於數據可用性將項目分派到管道,並且很少或根本沒有防止工作項目的飢餓。

限制前方工作排隊的程度大大提高了圖形用戶界面的響應能力,讓GPU的工作隊列幾乎/有時排空,減少了GUI繪圖工作項的飢餓延遲。

相關問題