LoginSignup
0
1

More than 3 years have passed since last update.

Swift:もしかしたらGPUの状態を取得できるかもしれないコード

Posted at

RunCatでシステム情報を色々取得してきたので,GPUの状態も取得してみようと思い調べたところ,Objective-Cでやっている先駆者がいたのでSwift化してみました.しかし,自分の開発機のMacBook Proは13インチでGPU積んでないので動作検証できませんでした.

誰か試してみたらコメント欲しいです.

import Cocoa
import IOKit

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        getGPUPerformance()
    }

    func getGPUPerformance() {
        let dict = IOServiceMatching(kIOAcceleratorClassName)
        var iterator = io_iterator_t()
        if IOServiceGetMatchingServices(kIOMasterPortDefault, dict, &iterator) == kIOReturnSuccess {
            while case let regEntry = IOIteratorNext(iterator), regEntry != 0 {
                var services: Unmanaged<CFMutableDictionary>? = nil
                if IORegistryEntryCreateCFProperties(regEntry, &services, kCFAllocatorDefault, 0) != kIOReturnSuccess {
                    IOObjectRelease(regEntry)
                    continue
                }
                if
                    let servicesDict = services?.takeRetainedValue() as? [String : AnyObject],
                    let ps = servicesDict["PerformanceStatistics"] as? [String : AnyObject],
                    let gpuCore = ps["GPU Core Utilization"] as? Double,
                    let freeVram = ps["vramFreeBytes"] as? Double,
                    let usedVram = ps["vramUsedBytes"] as? Double {
                    let outpu = String(format: "GPU: %.3f%%, VRAM: %.3f%%",
                                       gpuCore / 10000000.0,
                                       100.0 * (usedVram / (usedVram + freeVram)))
                    Swift.print(outpu)
                }
                services?.release()
                IOObjectRelease(regEntry)
            }
            IOObjectRelease(iterator)
        }
    }

}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1