首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种以编程方式查找当前使用的GPU (C,C++)的方法?

是否有一种以编程方式查找当前使用的GPU (C,C++)的方法?
EN

Stack Overflow用户
提问于 2021-12-15 20:21:11
回答 2查看 307关注 0票数 2

在CPU的情况下,(linux特定的) sys调用getcpu()sched_getcpu()可以在程序中使用以获得执行它们的核心的ID。例如,在4个处理器系统中,所述调用返回的逻辑索引使得可以推断使用的是4个CPU中的哪一个(假设每个CPU包含10个核,因此如果sched_getcpu()返回20,这意味着CPU #2被使用,因为核心编号20位于第三个CPU中)。

在GPU的情况下,如何实现类似的功能?是否有一种方法可以从应用程序内部实时找到正在使用的应用程序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-15 22:38:36

C++没有GPU的概念。您得到了一个很好的评论,指出了使用OpenGL获取一些GPU信息的正确方向,我相信还有其他跨平台库。

看看新取的源代码,它是一个命令行系统信息工具,除其他外,它可以获取您的GPU。它使用了一系列不同的方法来获取当前系统上的GPU,其中一些方法可能会帮助您找到正确的方向。例如,对于linux系统,它使用lspci -mm获取gpu信息。

代码语言:javascript
运行
复制
echo $(lspci -mm | awk -F '\"|\" \"|\\(' \
'/"Display|"3D|"VGA/ {
a[$0] = $1 " " $3 " " ($(NF-1) ~ /^$|^Device [[:xdigit:]]+$/ ? $4 : $(NF-1))
}
END { for (i in a) {
if (!seen[a[i]]++) {
sub("^[^ ]+ ", "", a[i]);
print a[i]
}
}}')

它为我的系统返回NVIDIA Corporation GP107 [GeForce GTX 1050 Ti]。但这不是跨平台的。因此,如果你想自己动手,你就必须这样做:

  • 为您的应用程序运行的每个系统实现一种方法
  • 失去跨平台能力

或者像上面提到的那样简单地使用OpenGL。

票数 1
EN

Stack Overflow用户

发布于 2021-12-16 00:02:58

这取决于您用来访问GPU的API。在vulkan下,API本身提供了查询可用设备的功能。例如:

代码语言:javascript
运行
复制
vkEnumeratePhysicalDevices    //< use to iterate over devices 
vkGetPhysicalDeviceProperties //< use to determine make/model
vkGetPhysicalDeviceFeatures   //< use to determine the capabilities

在OpenGL下,这有点困难,因为API并没有提供一种很好的健壮的方法来迭代连接的GPU(这很大程度上是留给底层操作系统的)。除了使用glGetString调用GL_VENDOR和/或GL_RENDERER之外,在创建了上下文之后,这就是您所拥有的全部内容。

在一般的图形API中,您通常会选择预先使用的设备,然后忘记它。(也就是说,你知道哪个GPU在使用,因为它是你要求的)

例如,在windows上,您可以使用WIn32 API调用EnumDisplayDevices来迭代一堆DISPLAY_DEVICE结构,这会让您了解GPU设备的故障。如果您想查询设备功能,则需要初始化一个OpenGL上下文(使用正确的设备),并多次调用glGetIntegerv来查询实际功能。

可悲的是,在linux上,这有点棘手。迭代显示设备很大程度上取决于您用于初始化GPU的底层API (例如GLX、SDL、Qt等)。

例如,在SDL中,在应用程序启动时将首选的设备索引传递给SDL_CreateRenderer之前,您可以使用SDL_GetRenderDriverInfo在可用设备上进行迭代。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70369847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档