【发布时间】:2016-05-23 23:18:12
【问题描述】:
使用 OpenCL,我可以获得系统中可用的显卡列表(下面的代码 sn-p),但我还没有找到一种方法来确定运行时正在使用哪个显卡。这可能吗?
for (CLPlatform platform : CLPlatform.listCLPlatforms())
{
for (CLDevice gpuDevice : platform.listCLDevices())
{
// The CPU shows up as a device, so filter it out.
if (gpuDevice.getType() == CLDevice.Type.GPU && gpuDevice.isAvailable())
{
availableGPUDevices.add(gpuDevice);
numGPUDevices++;
}
}
}
理论上我希望能够添加以下内容:
if (platform.getActiveGpu().getType() != AMD or NVIDIA) (pseudo-code)
{
// show warning that a more powerful GPU is available
}
我唯一缺少的是能够确定当时哪个 GPU 处于活动状态。非常感谢任何帮助 - 谢谢!
澄清:“哪个 GPU 处于活动状态”我的意思是我正在寻找确定,目前我的检查代码正在执行,哪个 GPU 负责在屏幕上呈现内容。我的理解是,两个 GPU 不会同时渲染屏幕的一部分,所以虽然我知道它可以切换很多,但我想捕捉当时哪个 GPU 正在运行的快照。
【问题讨论】:
-
我已经初步确认,这在 OpenCL 中是不可能的,任何确认或否认这个结论都会很好;并且任何非 OpenCL 解决方案也将受到欢迎。谢谢!
-
你能把你的问题说清楚吗?您是否想弄清楚您的 openCL 内核在哪个设备上运行?
-
@JohnsPaul 我缺乏理解可能是部分原因,是否有一个 GPU 负责渲染正在显示的 OpenCL 部分,而另一个 GPU 负责显示屏幕的其余部分?我不认为有。如果我的假设成立,我的意思是我正在查看当前(在我的代码执行时)哪个 GPU 正在渲染屏幕上看到的内容。
-
我可能会在陈述问题的方式或我正在尝试做的事情中做出一些愚蠢的假设,我试图要么不这样做,要么陈述这些假设,但是我不排除我的用户错误:)。
-
@Mike:嗨,我很抱歉,我主要从事 GPGPU 方面的工作,所以我没有将 openCL 用于图形相关用途。所以我认为我不是回答你问题的合适人选。但是根据我对 GPGPU 的经验,我认为你的程序应该指定应该使用哪个 GPU 来做什么。因此,opencl 程序将检查所有可用设备,并根据程序要求为每个设备分配任务。