[iOS] Metal에서 GPU 컴퓨팅(9) MTLComputePipelineState
7665 단어 iOSObjective-C금속XcodeGPU
지금까지 Metal의 GPU 컴퓨팅에 대해 해설 기사를 써 왔습니다.
[iOS] Metal에서 GPU 컴퓨팅 (1) 최소한의 코드 작성 및 특성 파악
[iOS] Metal에서 GPU 컴퓨팅 (2) 군지능
[iOS] Metal에서 GPU 컴퓨팅 (3) MTLDevice
[iOS] Metal에서 GPU 컴퓨팅 (4) MTKView
[iOS] Metal에서 GPU 컴퓨팅 (5) MTLLibrary
[iOS] Metal에서 GPU 컴퓨팅 (6) MTLCommandQueue
[iOS] Metal에서 GPU 컴퓨팅 (7) MTLCommandBuffer
[iOS] Metal에서 GPU 컴퓨팅 (8) MTLComputeCommandEncoder
이 기사에서는 지난 번에 계속해서 Apple이 제공하는 샘플 코드에 대해 설명합니다.
취급하는 샘플 코드는, 전회와 같은 라이프게임의 앱, MetalGameOfLife입니다.
MetalGameOfLife
(실행 화면)
이번은, 샘플 코드내의 MTLComputePipelineState 에 대해서 해설을 실시합니다.
MTLComputePipelineState는 MTLFunction 내의 컴퓨팅에 대한 함수를 컴파일하는 데 사용됩니다.
MTLComputePipelineState는 클래스가 아닌 프로토콜로, MTLDevice의 객체에 의해 생성됩니다.
MTLComputePipelineState의 객체 생성은 비용이 많이 들기 때문에 앱이 시작될 때 한 번 생성하면 충분합니다.
다시 말하지만, 이 샘플 코드는 주로 다음 파일로 구성되어 있습니다.
AAPLRender.h
AAPLRender.m
AAPLViewController.h
AAPLViewController.m
Sharder.metal
이 중 AAPLRender.m에는 병렬 컴퓨팅 및 드로잉의 CPU측의 로직이 Shader.metal에는 정점 셰이더, 프래그먼트 셰이더, GPU 컴퓨팅용 셰이더가 쓰여져 있습니다.
여기에서는, 샘플 코드내에 있어서의 MTLComputePipelineState 의 사용 개소를 해설해 갑니다.
AAPLRender.m에는 다음 설명이 있습니다.
AAPLRender.m
@property (nonatomic, strong) id<MTLComputePipelineState> simulationPipelineState;
@property (nonatomic, strong) id<MTLComputePipelineState> activationPipelineState;
...
MTLComputePipelineDescriptor *descriptor = [MTLComputePipelineDescriptor new];
descriptor.computeFunction = [_library newFunctionWithName:@"game_of_life"];
descriptor.label = @"Game of Life";
_simulationPipelineState = [_device newComputePipelineStateWithDescriptor:descriptor
options:MTLPipelineOptionNone
reflection:nil
error:&error];
...
descriptor.computeFunction = [_library newFunctionWithName:@"activate_random_neighbors"];
descriptor.label = @"Activate Random Neighbors";
_activationPipelineState = [_device newComputePipelineStateWithDescriptor:descriptor
options:MTLPipelineOptionNone
reflection:nil
error:&error];
MTLComputePipelineState 의 오브젝트를 생성할 때는, MTLComputePipelineDescriptor 를 개입시켜 컴퓨팅용의 함수를 지정합니다. @"game_of_life"와 @"activate_random_neighbors"는 함수 이름입니다. 이 샘플 코드는 각 프레임마다 실행되는 함수와 화면 탭시에 실행되는 함수를 가지며, 각각 다른 MTLComputePipelineState 객체로 인코딩됩니다.
각 MTLComputePipelineState 객체는 다음 위치에서 명령 인코더에 설정됩니다.
AAPLRender.m
[commandEncoder setComputePipelineState:self.simulationPipelineState];
...
[commandEncoder setComputePipelineState:self.activationPipelineState];
이와 같이 MTLComputePipelineState는 컴퓨팅을 위한 함수를 인코딩하고 저장하는 역할을 한다.
이번에는 라이프 게임의 샘플 코드 내에서 MTLComputePipelineState의 해설을 실시했습니다.
다음 번 이후, 또 다른 개소에 대한 해설을 실시해 갑니다.
Reference
이 문제에 관하여([iOS] Metal에서 GPU 컴퓨팅(9) MTLComputePipelineState), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuky_az/items/2a59f9530410b734cb5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)