Skip to content

node.js CRC-32C algorithm with hardware acceleration and software fallback.

License

Notifications You must be signed in to change notification settings

rwaldron/node-fast-crc32c

 
 

Repository files navigation

fast-crc32c NPM version Build Status

fast-crc32c is a CRC-32C algorithm implementation for node.js, which uses hardware acceleration (via voxer/sse4_crc32 by Anand Suresh), and fallback to software implementation when hardware acceleration fails.

Performance

CRC-32C is faster then CRC-32, which could take advantage of full CPU operand register width (64bit) instead of CRC-32's 8bit.

When using hardware acceleration, CRC-32C is about 7x ~ 9x faster than software implemented CRC-32C.

Benchmark

The 3 tested implementations are:

  • sse4_crc32c Hardware accelerated CRC-32C from sse4_crc32
  • js_crc32c Javascript implemented CRC-32C
  • js_crc32 Javascript implemented CRC-32 from buffer-crc32
$ npm run-script benchmark

> fast-crc32c@1.0.0 benchmark /Users/xiaoyi/Projects/node-fast-crc32c
> node benchmark

sse4_crc32c_hw for inputs 1024B x 2,356,905 ops/sec ±1.23% (94 runs sampled)
sse4_crc32c_hw for inputs 16611508B, avg 2027B x 171 ops/sec ±0.54% (89 runs sampled)
sse4_crc32c_sw for inputs 1024B x 987,415 ops/sec ±0.59% (98 runs sampled)
sse4_crc32c_sw for inputs 16611508B, avg 2027B x 67.53 ops/sec ±0.62% (72 runs sampled)
js_crc32c for inputs 1024B x 353,343 ops/sec ±0.62% (99 runs sampled)
js_crc32c for inputs 16611508B, avg 2027B x 13.23 ops/sec ±4.79% (26 runs sampled)
js_crc32 for inputs 1024B x 345,803 ops/sec ±0.56% (99 runs sampled)
js_crc32 for inputs 16611508B, avg 2027B x 13.20 ops/sec ±3.96% (26 runs sampled)
Impl 1024B 16611508B, avg 2027B
sse4_crc32c_hw 2,356,905 ops/sec 171 ops/sec
sse4_crc32c_sw 987,415 ops/sec 67.53 ops/sec
js_crc32c 353,343 ops/sec 13.23 ops/sec
js_crc32 345,803 ops/sec 13.20 ops/sec

Install

npm install fast-crc32c --save

Usage

var crc32 = require('fast-crc32c');
var result = crc32.calculate(data, initial);
  • data required, String|Buffer, data to digest
  • initial optional, Number, initial CRC-32C digest

About

node.js CRC-32C algorithm with hardware acceleration and software fallback.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%