返回

如何检索 GPU 引擎列表?

windows

深入解析:检索 GPU 引擎列表

摘要

了解如何检索 GPU 引擎信息对于开发类似于任务管理器程序至关重要。本指南将深入探讨使用 D3DKMTQueryAdapterInfo 和 D3DKMTQueryStatistics 函数获取引擎详细信息的步骤,并提供解决特定挑战的见解。

获取引擎数量

确定 GPU 中引擎数量是至关重要的。使用 D3DKMTQueryAdapterInfo 函数,如下所示:

D3DKMTQueryAdapterInfo(hAdapter, 0, &adapterInfo);

adapterInfo.NumEngines 字段将包含引擎数量。

检索引擎详细信息

使用 D3DKMTQueryStatistics 函数检索每个引擎的详细信息:

D3DKMTQueryStatistics(hAdapter, &queryObject, &queryResult);

queryResult.Stats 包含有关每个引擎的统计信息。

基于 ID 获取引擎名称

D3DKMTQueryStatistics 函数不提供引擎名称。使用 DirectX Diag 工具通过引擎 ID 获取名称:

  1. 打开 DirectX Diag(“dxdiag”)
  2. 转到“显示”选项卡
  3. 在“引擎”部分找到引擎名称

代码示例

以下 C++ 代码示例演示了如何获取引擎列表:

// 获取引擎数量
D3DKMTQueryAdapterInfo(hAdapter, 0, &adapterInfo);
cout << "引擎数量:" << adapterInfo.NumEngines << endl;

// 获取引擎详细信息
D3DKMTQueryStatistics(hAdapter, &queryObject, &queryResult);

// 遍历引擎并打印详细信息
for (UINT i = 0; i < queryResult.Stats[0].NumValues; i++)
{
    cout << "引擎 " << i << ":" << endl;
    cout << "\tID:" << queryResult.Stats[0].Values[i].Value.Uint32 << endl;
    cout << "\t名称:" << GetEngineName(queryResult.Stats[0].Values[i].Value.Uint32) << endl;
}

结论

通过遵循这些步骤,你可以轻松检索 GPU 引擎列表,包括引擎数量、详细信息和名称。这对于诊断 GPU 问题和开发系统监视工具至关重要。

常见问题解答

  1. 如何获取特定引擎的统计信息?

    使用 D3DKMTQueryStatistics 函数并设置 StatisticId 以查询特定统计信息组和统计信息 ID。

  2. 引擎名称如何在 DirectX Diag 中显示?

    引擎名称在“引擎”部分中按引擎 ID 排序显示。

  3. 如何处理没有 DirectX Diag 的系统?

    可以通过其他第三方工具或直接从 GPU 供应商获取引擎名称。

  4. 获取引擎列表的性能影响是什么?

    该过程的性能影响很小,通常可以忽略不计。

  5. 我可以使用这些信息做什么?

    此信息可用于监视 GPU 健康状况、诊断问题和开发 GPU 性能优化工具。