Xxhash: crc32 . рдХреЗ рд╕рд╛рде рдЧрддрд┐ рддреБрд▓рдирд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Cyan4973/xxHash

рдпрджрд┐ рдЖрдк рдиреЗрд╣рд▓реЗрдо (рдПрд╕рдПрд╕рдИ 4.2) рдХреЗ рдмрд╛рдж рд╕реЗ рдЙрдкрд▓рдмреНрдз crc32 рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рддрд┐ 8 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ 1.17 рдЪрдХреНрд░реЛрдВ рдХрд╛ рдереНрд░реВрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрджрд░реНрд╢рд╡рд╛рджреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ 3ghz рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ 20.5 GB/s рдХрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛ред рд╕реНрд░реЛрдд: http://www.drdobbs.com/parallel/fast-parallelized-crc-computation-using/229401411?pgno=2

рдереЛрдбрд╝рд╛ рдЧреБрдЧрд▓ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ SO рдкреНрд░рд╢реНрди рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ, рдЬреЛ 20GB/s рдереНрд░реВрдкреБрдЯ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ: http://stackoverflow.com/questions/17645167/implementing-sse-4-2s-crc32c-in- рд╕реЙрдлреНрдЯрд╡реЗрдпрд░

рдХреНрдпрд╛ рдЖрдк рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ crc32 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ xxhash рдХреА рддреБрд▓рдирд╛ рдореЗрдВ ~ 3x рддреЗрдЬ рд╣реИ? рдпрд╣ рдХрд╣рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЪреЗрдХрд╕рдо рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░рдХреГрдд xxhash рдмрдирд╛рдо crc32 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реАрдЖрд░рд╕реА 32 рдХреЗ рдХрд░реАрдм рдирд╣реАрдВ рдЖ рд╕рдХрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдзрдиреНрдпрд╡рд╛рдж!
рдмрд╛рдЗрдирд░реА 64 рдмрд┐рдЯ рд╣реИрдВред
XXH3_64bit рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдиреАрдпрди рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдореБрдЭреЗ 3.9GB/s рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ NEON рдХреЗ рд╕рд╛рде 4.0 GB/s рдХреЗ рдХрд░реАрдм рд╣реИред рдЕрднреА рднреА vmull_p64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ CRC32 рдореЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдереНрд░реВрдкреБрдЯ рд╣реИред

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ,
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрд░ 2 рдбреБрдУ @3GHz рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ CPU рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ crc32c рдХреЛ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, crc32 рдФрд░ crc32c рд╕рдорд╛рди рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ: рдЖрдкрдХреЛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗред
рд╕реАрдЖрд░рд╕реА 32 рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реАрдЖрд░рд╕реА 32 рд╕реА рдмрд╣реБрдд рдХрдо рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдордХрд░рдг рднреНрд░рдо рдЧреИрд░-рддреБрдЪреНрдЫ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ crc32 рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдореИрд╢рд░ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╡рд╛рд▓реЗ рд╕рд╣рд┐рдд рддреЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдореМрдЬреВрдж рд╣реИрдВред
рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реАрдкреАрдпреВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ (рдЬреЛ 2016 рдореЗрдВ рдЙрдЪрд┐рдд рд╣реИ), рддреЛ рдЖрдк рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реАрдЖрд░рд╕реА 32 рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред

xxHash рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реАрдкреАрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдФрд░ рдЕрдзрд┐рдХрддрдо рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдЗрдЪреНрдЫрд┐рдд рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде, рдЗрдВрдЯреЗрд▓ рдХреЗ рджрд╛рдпрд░реЗ (рд╣рд╛рде, рдорд┐рдкреНрд╕, рдкрд╛рд╡рд░, рдЖрджрд┐) рд╕реЗ рдкрд░реЗред рдЗрд╕рд▓рд┐рдП рдмреНрд░рд╛рдВрдб-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИред

@ рд╕рд┐рдпрд╛рди4973
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрд░ рд╕реЗ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрдпрд╛ рдЖрдк crc32c рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирдП XXH3 рдкрд░ рдХреБрдЫ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ crc32c рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ crc32 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ, рдпрд╣ ILP рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ crc32c рдЪреИрдирд▓ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдЯреАрдХ рдкрд░рд┐рдгрд╛рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдирд┐рд░реНрднрд░ рд╣реИред рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓реЗ рд╣реИрдВ рдЬреЛ XXH64 рдЧрддрд┐ рдХреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреЛрдИ рднреА XXH3 рд╕рд░реНрд╡реЛрддреНрддрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреА рдмрд╛рдд рд╣реИред

CRC32 рдФрд░ CRC32C рдХреЛ рдЗрдВрдЯреЗрд▓ рдХреЗ pclmulqdq рдпрд╛ ARMv8 CLMUL рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ CRC32 рдФрд░ CLMUL рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ ARM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдерд╛ рдФрд░ рдЙрдирдХреА рдЧрддрд┐ rk3399 рдкрд░ 4.1GB/s рдХреЗ рдЖрд╕рдкрд╛рд╕ рддреИрд░ рд░рд╣реА рд╣реИред рдЕрдм рдореИрдВрдиреЗ рдЙрдирдХреА рддреБрд▓рдирд╛ xxh32 рдФрд░ xxh64 рд╕реЗ рдХреА рдФрд░ рдХреНрд░рдорд╢рдГ 3.5GB/s рдФрд░ 2.5GB/s рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ xxh64 ARMv8 рдкрд░ xxh32 рд╕реЗ рдзреАрдорд╛ рд╣реИ, рдпрд╛ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ?

рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ 32-рдмрд┐рдЯ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкрд░ xxh64 xxh32 рд╕реЗ рдзреАрдорд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, 64-рдмрд┐рдЯ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкрд░, рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЕрднреА рднреА рдПрдХ рдЪрд┐рдк рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдордЬреЛрд░/рдзреАрдореА 64-рдмрд┐рдЯ рдорд▓реНрдЯреАрдкреНрд▓рд╛рдИ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ, рдЬреЛ 32-рдмрд┐рдЯ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдореА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЪрд┐рдкреНрд╕ рдХрд╛ ARMv8 рдкрд░рд┐рд╡рд╛рд░ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд┐рдк рдореЗрдВ рдмрд╣реБрдд рдЕрд▓рдЧ рдкреНрд░рджрд░реНрд╢рди рдЯреНрд░реЗрдб-рдСрдл рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдХрд╣реАрдВ рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдирд┐рдпрдо рдирд╣реАрдВ рдмрдирд╛рдКрдВрдЧрд╛ред

ARM рдкрд░ рддреЗрдЬрд╝ 64-рдмрд┐рдЯ рд╣реИрд╢ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реБрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирдП XXH3_64bit() рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!
рдмрд╛рдЗрдирд░реА 64 рдмрд┐рдЯ рд╣реИрдВред
XXH3_64bit рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдиреАрдпрди рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдореБрдЭреЗ 3.9GB/s рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ NEON рдХреЗ рд╕рд╛рде 4.0 GB/s рдХреЗ рдХрд░реАрдм рд╣реИред рдЕрднреА рднреА vmull_p64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ CRC32 рдореЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдереНрд░реВрдкреБрдЯ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

easyaspi314 picture easyaspi314  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jvriezen picture jvriezen  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vp1981 picture vp1981  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gitmko0 picture gitmko0  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

shuffle2 picture shuffle2  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ