以编程方式获取 OS X 中的 GPU 使用百分比

2024-02-09

是否有标准方法可以在 OS X(10.6 和 10.7)上的 Cocoa/Objective-C 中获取 GPU 使用百分比?


享受它吧,GPU 和 RAM 使用情况,在谨慎的 GPU 上不起作用,顺便说一句,因为它不会公开性能监控字典。我的 MBP 有 NVIDIA gpu,应该也可以在 ATI 上运行,但我不确定 100%

#include <CoreFoundation/CoreFoundation.h>
#include <Cocoa/Cocoa.h>
#include <IOKit/IOKitLib.h>

int main(int argc, const char * argv[])
{

while (1) {

    // Get dictionary of all the PCI Devicces
    CFMutableDictionaryRef matchDict = IOServiceMatching(kIOAcceleratorClassName);

    // Create an iterator
    io_iterator_t iterator;

    if (IOServiceGetMatchingServices(kIOMasterPortDefault,matchDict,
                                     &iterator) == kIOReturnSuccess)
    {
        // Iterator for devices found
        io_registry_entry_t regEntry;

        while ((regEntry = IOIteratorNext(iterator))) {
            // Put this services object into a dictionary object.
            CFMutableDictionaryRef serviceDictionary;
            if (IORegistryEntryCreateCFProperties(regEntry,
                                                  &serviceDictionary,
                                                  kCFAllocatorDefault,
                                                  kNilOptions) != kIOReturnSuccess)
            {
                // Service dictionary creation failed.
                IOObjectRelease(regEntry);
                continue;
            }

            CFMutableDictionaryRef perf_properties = (CFMutableDictionaryRef) CFDictionaryGetValue( serviceDictionary, CFSTR("PerformanceStatistics") );
            if (perf_properties) {

                static ssize_t gpuCoreUse=0;
                static ssize_t freeVramCount=0;
                static ssize_t usedVramCount=0;

                const void* gpuCoreUtilization = CFDictionaryGetValue(perf_properties, CFSTR("GPU Core Utilization"));
                const void* freeVram = CFDictionaryGetValue(perf_properties, CFSTR("vramFreeBytes"));
                const void* usedVram = CFDictionaryGetValue(perf_properties, CFSTR("vramUsedBytes"));
                if (gpuCoreUtilization && freeVram && usedVram)
                {
                    CFNumberGetValue( (CFNumberRef) gpuCoreUtilization, kCFNumberSInt64Type, &gpuCoreUse);
                    CFNumberGetValue( (CFNumberRef) freeVram, kCFNumberSInt64Type, &freeVramCount);
                    CFNumberGetValue( (CFNumberRef) usedVram, kCFNumberSInt64Type, &usedVramCount);
                    NSLog(@"GPU: %.3f%% VRAM: %.3f%%",gpuCoreUse/(double)10000000,usedVramCount/(double)(freeVramCount+usedVramCount)*100.0);

                }

            }

            CFRelease(serviceDictionary);
            IOObjectRelease(regEntry);
        }
        IOObjectRelease(iterator);
    }

   sleep(1);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式获取 OS X 中的 GPU 使用百分比 的相关文章

随机推荐

  • 在 Reactjs 中的 EsLint“react / jsx-props-no-spreading”错误中禁用

    安装 EsLint 后 我 出现的错误之一如下 禁止传播 propeslint react jsx props no spreading 我想在 EsLint 配置中创建一条规则来忽略此错误 但我发现的示例不起作用 这是创建全局异常的格式
  • 正则表达式 Windows 路径验证器

    我试图找到一个针对 Javascript 的 Windows 文件路径验证 但似乎没有一个能够满足我想要的要求 所以我决定自己构建它 要求如下 路径不能为空 可能以 x x 开头 后跟文件名 无文件 需要延期 文件名不能包含以下特殊字符 文
  • PHP:可以包含 file_exists() 说不存在的文件

    在我的脚本中 我设置了包含路径 以便应用程序的另一部分也可以包含文件 检查文件是否存在 然后包含它 但是 在我设置包含路径后 file exists 报告该文件不存在 但我仍然可以包含相同的文件
  • PHP 中静态属性的神奇 __get getter

    public static function get value 不起作用 即使它起作用 碰巧我已经需要神奇的 get getter 作为同一个类中的实例属性 这可能是一个是或否的问题 那么 有可能吗 不 这是不可能的 引用 get 的手册
  • 使用 DataContractJsonSerializer 生成轻量级 JSON

    我正在尝试使用 Net 3 5 中的 C 和 DataContractJsonSerializer 生成 JSON 问题是我不知道如何构建适合我需要的结果的结构 我尝试使用哈希表 列表对象和数组列表来重现 PHP 的关联数组 但无法弄清楚如
  • PHP和MySql中的上传大小问题

    我正在通过 PHP 将文件上传到 MySql DB 我能够上传最大 1MB 的文件 通过反复试验发现 大小超过 1 MB 的文件不会上传 PHP中mysql error 函数打印的MySql错误为 MySQL服务器消失了 有人可以帮我解决这
  • 如何从集合中获取用户自己的数据?

    如何从集合中获取用户自己的数据 登录成功后 auth login除承载令牌外 不返回用户相关信息 So 如何仅请求已登录用户的数据来自一个集合 在使用 GraphQL 时 如果我知道我的用户 ID 我可以通过这种方式过滤我的结果 但我不认为
  • Highcharts 热图带来意想不到的结果

    按照他们网站上的示例 我 大部分 成功地混合了两个示例来显示热图 http www highcharts com demo heatmap http www highcharts com demo heatmap http www high
  • Android Studio 抛出“无方法签名”错误,指向 build.gradle:app

    尝试通过 Android Studio 运行 Kotlin 应用程序后出现此错误 A problem occurred evaluating project app gt No signature of method build 4blex
  • 我可以在 PHP 中混合使用 MySQL API 吗?

    我已经在网上搜索过 到目前为止我所看到的是你可以使用mysql and mysqli 在一起的意思 or
  • 未定义:proto.ProtoPackageIsVersion3

    I get pb go 21 11 undefined proto ProtoPackageIsVersion3我想要版本 2 我安装了protoc from https github com google protobuf release
  • 使用 jQuery 选择带有冒号的 ID

    我正在为一个网站开发一个预先编写的模块 我需要使用 id 来定位一个元素test two 现在 这个元素中有一个冒号 因此 jQuery 可以理解地将 two 视为伪类 有没有办法用 jQuery 来定位这个元素 另外 无法更改 ID 相信
  • 使用 CGBitmapInfo 和 CGI​​mageAlphaInfo 进行按位运算

    我在执行按位运算时遇到问题CGImageAlphaInfo and CGBitmapInfo在斯威夫特 特别是 我不知道如何移植这个 Objective C 代码 bitmapInfo kCGBitmapAlphaInfoMask bitm
  • 在 Eclipse 编辑器中更改 java 关键字的颜色

    如何改变java关键字的颜色 就像 Eclipse java 编辑器中的 package public class 等 我讨厌默认的紫色 谢谢 在 Eclipse 中 窗口 gt 首选项 gt Java gt 编辑器 gt 语法着色 gt
  • 用于多标签分类的 keras 自定义指标

    我在用着sigmoid and binary crossentropy用于多标签分类 例如 标签为y true就好像 1 0 1 0 0 以及标签y pred就好像 0 8 0 3 0 9 0 0 如何设置 Keras 自定义度量函数 以便
  • 从 Date() 获取 Unix 时间戳

    我可以将 unix 时间戳转换为Date 对象通过把long值转化为Date 构造函数 例如 我可以将其作为new Date 1318762128031 但在那之后 我怎样才能从Date object getTime http docs o
  • 与 preg_match_all 和以重复字符结尾的模式重叠匹配

    我想做一些类似于问题的事情preg match all 如何获得 所有 组合 甚至重叠的 https stackoverflow com questions 22454032 preg match all how to get all co
  • 如何将“复合设计模式”与 Ninject 结合使用

    验证规则合约 public interface IValidationRule bool IsValid 具体验证规则 public class MyClass IValidationRule public bool IsValid ret
  • 如何制作散点图动画

    我正在尝试制作散点图的动画 其中点的颜色和大小在动画的不同阶段发生变化 对于数据 我有两个带有 x 值和 y 值的 numpy ndarray data shape ntime npoint x shape npoint y shape n
  • 以编程方式获取 OS X 中的 GPU 使用百分比

    是否有标准方法可以在 OS X 10 6 和 10 7 上的 Cocoa Objective C 中获取 GPU 使用百分比 享受它吧 GPU 和 RAM 使用情况 在谨慎的 GPU 上不起作用 顺便说一句 因为它不会公开性能监控字典 我的