Swift MPSMatrixDecompositionCholesky Пример? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь заставить MPSMatrixDecompositionCholesky работать в Swift, но моя матрица результатов всегда такая же, как когда я ее инициализировал.

    let dev = MTLCreateSystemDefaultDevice()
    guard dev != nil else {
        fatalError("Error: This device does not support Metal")
    }

    guard MPSSupportsMTLDevice(dev) else {
        fatalError("Error: This device does not support Metal Performance Shaders")
    }

    let cmdQueue = dev!.makeCommandQueue()
    let commandBuffer = cmdQueue!.makeCommandBuffer()

    let arr: [Float] = [1, 0, 0, 0, 1, 0, 0, 0, 1]
    let bufferStatus = device.makeBuffer(length: 1 * MemoryLayout<Int>.stride, options: [])
    let bufferSrc = device.makeBuffer(bytes: arr, length: 3 * 3 * MemoryLayout<Float>.stride, options: [])
    let bufferL = device.makeBuffer(length: 3 * 3 * MemoryLayout<Float>.stride, options: [])

    let descSrc = MPSMatrixDescriptor(rows: 3, columns: 3, rowBytes: 3 * MemoryLayout<Float>.stride, dataType: .float32)
    let descL = MPSMatrixDescriptor(rows: 3, columns: 3, rowBytes: 3 * MemoryLayout<Float>.stride, dataType: .float32)

    let src = MPSMatrix(buffer: bufferSrc!, descriptor: descSrc)
    let L = MPSMatrix(buffer: bufferL!, descriptor: descL)

    let llt = MPSMatrixDecompositionCholesky(device: dev!, lower: true, order: 3)
    llt.encode(commandBuffer: commandBuffer!, sourceMatrix: src, resultMatrix: L, status: bufferStatus)

    let rawPointer = L.data.contents()
    let count = L.rows * L.columns
    let typedPointer = rawPointer.bindMemory(to: Float.self, capacity: count)
    let bufferedPointer = UnsafeMutableBufferPointer(start: typedPointer, count: count)

    print(Array(bufferedPointer))

Я ожидаю, что результирующий массив будет 3x3единичная матрица, но вместо этого все результаты являются нулямиЯ пытался использовать var вместо let на случай, если это изменчивость, но это ничего не дало.Не помогает, что документация Apple по этому вопросу довольно скудная.

Кто-нибудь имеет опыт работы с этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...