6678提供的GMPY的算法为什么和GMPY4的不一样?
GMPY的算法原型是什么?
感觉指令集说明提供的GMPY算法和GMPY4所用算法有关系,但有所区别,请问区别在哪里?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
ti liu你好:
GMPY是新增的指令,比GMPY4有所增强。
其主要区别在于GMPY可以完成小于等于32次方的多项式的CRC计算,而GMPY4只能完成小于等于8次方的多项式计算。
谢谢!
GMPY的C函数实现过程如下:
uword gmpy(uword src1,uword src2,uword polynomial)
{
// the multiply is always between GF(2^9) and GF(2^32)
// so no size information is needed
uint pp;
uint mask, tpp;
uint I;
pp = 0;
mask = 0x00000100; // multiply by computing
// partial products.
for ( I=0; i<8; I++ ){
if ( src2 & mask ) pp ^= src1;
mask >>= 1;
tpp = pp << 1;
if (pp & 0x80000000) pp = polynomial ^ tpp;
else pp = tpp;
}
if ( src2 & 0x1 ) pp ^= src1;
return (pp) ; // leave it asserted left.
}
ti liu 您好:
GMPY和GMPY4的处理是类似的。数学来源就是伽罗华域为2的求余计算,通常应用在信道编码时的CRC校验计算上。
一般要理解GMPY4和GMPY的算法需要了解伽罗华域的求余运算,其原理是一致的,实现可以根据不同的方法有不同的算法。
区别还是在于GMPY4一次可以做四个求余运算,但是每个求余的方程式和输入bit只能是8bit。
GMPY一次只能做1个求余运算,但方程式可以扩展到32bit。
但具体实现是灵活的,比如输入bit是24个,方程式为x4+x3+x+1:
那如果用GMPY4实现,则可以将24按照顺序变成3个8bit,按照伽罗华域求余规则生成另外两个方程式,这样就有3个8bit的输入,和3个方程式,这时使用GMPY4求出3个有效值,最好将3个有效值异或就得到结果。
如果是GMPY实现,则直接可以实现。
不知这样回答您是否满意,有问题可以再交流。谢谢!