Fast transpose byte matrix [][]byte in Golang assembly

六眼飞鱼酱① 提交于 2020-08-10 13:08:58

问题


Matrix transpose in pure golang is slow, and using package gonum needs structure transformation which costs extra time. So a assembly version may be a better solution.

Sizes of the matrix vary ([][]byte) or can be fixed ([64][512]byte), and the element type may be int32 or int64 for general scenarios.

Below is a golang version:

m := 64
n := 512

// orignial matrix
M := make([][]byte, m)
for i := 0; i < m; i++ {
    M[i] = make([]byte, n)
}


func transpose(M [][]byte) [][]byte {
    m := len(M)
    n := len(M[0])
    
    // transposed matrix
    T := make([][]byte, n)
    for i := 0; i < n; i++ {
        T[i] = make([]byte, m)
    }

    var row []byte // a row in T
    for i := 0; i < n; i++ {
        row = T[i]
        for j = 0; j < m; j++ {
            row[j] = M[j][i]
        }
    }
    
    return T
}

来源:https://stackoverflow.com/questions/63257822/fast-transpose-byte-matrix-byte-in-golang-assembly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!