2016-02-12 119 views

回答

3

這可能是一個愚蠢的問題,但這是否意味着所有指針都需要兩個寄存器向前?

是。所有在x64模式下的指針都需要2個(32位)寄存器來存儲。

而且可能更少的線程/塊將是事情繼續前進的方式嗎?

當然,應該不會影響可啓動塊的數量。關於線程,是的,每塊可能會對線程產生影響(因爲每塊啓動的線程數乘以每個線程的寄存器數必須低於機器限制),但正如我在回答你所鏈接的問題時所說的那樣,通常可以使用上面提到的幾種方法之一來解決線程上的限制。許多內核不會受到影響,因爲它們沒有「超出限制」。對於那些「超出限制」的內核,有很好的技術可以緩解這種影響,並允許您爲每個塊運行所需數量的線程,最高可達1024.

最終,這意味着所呈現的問題不是性能之一,因爲它是性能優化之一,哪個問題將始終存在。

+0

在64位平臺上,CUDA使用64位通用指針。在編譯器可以確定指針總是特定於已知小於4 GB的特定內存空間(尤其是共享內存)的情況下,並且可以通過使用32位,空間特定,指針而不是。無論這種優化是否在實踐中發生,我不確定;我隱約記得曾經見過這樣的例子。唯一可以確定的方法是檢查機器碼(SASS)。 – njuffa