하나가 어떤 장치 (A GPU)를 제공하는 금속 장치와 새로운 CIContext 사용 만들 때 :맥 프로
let context = CIContext(
mtlDevice: device
)
을 내 맥북 프로에 대한 타겟팅 할 수있는 두 GPU 카드가 헤드리스 모드에서 생산에 사용 될 맥 프로에 그러나
guard
let device:MTLDevice = MTLCreateSystemDefaultDevice()
else {
exit(EXIT_FAILURE)
}
: 개발 목적은 항상 MTLCreateSystemDefaultDevice()
방법으로 화면에 연결된 장치를 선택합니다. 한 프로 내 Mac에서 다음과 같은 출력을 제공 MTLCopyAllDevices()
방법을 사용할 수 있습니다 사용 가능한 모든 장치를 얻기 위하여 :
이 맥 프로는 두 번째와마다마다 작은 작업의 수백에 크게 활용 될 것입니다 새 작업은 오는
[
<MTLDebugDevice: 0x103305450> -> <BronzeMtlDevice: 0x10480a200>
name = AMD Radeon HD - FirePro D700
<MTLDebugDevice: 0x103307730> -> <BronzeMtlDevice: 0x104814800>
name = AMD Radeon HD - FirePro D700
]
작업이 처리 될 GPU 장치를 선택해야합니다.
이
let devices = MTLCopyAllDevices() // get all available devices
let rand = Int(arc4random_uniform(UInt32(devices.count))) // random index
let device = devices[rand] // randomly selected GPU to use
let context = CIContext(
mtlDevice: device
)
항상 대상으로 맥 프로에 두 개의 동일한 GPU 장치가 있기 때문에 하나가 자원의 낭비가 될 것입니다 : -
이제 질문은 위의 배열에서 좋은 아이디어를 임의의 장치를 따기입니다 . Logic은 위의 코드를 사용하면 두 GPU가 똑같이 활용되지만 어쩌면 내가 틀렸고 MacOS가 실행시 활용도가 낮은 GPU를 지능적으로 선택할 수있는 일종의 추상화 레이어를 제공한다고 알려줍니다.
미리 감사드립니다.
안녕하세요. 워렌, 귀하의 의견에 감사드립니다. 불행히도 나는'taskIndex'를 추적 할 수 없다. 이것은 태스크가 들어 오면 실행되는 커맨드 라인 애플리케이션이다. 즉, ~ 200ms 동안 만 "살아"있다. 'CIContext'와 관련해서 저는 처음부터 모든 작업을 만들고 그 상황에서 처리하는 것만 만듭니다. – Pono
흥미 롭습니다. 나는 당신이 명령 줄을 통해 추천 된 장치 색인을 통과하고 그것을 그런 방식으로 할 수 있는지 의아하게 생각한다. – warrenm