On 2/25/2015 1:31 PM, Dex wrote:
> from
https://software.intel.com/en-us/forums/topic/302146
> "I worked in the lab team that proposed the CRC32 instruction for Nehalem.
> CRC32 uses a fixed polynomial to make the instruction a stateless two
> operand instruction,minimizeinstruction latency andminimize gate
> count.Castagnoli
> showed that this polynomial has nice mathematical properties that make it
> optimal vs. other choices for data sets less than 64KB and very nearly
> optimal
> in other cases. This poly is used for some networking protocols such as RDMA
> and SCTP that are difficult to offload in hardware."
CRC32 is the name of one specific binary prime poly out of a hindered or
more 32 bits long. I think there is another one used a lot. There
must have been committee meetings on it, I am not sure which
Organization came up with the (two) standard for the industry.
all the binary prime polys are easy to do in Hardware nowadays, back in
the old days, one would try to minimize gate count.
But there isn't clear choice for one poly over another one, unless the
error statistics are known, and the weight set for Prob of undetected
error is known.
Later in that same forum, they say
"CRC32c has been adopted by newer protocols that are attempting to be
Jumbo frame compliant. The CRC-IEEE 802.3 polynomal has a smaller
hamming distance where error detection rates drop off beyond the 12,176
bits (1522 bytes) indicated by the maximum frame size set in 802.3
standards."
but see, they assume that there are lots of errors more than 12,176 bits
as a distintion to choose between codes. but this is one of several
error sources or error patterns that can exist, and it is unusal to
choose a code that detects such length of errors. typically one uses
multiple codes, a short linear block code over 32 to 2048 bits and then
a CRC across multiple blocks, lots of ways. It depends upon the error
stats of the comm channel. That opinion stated above is contrary to
having small number of errors. So either they have another short code
for small # of errors, or they only get large numbers of error, or they
make mistake.
on your winzip question, I think you can buy chips and up with CRC32
already hardware encoded, or as a call in a sw/hw function.
But you still can put another type of 32 bit CRC poly on the block
lenghts you want as it comes into winzip, and decode it as it goes out.
However, you get better error detection with longer polys, like a 64 bit.
Think of the CRC as simply deviding up the dataword set into 2^64 sets
for a 64 bit crc, or 2^32 for a 32 bit, simply a lot more sets. All
the codewords in a particular set have the same CRC checksum, but the
codewords are different, by a distance d or greater