Tôi đã kiểm tra các triển khai CRC64 khác nhau. Ví dụ: this, this và this. Vấn đề với tất cả những điều này là chúng hoạt động với các byte. Tuy nhiên, trên hệ thống 64 bit, tôi muốn làm việc với long
(8 byte). Bằng cách này, tôi sẽ cần phải lặp lại ít hơn. Ví dụ, đối với dữ liệu 128 byte, sử dụng byte
, tôi cần lặp lại 128 lần, trong khi với long
, tôi sẽ chỉ cần lặp lại 16 lần.Tổng kiểm tra CRC sử dụng dài (64 bit)
Có triển khai CRC64 nào sử dụng long
hoặc thậm chí kích thước từ lớn hơn byte không? Các kế hoạch này có thể được sửa đổi để làm như vậy không?
Nếu SSE khả dụng, GCC có nhiều khả năng hủy bỏ vòng lặp của bạn và thậm chí sử dụng thanh ghi XMM 128 bit nếu có thể. Vì vậy, trước khi bạn dành nhiều thời gian tối ưu hóa một cách mù quáng mã - hãy kiểm tra xem trình biên dịch của bạn đang làm gì. –
Ya, nhưng tính toán là tuần hoàn, mà tôi không nghĩ rằng có thể được vectorized. – pythonic
Trước khi bạn cố gắng outsmart trình biên dịch, hãy kiểm tra xem nó thông minh như thế nào. GCC thực hiện nhiều phân tích vòng lặp, một số trong số chúng tôi chắc chắn bạn chưa từng nghe đến. Nó có thể (và trên thực tế, trong những trường hợp nhất định) unroll một vòng lặp ngay cả đối với tính toán tuần hoàn. Tôi không nói nó trong trường hợp của bạn, nhưng bạn phải kiểm tra trước khi tiến hành tối ưu hóa của riêng bạn. –