Checking for GPU Counter Support

Panther·2021년 8월 16일
0

https://developer.apple.com/documentation/metal/counter_sampling/checking_for_gpu_counter_support

"Query the GPU for supported counter sets."

지원되는 카운터 집합에 대해 GPU를 쿼리합니다.

Overview

모든 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은 샘플링을 위한 두 가지 방법을 지원합니다.

  • 애플 패밀리 GPU에 의해 사용되는 샘플링으로 파이프라인 단계 경계에서의 샘플링입니다. GPU가 렌더링 전달에서 모든 원시적인 것을 처리하기까지 부븐 프로세싱이 다르기 때문입니다.
  • 서로 다른 Metal 명령어 사이의 샘플링이며, immediate-mode 렌더링을 사용하는 GPU에 의해 지원되는 경우입니다.

Metal 기기 객체가 특정 샘플링 종류를 지원하는지를 보려면 기기 객체의 supportsCounterSampling(_:): 메소드를 MTLCounterSamplingPoint에서 정의하는 상수 중 한 가지와 함께 호출하시기 바랍니다.

0개의 댓글