Creating Counter Sample Buffers to Hold Counter Data

Panther·2021년 8월 16일
0
post-custom-banner

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

"Use GPU-accessible memory to store sampling data."

샘플링 데이터를 저장하기 위해 GPU가 접근 가능한 메모리를 사용합니다.

Overview

카운터 집합을 샘플링하려면, GPU가 데이터를 쓸 수 있는 위치에 두는 것이 필요합니다. GPU가 메모리 접근을 필요하는 다른 곳처럼, 데이터를 갖기 위해 Metal 리소스(카운터 샘플 버퍼)를 사용하게 됩니다. 샘플을 Metal 리소스에 저장하기까지, 카운터 집합을 샘플링할 때 Metal은 비용이 많이 드는 CPU-GPU 싱크를 피합니다.

카운터 샘플 버퍼는 GPU에 따라 달라지는 private 데이터 포맷을 사용합니다. 샘플 데이터에 접근하려면, 샘플링 후 어느 시점에서는 Metal에게 해당 데이터를 일반적인 포맷으로 변환하도록 알려줘야 합니다.

아래 예시는 렌더링 앱을 위한 타임스탬플르 저장하기 위해 카운터 샘플 버퍼를 생성하는 예시입니다. MTLCounterSampleBuffer 객체를 생성하려면 코드는 MTLCounterSampleBufferDescriptor를 초기화하고 이것의 속성을 카운터 집합, 저장 모드, 버퍼의 용량을 선택하도록 설정합니다.

__autoreleasing NSError* error = nil;
MTLCounterSampleBufferDescriptor* timestampSamplerDesc = [[MTLCounterSampleBufferDescriptor alloc] init];
timestampSamplerDesc.counterSet = timestampCounterSet;
timestampSamplerDesc.storageMode = MTLStorageModeShared;
timestampSamplerDesc.sampleCount = 4;
id< MTLCounterSampleBuffer > rendererTimestampCounterSampleBuffer = [device newCounterSampleBufferWithDescriptor:timestampSamplerDesc error:&error];

코드를 보면 아래 내용을 수행합니다.

  • MTLStorageMode.shared 저장 모드를 구체화해서 앱이 샘플 데이터를 CPU가 접근할 수 있는 메모리로 해석할 수 있습니다. 오직 GPU에서만 카운터 데이터를 작업하고 있다면 MTLStorageMode.private을 선택해야 합니다.
  • 샘플 카운트를 4로 구체화해서 앱이 정점 및 부분 단계의 시작과 끝에 타임스탬프를 샘플링할 수 있도록 합니다.
  • 카운터 샘플 버퍼를 생성하기 위해 기기의 makeCounterSampleBuffer(descriptor:) 메소드를 호출합니다.

See Also


Sample Buffers

Sampling GPU Data into Counter Sample Buffers

Metal 명령을 인코딩할 때 언제 카운터를 샘플링할지 결정합니다.

https://developer.apple.com/documentation/metal/counter_sampling/sampling_gpu_data_into_counter_sample_buffers
https://velog.io/@panther222128/Sampling-GPU-Data-into-Counter-Sample-Buffers

MTLCounterSampleBufferDescriptor

카운터 샘플 버퍼 생성을 위해 사용되는 설정입니다.

https://developer.apple.com/documentation/metal/mtlcountersamplebufferdescriptor
https://velog.io/@panther222128/MTLCounterSampleBufferDescriptor


post-custom-banner

0개의 댓글