【发布时间】:2015-02-26 18:46:11
【问题描述】:
在 GPU 上处理后,我需要从 MTLBuffer 读取数据。到目前为止,我已经尝试过以下代码,但它总是以 EXC_BAD_ACCESS 错误代码崩溃。
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
但他们都没有工作。有没有办法做到这一点?
【问题讨论】: