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

Posted

技术标签:

【中文标题】你如何在 jcuda 中获得 CUDA 核心数?【英文标题】:How do you get CUDA cores count in jcuda? 【发布时间】:2017-12-10 11:32:22 【问题描述】:

如何获取jcuda 中的 CUDA 内核数?

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

int cudacount = cudaDeviceAttr.cudaDevAttrMultiProcessorCount;

它返回 16,但我有 1 个具有 640 个 cudacores 的 Nvidia GPU。

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

【问题讨论】:

它有 16 个。但我的 nvidia gpu 只有 1gpu 和 640 个 cudacores (maxwell) 如果您在具有 640 个 cudacores 的 Maxwell GPU 上为该调用获得 16 个,那么该调用或您的代码或对其的解释中出现了问题。你应该得到 5。我相信发布的答案是正确的,但如果这个电话实际上返回 16,它不会给你正确的答案 (640)。 【参考方案1】:

似乎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();

【讨论】:

以上是关于你如何在 jcuda 中获得 CUDA 核心数?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得 CUDA 版本?

将 Java 与 Nvidia GPU (CUDA) 结合使用

如何在我的代码中使用张量核心而不是 cuda 核心?

JCUDA thread context 测试

如何在 cuda 中获得并行数组的“总和”?

通过更改线程数更改 CUDA 代码输出的说明