我想将8x8 二进制矩阵乘以由无符号字符表示的8位向量表示为无符号64位整数.但是,由于一些其他问题,矩阵必须按列排序,因此不容易匹配字节以便于乘法.
知道如何加快这样的计算吗?每项操作都是重要的,我需要进行数十亿次这样的计算.
乘法是在2元素场(F-2)上进行的.
嗨,假设你有两个不同的独立64位二进制矩阵A和T(它T是自身的转置版本,使用矩阵的转置版本允许在乘法运算T的行而不是列,这对二进制算术来说非常酷)和你想要将这些矩阵相乘,唯一的事情是矩阵乘法结果被截断为64位,如果你得到的值大于1某个特定矩阵单元格中的值,则生成的矩阵单元格将包含1否则0
A T
00000001 01111101
01010100 01100101
10010111 00010100
10110000 00011000 <-- This matrix is transposed
11000100 00111110
10000011 10101111
11110101 11000100
10100000 01100010
Run Code Online (Sandbox Code Playgroud)
二元和传统乘法结果:
Binary Traditional
11000100 11000100
11111111 32212121
11111111 32213421
11111111 21112211
11101111 22101231
11001111 11001311
11111111 54213432
11001111 11001211
Run Code Online (Sandbox Code Playgroud)
如何以最有效的方式以上述方式将这些矩阵相乘?
我试图利用二进制and(即&运算符)而不是在单独的位上执行乘法,在这种情况下,我必须为乘法准备数据:
ulong u;
u = T & 0xFF;
u = (u << 00) + (u …Run Code Online (Sandbox Code Playgroud) algorithm bit-manipulation pseudocode matrix matrix-multiplication