2012-04-11 14 views

答えて

-1

私が知る限り、これを直接行うためのCarbon関数はありません。おそらく、おそらくMach APIを使ってカーネルに問い合わせることです。

This example on Apple Dev. Libraryをご利用ください。

+0

その例では、GPUの使用に関する情報を取得せず、データセットのヒストグラムを計算するためにGPUを使用しているようです。 – JWWalker

+0

@JWウォーカー:はいそうです。私は完全にチェックすることはできません、それは私のマシン上で実行されない(clGetDeviceIDs()は失敗しました。(-1))。 – houbysoft

+0

@Nit:GPU自体を使用するものではなく、現在のGPUの使用方法を探しています。 – houbysoft

2

パフォーマンスモニタリング辞書が公開されていないため、GPUとRAMの使用を楽しんでください。ディスクリートGPUでは動作しません。私のMBPはNVIDIA gpuを持っていますが、ATIでも動作するはずですが、私はよく分かりません。

#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; 
} 
+0

専用のgpuデータと控えめなgpuデータの両方を取得する方法はありませんか? –

+0

いいえ、控えめなGPUはパフォーマンスデータを公開していませんが、ATIもそれを公開していないこと、VRAMの使用だけは公開していますが、GPUの使用については何も発見していません:/ –

+0

もう一度、 2つ以上のGPU? 私はアイデアを持っていませんが、ハードウェアはありません。 –

関連する問題