我希望能够将一个8x8的二进制矩阵,表示为一个无符号64位整数,乘以一个由无符号字符表示的8位向量。然而,由于其他问题,矩阵必须按列排序,因此没有简单的匹配字节以进行易于计算的乘法。
有什么办法可以加快这样的计算速度吗?每个操作都很重要,因为我需要进行数十亿次这样的计算。
这些乘法在2元域(F-2)上进行。
我希望能够将一个8x8的二进制矩阵,表示为一个无符号64位整数,乘以一个由无符号字符表示的8位向量。然而,由于其他问题,矩阵必须按列排序,因此没有简单的匹配字节以进行易于计算的乘法。
有什么办法可以加快这样的计算速度吗?每个操作都很重要,因为我需要进行数十亿次这样的计算。
这些乘法在2元域(F-2)上进行。
P = A & v_inflated
。然后只需要进行加法(即异或)操作即可得到乘积的结果。uint64_t P = calculated products from text above;
uint64_t sum = 0;
for( int i = 8; i; --i )
{
sum ^= P & 0xFF;
P >> 8;
}
P^= P>>32; P^= P>>16; P^= P>>8; sum= P & 0xff;
。 - MSNoutput_bit_n = bool (matrix [n] & lookup [vector])
result= vector*matrix
还是result= matrix*vector
?发布原始版本会有所帮助,因为我认为您可以将其简化为output[bit]= vector[bit] && matrix_row[bit]!=0
。 - MSN[bit]
索引。 - Kornel Kisielewicz