You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中通过编程方式获取GPU核心数量?

如何在Java中通过编程方式获取GPU核心数量?

作为经常做Java性能优化的开发者,我来分享几种实用的方案,帮你搞定GPU核心数查询,还能兼顾Windows和Linux平台:

一、用JOCL(OpenCL的Java绑定)——最靠谱的跨平台方案

OpenCL本来就是为查询计算设备(包括GPU)设计的,JOCL是它的轻量Java绑定,完全不需要初始化渲染上下文,直接就能获取硬件信息,完美匹配你的需求:

步骤说明:

  1. 引入JOCL依赖(比如通过Maven或Gradle)
  2. 获取OpenCL平台(通常对应显卡厂商)
  3. 获取平台下的GPU设备
  4. 查询设备的CL_DEVICE_MAX_COMPUTE_UNITS参数(这就是你要的GPU计算单元/核心组数量,大部分场景下用户说的“GPU核心数”指的就是这个;如果要更细的流处理器数,部分设备支持CL_DEVICE_MAX_WORK_GROUP_SIZE等参数,但不同厂商定义可能有差异)
  5. 同时可以查询CL_DEVICE_NAME获取GPU型号

示例代码:

import org.jocl.*;

public class GPUInfo {
    public static void main(String[] args) {
        // 开启OpenCL异常抛出
        CL.setExceptionsEnabled(true);
        
        // 获取平台数量
        int[] numPlatforms = new int[1];
        CL.clGetPlatformIDs(0, null, numPlatforms);
        Platform[] platforms = new Platform[numPlatforms[0]];
        CL.clGetPlatformIDs(numPlatforms[0], platforms, null);
        
        for (Platform platform : platforms) {
            // 获取当前平台下的GPU设备数量
            int[] numDevices = new int[1];
            CL.clGetDeviceIDs(platform.getPlatformID(), CL.CL_DEVICE_TYPE_GPU, 0, null, numDevices);
            Device[] devices = new Device[numDevices[0]];
            CL.clGetDeviceIDs(platform.getPlatformID(), CL.CL_DEVICE_TYPE_GPU, numDevices[0], devices, null);
            
            for (Device device : devices) {
                // 读取GPU型号
                String deviceName = CL.clGetDeviceInfoString(device, CL.CL_DEVICE_NAME);
                // 读取计算单元数量
                long computeUnits = CL.clGetDeviceInfoLong(device, CL.CL_DEVICE_MAX_COMPUTE_UNITS);
                
                System.out.println("GPU型号: " + deviceName);
                System.out.println("计算单元(核心组)数量: " + computeUnits);
            }
        }
    }
}

二、用Oshi——Java-centric的系统硬件库

如果你不想碰OpenCL,Oshi是个纯Java的系统信息库,它底层会自动适配系统API(Windows用WMI,Linux用lspci/nvidia-smi等),不用你自己写JNI,直接调用封装好的方法就行:

步骤说明:

  1. 引入Oshi依赖
  2. 通过HardwareAbstractionLayer获取显卡信息
  3. 提取计算单元数和型号

示例代码:

import oshi.SystemInfo;
import oshi.hardware.GraphicsCard;
import oshi.hardware.HardwareAbstractionLayer;

import java.util.List;

public class OshiGPUInfo {
    public static void main(String[] args) {
        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        List<GraphicsCard> gpus = hal.getGraphicsCards();
        
        for (GraphicsCard gpu : gpus) {
            System.out.println("GPU型号: " + gpu.getName());
            // 备注:Oshi的getComputeUnits()在部分老旧设备或核显上可能返回0,取决于系统支持程度
            System.out.println("计算单元数量: " + gpu.getComputeUnits());
        }
    }
}

三、执行系统命令解析输出——兜底方案

如果上面的库都不符合你的需求,直接执行系统命令然后解析输出也是可行的,缺点是需要针对不同平台和GPU厂商适配:

Windows平台(N卡):

执行nvidia-smi命令,解析输出中的CUDA Cores字段,Java代码示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class NvidiaSMI {
    public static void main(String[] args) {
        try {
            Process process = new ProcessBuilder("nvidia-smi").start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                if (line.contains("CUDA Cores")) {
                    // 解析核心数,比如格式为 "CUDA Cores        : 3584"
                    String[] parts = line.split(":");
                    if (parts.length >=2) {
                        System.out.println("N卡CUDA核心数: " + parts[1].trim());
                    }
                }
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Linux平台:

  • N卡同样用nvidia-smi
  • A卡可以用rocm-smi(需提前安装ROCm套件)
  • Intel核显可以用lspci -v | grep -A 10 VGA解析相关信息

注意:这种方式依赖系统已安装对应命令,而且输出格式可能随版本变化,维护起来比较麻烦,只建议作为兜底方案。

关于你提到的LWJGL/JOGL

其实LWJGL可以通过GLFW的无头模式(不创建可视化窗口)来获取GPU信息,但相比JOCL,它还是更偏向渲染场景,获取计算核心数的API不如OpenCL直接,所以优先级不如JOCL高。

备注:内容来源于stack exchange,提问作者Sashko1121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:04:31