2017-07-06 36 views
1

如何獲得jcuda中的CUDA核心數?如何在jcuda中獲得CUDA內核?

我已經試過,但它不會產生正確的輸出:

int cudacount = cudaDeviceAttr.cudaDevAttrMultiProcessorCount; 

它返回16,但我有1個Nvidia的GPU與640個cudacores。

上述屬性的JavaDoc爲available here。 任何幫助將不勝感激。

+0

它得到16但我的NVIDIA gpu只有1gpu和640個cudacores(麥克斯韋爾) –

+1

如果你在那個調用中獲得16個,那麼在一個帶有640個cudacores的Maxwell GPU上,那麼這個調用或者你的代碼或者它的解釋就會被破壞。你應該得到5.我相信發佈的答案是正確的,但如果這個調用實際上返回16,它不會給你正確的答案(640)。 –

回答

2

看來,this answer幾乎完全是你想要的。它是用C語言編寫,並且種類略有不同,所以這裏有一個Java版本(這是幾乎沒有任何不同):

int getSPCount() 
{ 
    final int mp = cudaDeviceAttr.cudaDevAttrMultiProcessorCount; 
    final int major = cudaDeviceAttr.cudaDevAttrComputeCapabilityMajor; 
    final int minor = cudaDeviceAttr.cudaDevAttrComputeCapabilityMinor; 

    switch (major) 
    { 
     case 2: // Fermi 
      return (minor == 1) ? mp * 48 : mp * 32; 
     case 3: // Kepler 
      return mp * 192; 
     case 5: // Maxwell 
      return mp * 128; 
     case 6: // Pascal 
      if (minor == 1) { 
       return mp * 128; 
      } 
      else if (minor == 0) { 
       return mp * 64; 
      } 
    } 
    throw new RuntimeException("Unknown device type"); 
} 

使用此功能,像這樣:

int cudacount = getSPCount();