2011-05-18 35 views
0

讓我們假設我有一個代碼,讓用戶通過threads_per_block來調用內核。然後我想檢查一下,如果輸入有效(例如< = 512,計算能力CC < 2.0和1024(對於CC> = 2.0))。編譯時的CUDA設備屬性和計算能力

現在我想知道如果我在使用CC2.0的計算機上顯示圖形卡時使用nvcc -arch=sm_13編寫代碼時,如果用戶通過threads_per_block == 1024,會發生什麼情況?是這樣的:

  • 有效的輸入 - 因爲我運行該顯卡擁有CC2.0,或...
  • 無效的,因爲我編譯它CC1.3?

或者nvcc -arch=sm_13只是意味着CC1.3至少需要,但在較高的CC上運行它時,儘管可以使用那些較高的功能?

回答

1

從NVCC手冊:

-arch

該選項指定的架構是由編譯鏈到PTX階段承擔的架構,...

這意味着它指定了編譯器可以使用哪些PTX功能(如特殊指令)。每個塊的最大線程數並未由PTX ISA指定,因此此編譯器參數與您嘗試解決的問題無關。

檢查threads_per_block是否有效的最好方法是啓動內核並查看是否有錯誤發生。

+0

好的,謝謝so -arch選項只是指定了最低要求的計算上限。該程序是專爲......但是,當使用較高的CC,我也可以使用較高的CC的功能,對不對? – tim 2011-05-18 17:20:47

+0

是的,當使用較高的CC時,編譯器可以使用在較低CC中不可用的PTX指令。 – Kris 2011-05-18 18:49:32