Ik heb een C# app waarin ik de de CRC32 calculatie-code wil optimizen, die kost me te veel tijd.
De huidige code is gewoon de standaard 2-xor-1-and-en-een-table-lookup versie in native C#.
Ik zie dat met Visual Studio 2010 / .NET 4.0 er intrinsics bijgekomen zijn voor het berekenen van CRCs :
_mm_crc32_u8
_mm_crc32_u16
_mm_crc32_u32
_mm_crc32_u64
Leuk en aardig, maar met C# heb ik hier weinig aan, daarmee kan ik geen intrinsics gebruiken.
En als ik ze wrap in C++ en gebruik via pInvoke heb ik daar weer de overhead van (marshallen van de parameters van managed naar unmanaged geheugen, stack constructen).
Heeft iemand een slim idee om een CRC32 sneller te krijgen ?
De huidige code is gewoon de standaard 2-xor-1-and-en-een-table-lookup versie in native C#.
Ik zie dat met Visual Studio 2010 / .NET 4.0 er intrinsics bijgekomen zijn voor het berekenen van CRCs :
_mm_crc32_u8
_mm_crc32_u16
_mm_crc32_u32
_mm_crc32_u64
Leuk en aardig, maar met C# heb ik hier weinig aan, daarmee kan ik geen intrinsics gebruiken.
En als ik ze wrap in C++ en gebruik via pInvoke heb ik daar weer de overhead van (marshallen van de parameters van managed naar unmanaged geheugen, stack constructen).
Heeft iemand een slim idee om een CRC32 sneller te krijgen ?