如何在jcuda中获得CUDA核心数?

时间:2017-07-06 12:43:37

标签: java cuda jcuda

如何在jcuda中获得CUDA核心数?

我已经尝试了这一点,但它没有产生正确的输出:

int cudacount = cudaDeviceAttr.cudaDevAttrMultiProcessorCount;

它返回16但我有1个Nvidia GPU和640个cudacores。

上述属性的JavaDoc是available here。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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();