https://developer.apple.com/documentation/metal/counter_sampling/checking_for_gpu_counter_support
"Query the GPU for supported counter sets."
지원되는 카운터 집합에 대해 GPU를 쿼리합니다.
모든 GPOU가 같은 GPU 카운터 혹은 샘플링 옵션을 지원하지 않기 때문에 GPU 카운터를 프로그래밍으로 샘플링하기 전에 Metal 기기 객체에 대한 지원사항을 확인할 필요가 있습니다.
Metal은 GPU 카운터를 구분되는 관련 성능 데이터의 집합으로 나눕니다. Metal 기기 객체의 counterSets
속성은 어떤 카운터 집합이 지원되는지를 선언합니다. 카운터 집합을 요청하기 전에 이것이 사용 가능한지를 보기 위해서 확인하시기 바랍니다. 아래 코드는 기기 객체가 타임스탬프 카운터 집합을 지원하는지 여부를 확인하는 방법을 보여주고 있습니다.
id< MTLCounterSet > timestampCounterSet = nil;
NSArray< id< MTLCounterSet > >* counterSets = device.counterSets;
for ( id< MTLCounterSet > counterSet in counterSets ){
NSString* counterSetName = counterSet.name;
if ( [counterSetName caseInsensitiveCompare:MTLCommonCounterSetTimestamp] == NSOrderedSame )
{
timestampCounterSet = counterSet;
break;
}
}
쿼리 가능한 카운터 집합의 리스트 및 사용 예시는 MTLCommonCounterSet
을 살펴보시기 바랍니다.
MTLCommonCounterSet
https://developer.apple.com/documentation/metal/mtlcommoncounterset
https://velog.io/@panther222128/MTLCommonCounterSet
GPU는 카운터 집합을 지원하지만, 해당 집합 카운터의 하위집합만을 지원합니다. 카운터 속성은 특정 카운터 집합에 대해 특정 기기 객체가 지원하는 카운터의 리스트만을 포함합니다. 아래 코드는 카운터 집합이 특정 카운터를 지원하는지 확인하는 방법에 대한 설명입니다.
BOOL isCounterSupported = NO;
NSArray< id< MTLCounter > >* countersInSet = timestampCounterSet.counters;
for ( id< MTLCounter > counter in countersInSet )
{
if ( [counter.name caseInsensitiveCompare:MTLCommonCounterTimestamp] == NSOrderedSame )
{
isCounterSupported = YES;
break;
}
}
if ( isCounterSupported )
{
// Counter set provides the desired counter.
}
Metal은 샘플링을 위한 두 가지 방법을 지원합니다.
Metal 기기 객체가 특정 샘플링 종류를 지원하는지를 보려면 기기 객체의 supportsCounterSampling(_:):
메소드를 MTLCounterSamplingPoint
에서 정의하는 상수 중 한 가지와 함께 호출하시기 바랍니다.