3
GPU에서 처리 한 후 MTLBuffer
에서 데이터를 읽어야합니다. 지금까지 다음 코드를 시도했지만 항상 오류 코드 EXC_BAD_ACCESS
로 중단됩니다.스위프트의 MTLBuffer에서 데이터 읽기
struct gauss_model {
var mean : [Float32] = [0.0, 0.0, 0.0];
var covMat : [[Float32]] = [[0.0, 0.0, 0.0],[0.0, 0.0, 0.0],[0.0, 0.0, 0.0]];
var invCovMat : [[Float32]] = [[0.0, 0.0, 0.0],[0.0, 0.0, 0.0],[0.0, 0.0, 0.0]];
var samples : Int32 = 0;
}
self.gaussModels = [gauss_model](count: Int(10), repeatedValue: gauss_model())
self.modelsBuffer = self.device.newBufferWithBytes(self.gaussModels, length: self.gaussModels.count * sizeof(gauss_model), options: MTLResourceOptions.OptionCPUCacheModeDefault)
commandEncoder.setBuffer(self.modelsBuffer, offset: 0, atIndex: 0)
// execute GPU code
var model = unsafeBitCast(self.modelsBuffer.contents(), UnsafeMutablePointer<gauss_model>.self)
NSLog("%@", model.memory.mean) // crashes on this statement
는 또한
var model = UnsafeMutablePointer<gauss_model>(self.modelsBuffer.contents())
// iterate over models with model.memory and model.successor()
또는
var model = UnsafeMutablePointer<[gauss_model]>(self.modelBuffer.contents())
let models : [gauss_model] = model.memory
같은 값을 얻는 다른 접근을 시도했지만 그들 중 누구도 일했다. 이것을 할 수있는 방법이 있습니까?
'MTLBuffer에서 읽는 중'이 여기에서 빨리 리드하므로 실제 답변에서 작동하는 코드를 포함 할 수 있다면 좋을 것입니다. –
여기에 있습니다. 나는 또한 이것을 발견했다 : http://metalkit.org/2017/04/30/working-with-memory-in-metal.html – user965972