2009-12-07 13 views
0

Ant를 사용하여 응용 프로그램을 프로파일 링 한 결과 10 % 이상이 CRC32 계산에 있음을 알았습니다. 합니다 (CRC32-계산은 일반 C#으로 이루어집니다)C# fast crc32 계산 :

나는 약간의 인터넷 검색을했고, 2008 Visual Studio에서 다음과 같은 내장 함수에 대해 배웠 :

_mm_crc32_u8

_mm_crc32_u16

_mm_crc32_u32

_mm_crc32_u64

(http://msdn.microsoft.com/en-us/library/bb514036.aspx)

누구나 내 자제 CRC32를 대체하는 방법을 말해 줄 수 있습니까?

+0

이들은 C++ 내장 함수이며 C#이 아닙니다. – MSalters

답변

0

PInvoke (및 pure C#)를 사용하거나 C++/CLI 프로젝트를 만들고이 함수를 감싸는 래퍼를 작성할 수 있습니다.

msdn에서 예제를 보았습니까? 문자열의 CRC를 계산하려면 루프를 통과하면됩니다.

글쎄, 그것들은 내장 함수입니다. 즉, C++/CLI 랩퍼 작성 옵션이 하나만 있음을 의미합니다.

1

몇 년 전 나는 codeproject에서 찾은 것을 사용했습니다. 이제 나는 그것을 다시 찾을 수 없다. 은 그러나이 것은 또한 매우 빠른 볼 :

CRC32 on CodeProject

+1

이것은 2 개의 배타적 논리합 (XOR), 하나의 논리 곱 (AND), 그리고 현재 사용하고있는 시프트와 같은 일반적인 단일 테이블 탐색입니다.) – Pygmy

2

당신이 당신의 가정 양조를 교체하는 방법을 사용한다는 것을 확실하지. calculating CRC-32 in C# here에 대한 좋은 구현을 발견했습니다.

2

이 C# 래퍼는 현재 알맞은 크기의 데이터를위한 최상의 솔루션 일 수 있습니다.

http://code.google.com/p/crcutil/

Crcutil 라이브러리는 CRC 알고리즘의 효율적인 구현을 제공합니다. 2007 년 초 Andrew Kadatch와 Bob Jenkins가 발명 한 새로운 Multiword CRC 알고리즘의 레퍼런스 구현을 포함합니다.이 새로운 알고리즘은 현대의 Intel 및 AMD 프로세서에 크게 조정되어 있으며 거의 ​​모든 다른 소프트웨어 CRC 알고리즘보다 훨씬 빠릅니다.

하드웨어 지원 CRC32C : 0.13 (Nehalem) 바이트 당 CPU주기. 64 비트 이하의 CRC : 1.0 (Nehalem) - 바이트 당 1.2 (코어) CPU 사이클. 128 비트 CRC : 바이트 당 1.7 CPU 사이클.

Haswell의 AVX2는이 라이브러리에 포함되어 있으면 성능이 향상 될 수있는 몇 가지 지침을 제공 할 수 있습니다.

+0

이것은 매우 흥미 롭지 만 "Pygmys homebrewed CRC32 algos를 대체하는 방법" . 언급 된 라이브러리를 래핑하는 방법을 설명하면됩니다. 유효하지 않은 답변으로 +1 할 수 없습니다. –