Xxhash: 32-рдмрд┐рдЯ рдПрдЖрд░рдПрдо рдмрд╣реБрдд рдзреАрдореА xxhash

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдорд╛рд░реНрдЪ 2021  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Cyan4973/xxHash

рдЬреАрд╕реАрд╕реА 4.8.5 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдФрд░ рджреЛрд╣рд░реЗ рдХреЛрд░ 32-рдмрд┐рдЯ рдПрдЖрд░рдПрдо рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдП 9 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╕рднреА xxhash рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрд╣реБрдд рдзреАрдореЗ рд╣реИрдВ рдФрд░ рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ crc32 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рджреЗрд╡ рдФрд░ v0.8.0 рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдирд┐рдпреЙрди рдкрде рд╕рдХреНрд░рд┐рдп рд╣реИред

рдПрд▓рдПрд╕рд╕реАрдкреАрдпреВ:
рдЭрдВрдбреЗ: рд╣рд╛рдл рдердВрдм рдлрд╛рд╕реНрдЯрдорд▓реНрдЯреА vfp edsp рдирд┐рдпреЙрди vfpv3 tls vfpd32

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 32-рдмрд┐рдЯ рдПрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рдЗрди рдХреЛрдбреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рдХ рдЕрдиреБрдХреВрд▓рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрди рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, xxhashes рдХреА рдЧрдгрдирд╛ (рддреЗрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ) рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдзрдиреНрдпрд╡рд╛рдж @ Cyan4973 рдФрд░ @ easyaspi314ред

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

32-рдмрд┐рдЯ рдПрдЖрд░рдПрдо рдкрд░ gcc рд╕рд╛рде рдПрдХ рд╢рд╛рд╕реНрддреНрд░реАрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐
рдпрд╣ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рд╕реАрдкреАрдпреВ рдХреА рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╢реЛрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
(рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ A9 рд╕рдХреНрд╖рдо рд╣реИ)
рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд╣реБрдд рдзреАрдореА рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рд╣реЛрддреА рд╣реИред

рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдЖрдЬрдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдУрд░, рдХрдИ рдкрд╣реБрдБрдЪ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВ:
https://github.com/Cyan4973/xxHash/blob/dev/xxhash.h#L1117

рд╕рдмрд╕реЗ рдЖрдХреНрд░рд╛рдордХ XXH_FORCE_MEMORY_ACCESS=2 ред
рдпрд╣ рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрд▓рдд рдмрд╛рдЗрдирд░реА рдкреАрдврд╝реА рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЖрднрд╛рд╕ рджреЗрдЧрд╛ рдХрд┐ рдЧрддрд┐ рдХреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдереЛрдбрд╝рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд, XXH_FORCE_MEMORY_ACCESS=1 рд╕рд╣реА рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реАрдкреАрдпреВ рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХрд▓рди рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -march=armv7a gcc рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд░реНрдо рдЪрд┐рдк рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдореЗрдореЛрд░реА рдкрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ,
рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк XXH_FORCE_MEMORY_ACCESS=1 рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рд╣реБрдЖред
(рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЧреЙрдбрдмреЛрд▓реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ XXH_FORCE_MEMORY_ACCESS=0 рдЬреБрдбрд╝рд╛ рдпрд╣ рдзреНрд╡рдЬ рдЕрднреА рднреА gcc рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдирдП рд╕рдВрд╕реНрдХрд░рдг gcc-6 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ)ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди clang рднреА рд╣рд╛рде рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдкрд░
рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ XXH_FORCE_ALIGN_CHECK=1 (https://github.com/Cyan4973/xxHash/blob/dev/xxhash.h#L1179),
рд╕рдВрд░реЗрдЦрд┐рдд рдЗрдирдкреБрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ ( XXH32 рд▓рд┐рдП 4 рдмрд╛рдЗрдЯреНрд╕ рд╕реАрдорд╛рдУрдВ рдкрд░)
рд╕реАрдзреЗ рд╕рдВрд░реЗрдЦрд┐рдд рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреЛрдб рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП,
рдЪреВрдВрдХрд┐ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдардмрдВрдзрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

XXH64 32-рдмрд┐рдЯ arm рдкрд░ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди XXH32 рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирдпрд╛ XXH3 рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдкрд░ рд╣реИ, рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдареАрдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП,
рдФрд░ neon рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде, рдпрд╣ рдЧрддрд┐ рдореЗрдВ XXH32 рдХреЛ рдорд╛рдд рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

_edit_ : рдлрд┐рдХреНрд╕реНрдб рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рд╡реИрд▓реНрдпреВ, рдЬреИрд╕рд╛ рдХрд┐ @ easyaspi314 . рджреНрд╡рд╛рд░рд╛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ рдЙрд╕ рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рдЭрдВрдбреЗ рдпрд╣ рд╣реЛрдВрдЧреЗ:

-O2   -fomit-frame-pointer -march=armv7-a      -mfpu=neon     -mthumb        -munaligned-access
^duh  ^saves a register    ^sets arch version  ^enables neon  ^use thumb-2   ^force enable unaligned access

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╛рди рдиреЗ рдХрд╣рд╛, рдореИрдВ рдХреНрд▓реИрдВрдЧ рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдиреАрдпрди рдХреЗ рд╕рд╛рдеред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдПрдХ рдирдпрд╛ GCC рд╕рдВрд╕реНрдХрд░рдг рдЖрдЬрд╝рдорд╛рдпрд╛?, GCC рдХреЗ ARM рдФрд░ AArch64 рдмреИрдХрдПрдВрдб рдФрд╕рдд рджрд░реНрдЬреЗ рдХреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╣рд╛рд▓ рддрдХ рдмрд╣реБрдд рдЦрд░рд╛рдм рдерд╛ред

@ Cyan4973 btw, XXH_FORCE_MEMORY_ACCESS=3 рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, 2 рдмреБрд░рд╛рдИ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рдХ рдЕрдиреБрдХреВрд▓рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрди рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, xxhashes рдХреА рдЧрдгрдирд╛ (рддреЗрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ) рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдзрдиреНрдпрд╡рд╛рдж @ Cyan4973 рдФрд░ @ easyaspi314ред

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

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

devnoname120 picture devnoname120  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yassinm picture yassinm  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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