2012-03-01 27 views
6

kullanarak CRC64'ün farklı uygulamalarını kontrol ettim. Örneğin, this, this ve this. Tüm bunlarla ilgili sorun, baytlarla çalıştıklarıdır. Ancak, 64 bit sistemde long (8 bayt) ile çalışmak istiyorum. Bu sayede daha az yineleme yapmam gerekecek. Örneğin, bir byte kullanarak 128 bayt verileri için 128 kez yinelemeliyim, long ile, yalnızca 16 kez yinelemeliyim.CRC sağlama toplamı uzun (64 bit)

long veya byte daha büyük bir kelime bile büyüklüğünü kullanan herhangi CRC64 uygulaması var mı? Bu şemalar bunu yapmak için değiştirilebilir mi?

+2

, GCC sizin döngü göz önüne sermek ve hatta mümkünse 128 bit XMM kayıtlarını kullanılacak en olasıdır. Bu nedenle, kodun körü körüne optimize edilmesini sağlamak için zaman harcamanızdan önce - derleyicinizin ne yaptığını kontrol edin. –

+1

Ya, ancak hesaplama, vektörleştirilebileceğini düşünmediğim döngüseldir. – pythonic

+1

Derleyiciden daha akıllı olmaya çalışmadan önce, ne kadar akıllı olduğunu kontrol edin. GCC birçok döngü analizi gerçekleştirir, bunlardan bazıları hiç duymadığınızdan eminim. Döngüsel hesaplama için bile bir döngüyü (belirli koşullar altında) yapabilir. Sizin durumunuzda olduğunu söylemiyorum ama kendi optimizasyonlarınızla devam etmeden önce kontrol etmeniz gerekiyor. –

cevap

13

CRC hesaplama verileri işlemek zorunda kalmamak için bir numara kullanan bit-bit: Bu aynı anda birden çok bit işlemeye izin veren bir arama tablosu kullanır.

işlem bir defada n zerreleri boyut 2^n bir arama tablosu gerekir. Bağladığınız uygulamalar bir seferde 1 bayt (8 bit) okur ve aslında hepsi 256 == 2^8 boyutunda bir arama tablosu kullanır. Bir seferde

İşlem 64 bit pratik değildir boyutu 2^64, bir arama tablosu gerektirecektir. Bu nedenle, CRC'nin ortak uygulamaları bir seferde 1 bayt işlem yapar.

bir 65536 girişli dizisi kullanarak bir seferde 2 bayt işlemek mümkün olsa, bu durum daha fazla işlemci önbelleği kullanarak olumsuz bir performans etkisi olması muhtemeldir. SSE varsa

+1

BTW, donanım uygulamalarında da arama tabloları kullanılıyor mu? –

+0

@Vlad Donanım uygulamaları hakkında fazla bir şey bilmiyorum. – interjay

+0

@VladLazarenko: Seri iletişim ile bağlantılı ve baud hızı ile aynı hızda çalışan, sırayla her bit işleyen ve dolayısıyla arama tablolarına ihtiyaç duymayan donanım uygulamaları vardır. – quamrana