如何使用 OpenGL 监控 Java 中的 GPU 使用情况?
Posted
技术标签:
【中文标题】如何使用 OpenGL 监控 Java 中的 GPU 使用情况?【英文标题】:How to use OpenGL to monitor GPU usage in Java? 【发布时间】:2019-04-08 22:23:57 【问题描述】:我希望监控硬件的超时使用情况,并且遇到了 OpenGL,因为很多人都说这是一个可能的解决方案。
我正在努力寻找如何使用 OpenGL 获取 GPU 信息的示例或资源。
可以用Java完成吗?怎么做?
或者有其他选择吗?
【问题讨论】:
你要检索什么样的信息? 内存和正在使用的内存 恐怕您需要寻找 OpenGL 扩展才能实现这一目标(因此每个 GPU 供应商都应该为您提供)。它看起来不像 OpenGL API 的开箱即用功能。 JOGL - monitor GPU memory的可能重复 【参考方案1】:OpenGL 主要是与 GPU 无关的 API,因此它没有关于 GPU 性能特征的准确信息,也没有提供某些东西的温度。另一方面,您可以使用glGetString
函数检索一些信息,这些信息可以帮助您更好地了解您正在处理的 GPU 类型。 GL_VENDOR
和 GL_RENDERER
值的组合对于平台来说是唯一的。
对于 Java,任何 OpenGL 包装器都应该是合适的,可能JOGL 是最著名的。
编辑。
虽然这并不常见,但不同的供应商都会提供您正在寻找的信息。我只能找到一些关于 GPU 内存的见解,但它给了其他人的希望:http://nasutechtips.blogspot.com/2011/02/how-to-get-gpu-memory-size-and-usage-in.html
【讨论】:
【参考方案2】:如果有人想知道如何使用 GPU,我找到了一种使用 nvidia-smi 命令然后读取输出的方法。仅适用于 nvidia gpus tho,您可以更改命令以获取其他信息,例如内存或任何使用查询命令的信息
/**
* Returns current GPU usage percentage for NVIDIA GPU's
*/
public static int getGPUUsagePercentage()
try
Process process = Runtime.getRuntime().exec("nvidia-smi --query-gpu=utilization.gpu --format=csv");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
stdInput.readLine();
return Integer.parseInt(stdInput.readLine().replace(" %", ""));
catch (Exception e)
e.printStackTrace();
return -1;
【讨论】:
以上是关于如何使用 OpenGL 监控 Java 中的 GPU 使用情况?的主要内容,如果未能解决你的问题,请参考以下文章