2012-10-16 40 views
1

我目前工作需要大量的變量應用程序進行存儲和處理(〜浮法4GB)OpenCL的,半浮VS性能

由於各個變量的精度是不太重要的(我知道他們會被限制),我看到我可以使用OpenCL的一半而不是浮動,因爲這會真的減少內存的數量。

我的問題是雙重的。

  • 是否有任何性能損失,使用一半,而不是浮動(我會像顯卡正在修建的浮點運算)

  • 是否有在計算混合花車和一半的性能損失? (即浮動倍半。)

Sincerily, 安德烈亞斯FalkenstrømMieritz

+4

我相信答案是非常依賴硬件。所以你應該測量和基準。 –

+9

絕對基準,因爲它絕對是情景。通常情況下,'half'會勝過'float' - 如果確實如此 - 必須處理內存帶寬和緩存效率。大多數硬件無法比'float'更快地計算'half'結果;他們只是快速移動。 – willglynn

+1

經驗法則是當將內存傳輸到GPGPU時失敗,當需要在着色器中進行類型轉換時會失敗。我認爲當從浮點移動到一半時,計算單元的數量不會增加... –

回答

4

ARM CPU和GPU有自己的ALU爲half的原生支持,所以你會得到接近雙倍的速度,再加上大量節約能源消耗。 編輯: PowerVR GPU也是如此。

桌面硬件僅在加載/存儲和紋理單元AFAIK中支持half。儘管如此,我還是希望half紋理在任何GPU上的表現都比float更好。特別是如果你可以巧妙地使用紋理過濾。

+0

我已經開始了一些實驗,並且正如這裏的幾個人所建議的,內存帶寬將成爲瓶頸,而不是計算速度。因此,使用一半給出理論2x加速。我還沒有嘗試過,但這是我要走的路線。 感謝您的澄清答案!不知道關於ARM的東西,但它對我目前的項目來說並不太相關,但在未來很瞭解。 –

2

OpenCL內核幾乎總是內存速度或pci速度限制。如果您將數據的相當一部分轉換爲半浮點數,則可以更快地轉換您的值。在任何平臺/設備上幾乎肯定會更快。

就表現而言,一半幾乎不會比浮動差。我相當肯定,任何支持一半的設備都會像浮點一樣快速地進行計算。再說一次,即使這裏有一個小小的開銷,你將在遠遠優越的轉會時間彌補它。