gpt4 book ai didi

ios - 在 Swift 中从 MTLBuffer 中读取数据

转载 作者:可可西里 更新时间:2023-10-31 23:45:06 27 4
gpt4 key购买 nike

在 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

我也尝试过不同的获取值(value)的方法,比如

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

但它们都不起作用。甚至有办法做到这一点吗?

最佳答案

我已经设法解决了这个问题。问题在于我对 Swift 中的内存管理的错误假设以及函数 newBufferWithBytes 仅执行浅拷贝的事实。调用该函数仅将指针复制到 meancovMatinvCovMat 数组以及 self.modelBuffer.contents()包含指向未初始化内存的指针。访问内存导致崩溃。

关于ios - 在 Swift 中从 MTLBuffer 中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com