Android x86 рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди: рд╕рд┐рджреНрдз рддрд░реАрдХреЗ


рдХреЛрдИ рднреА рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдФрд░ рдЧреИрд░-рджреЗрд╢реА рднрд╛рд╖рд╛рдУрдВ (рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛ рдпрд╛ рдПрдЪрдЯреАрдПрдордПрд▓ 5) рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдВрддрддрдГ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдореВрд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреБрдХреВрд▓рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдЬреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдФрд░ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (рд╕реНрдорд╛рд░реНрдЯрдлрд╝реЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ) рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯреЗрд▓ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдЯрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ SSSE3 рд╕реНрддрд░ рдХрд╛ рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╣рд╛рдЗрдкрд░рдЯреНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 2 рдХреЛрд░ рд╣реЛрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдПрдХ рд╕рдВрдХреЗрдд рдорд╛рдиреЗрдВ :) рдЬреЛ рд▓реЛрдЧ рд╕рдВрдХреЗрдд рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рдХрдЯ рдХреЗ рддрд╣рдд рдПрдХ рдЗрдЬрд╝рд░рд╛рдЗрд▓реА рдХрдВрдкрдиреА рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИред iOnRoad - iOnRoadред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди

iOnRoad рдПрдХ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдРрдк рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбреНрд░рд╛рдЗрд╡ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЬреАрдкреАрдПрд╕, рд╕реЗрдВрд╕рд░ рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдХреИрдорд░рд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдзреБрдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓реЗрди рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рдХрд╛рд░реЛрдВ рдФрд░ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЯрдХреНрдХрд░ред рдЖрд╡реЗрджрди рдмреЗрд╣рдж рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ (рдПрдХ рдорд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб!), рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреБрд░рд╕реНрдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдХрдорд┐рдпрд╛рдВ рдереАрдВ:
1. рдкрдбрд╝реЛрд╕реА рдХрд╛рд░реЛрдВ рдФрд░ рд╕реБрдВрджрд░ рд▓рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдирд╢реЗ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдереА рдпрд╛рддреНрд░рд┐рдпреЛрдВ рдХреЛ рднреА рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рдбрд╝рдХ рдкрд░ рдЕрдкрдиреА рдХрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
2. рдЗрд╕рдореЗрдВ рдмрд┐рдЬрд▓реА рдХреА рдЦрдкрдд рд╕рд╣рд┐рдд рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЛ 30-40 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдмрд┐рдЬрд▓реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рджреМрд░рд╛рди рдмреИрдЯрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрддреНрдо рд╣реЛ рдЧрдИ рдереАред

рдлрд┐рд▓рд╣рд╛рд▓, рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рдореА рд╣реИред рдкрд╣рд▓рд╛ рд╡рд╛рд▓рд╛ред

рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рдХреИрдорд░реЗ рд╕реЗ YUV420 / NV21 рдкреНрд░рд╛рд░реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд рдлреНрд░реЗрдо рдХреЛ RGB рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ 40% рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдЧреЗ рдХреА рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрддреНрдХрд╛рд▓ рд▓рдЧ рд░рд╣реА рдереАред
рдПрдХрдорд╛рддреНрд░ рдореМрдЬреВрджрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╣рдореЗрдВ рдорд┐рд▓рд╛, рд╡рд╣ IPP рдкреИрдХреЗрдЬ ( рдЗрдВрдЯреЗрд▓ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯреЗрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ) рд╕реЗ YUV420ToRGB рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ iOnRoad рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдпреЛрдЬрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрд╣реБрдкрд░рдд рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

YUV420 / NV21 рд╕реЗ RGB рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди

YUV420 / NV21 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рддреАрди 8-рдмрд┐рдЯ рдШрдЯрдХ рд╣реИрдВ - рдЪрдордХ Y (рдХрд╛рд▓рд╛ рдФрд░ рд╕рдлреЗрдж) рдФрд░ рджреЛ рд░рдВрдЧ рдШрдЯрдХ U рдФрд░ Vред



рдорд╛рдирдХ рдЖрд░рдЬреАрдмреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЪрд╛рд░ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рддреАрди рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде), рд╡рд╛рдИ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд░ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХреЛрдВ рдпреВ рдФрд░ рд╡реА рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ, рдЗрд╕реА рдЪрддреБрд░реНрднреБрдЬ Y рдФрд░ рдЬреЛрдбрд╝реЗ U рдФрд░ V рдХреА рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реБрдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╛рд░реВрдк (рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ YUV рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) RGB рдкрд░ 2x рд╕рдВрдкреАрдбрд╝рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

YUV рдХреЛ RGB рдореЗрдВ рдмрджрд▓рдирд╛ - рдЯреЗрдмрд▓ (рд▓реБрдХ-рдЕрдк рдЯреЗрдмрд▓, LUT) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг

YUV рд╕реЗ RGB рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдПрдХ рд╕рд░рд▓ рд░реИрдЦрд┐рдХ рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, iOnRoad рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╕рд┐рджреНрдз рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдиреНрдирд┐рдХрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:



2 16 рд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреА рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИрдВред
рддрдерд╛рдХрдерд┐рдд рд▓реБрдХ-рдЕрдк рдЯреЗрдмрд▓ (LUTs) рдХрд╛ рдЙрдкрдпреЛрдЧ iOnRoad рдореЗрдВ рд╕реНрдХреЗрд▓рд░ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЪреВрдВрдХрд┐ рд╕рднреА рдШрдЯрдХ Y, U, рдФрд░ V 8-рдмрд┐рдЯ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╕реВрддреНрд░реЛрдВ рдореЗрдВ рдЧреБрдгрд╛ рдХреА рдЧрдгрдирд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ 32-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкрд╛рдВрдЪ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 256 рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдЯреЗрдмрд▓ред

YUV рдХреЛ RGB рдореЗрдВ рдмрджрд▓рдирд╛ - SSE рдлрд┐рдХреНрд╕реНрдб-рдкреЙрдЗрдВрдЯ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░

рдПрд╕рдПрд╕рдИ рдХреЗ рдкрд╛рд╕ рдПрд▓рдпреВрдЯреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВ; 16-рдмрд┐рдЯ рдкреИрдХреНрдб рдирдВрдмрд░реЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдЧреБрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреЗрд▓рд░ LUT рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдмрд╛рдж рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рддреЗрдЬ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рд░рд▓ 16-рдмрд┐рдЯ SSE рдЧреБрдгрди (PMULLW) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо 2 16 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред SSE рдХреЗ рдкрд╛рд╕ рдПрдХ PMULHRSW рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬреЛ рдкреВрд░реНрдг 16-рдмрд┐рдЯ рдЧреБрдгрди рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдФрд░ 32-рдмрд┐рдЯ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдХреА рд╕рд╣реА рд╢рд┐рдлреНрдЯ рдЖрд╡рд╢реНрдпрдХ 16-рдмрд┐рдЯ рдЧреЛрд▓рд╛рдИ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрдкрд░реЗрдВрдб рдХреЛ рдкрд╣рд▓реЗ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо 13-рдмрд┐рдЯ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд SSE рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп (рдЖрдВрддрд░рд┐рдХ)

рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ SSE рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЬреНрдЮрд╛рдд C / C ++ рдХрдВрдкрд╛рдЗрд▓рд░ (MS, GNU, Intel) рдореЗрдВ рд╡рд┐рд╢реЗрд╖ APIs рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдХрд╣рддреЗ рд╣реИрдВред
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд┐рдпрдорд┐рдд C / C ++ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрд╕рдПрд╕рдИ рдХреЗ рдПрдХ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЖрд╡рд░рдг рд╣реИ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдХреЗрддрдХ рдкрд░ рдЕрдкрдиреА рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЬрдЧрд╣ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд PMULHRSW рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, C рдХреЛрдб рдореЗрдВ рд╣рдордиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди _mm_mulhrs_epi16 () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ SSE рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрд╡рд╢реНрдпрдХ SSE рдХреЛрдб рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХреЗред

YUV рдЯреВ RGB рдкрд░рд┐рд╡рд░реНрддрди - SSE рдлрд┐рдХреНрд╕реНрдб рдкреЙрдЗрдВрдЯ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдкреНрд░рдХреНрд░рд┐рдпрд╛ 16 8-рдмрд┐рдЯ рд╡рд╛рдИ рдФрд░ 8 8-рдмрд┐рдЯ рдЬреЛрдбрд╝реЗ (рдпреВ, рд╡реА) рдХреЗ 2 рд╕рд░реНрд╡рд┐рдВрдЧреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
рдирддреАрдЬрддрди, рдпрд╣ рдбреЗрдЯрд╛ 16 32-рдмрд┐рдЯ рдЖрд░рдЬреАрдмреА рдкрд┐рдХреНрд╕рд▓ (FRGB рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдм рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ 0xff рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдВрдЦреНрдпрд╛ 8 рдХреЛ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рд╕рд╛рде 8-рдмрд┐рдЯ рдШрдЯрд╛рд╡ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 16 8-рдмрд┐рдЯ рд╡рд╛рдИ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
8 рдЬреЛрдбрд╝реЗ (рдпреВ, рд╡реА) рд╡рд╛рдИ рдХреЗ 16 рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде 2 рдкрдВрдХреНрддрд┐рдпреЛрдВ "рд╕реЗрд╡рд╛" рдХрд░рддреЗ рд╣реИрдВред
рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлреЗрд░рдмрджрд▓ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ 2 рд╕рд░реНрд╡рд┐рдВрдЧреНрд╕:

рдиреАрдЪреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЖрд░реЗрдЦ рд╣реИред



рдпреВ рдФрд░ рд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, 16-рдмрд┐рдЯ _mm_sub_epi16 () рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 128 рдХреЛ рдЙрдирд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдШрдЯрд╛рд╡ рдХреЗ рдмрд╛рдж, рд╡рд╛рдИ, рдпреВ рдФрд░ рд╡реА рдХреЗ рд╕рднреА 8 16-рдмрд┐рдЯ рдорд╛рди _mm_mulhrs_epi16 () рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреИрдХ рдХрд┐рдП рдЧрдП рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдиреЛрдЯ: рдЗрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгреЛрдВ (рдШрдЯрд╛рд╡ рдФрд░ рдкрд╛рд░рд┐рдпреЛрдВ) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рд╕реНрдХреЗрд▓рд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ LUT рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЧреБрдгрди рдкрд░рд┐рдгрд╛рдо рдЕрдВрддрд┐рдо 16-рдмрд┐рдЯ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 0 рдФрд░ 2 13 -1 (8191) рдХреЗ рдмреАрдЪ рд╕реАрдорд┐рдд _mm_min_epi16 () рдФрд░ _mm_max_epi16 () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЖрд░, рдЬреА рдФрд░ рдмреА рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрдХ рдХрд┐рдП рдЧрдП 16-рдмрд┐рдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред
рдПрдлрдЖрд░рдЬреАрдмреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛ (рдЬрд╣рд╛рдВ рдПрдл рдЖрдИрдУрдПрдирд░реЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рднрд░рд╛ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд╣реИ) рдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдо 16-рдмрд┐рдЯ <0xff00> рд╕реЗ рднрд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ R, G, рдФрд░ B рдХреЗ 16-рдмрд┐рдЯ рдорд╛рдиреЛрдВ рдХреЛ 16-рдмрд┐рдЯ FR рдФрд░ GB рдореЗрдВ рд░реАрдкреИрдХреЗрдЬ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд░реАрдкреИрдХреЗрдЬрд┐рдВрдЧ рдЪрд░рдг рддрд╛рд░реНрдХрд┐рдХ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдкрд╛рд░рд┐рдпреЛрдВ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ OR / AND рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо FR рдФрд░ GB рдЕрдВрддрддрдГ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ _mm_unpacklo_epi16 () рдФрд░ _mm_unpackhi_epi16 () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FRGB рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:



рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЛрдб, рдЬреЛ рдПрд╕рдПрд╕рдИ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реЗрдХреНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ YUV рдХреЛ RGB рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ (LUT) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рд╕реНрдХреЗрд▓рд░ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4-рдЧреБрдирд╛ рддреНрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХреЗ рд▓рд┐рдП CILK + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рддреБрдЪреНрдЫ

рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдЯрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рдХреЛрд░ (рдХрдо рд╕реЗ рдХрдо рддрд╛рд░реНрдХрд┐рдХ рд╡рд╛рд▓реЗ - рдПрдЪрдЯреА) рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдЙрдирдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ CILK + C рдФрд░ C ++ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдкреНрд░рд╕рд┐рджреНрдз TBB рдХреЗрд╡рд▓ C ++ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!)ред рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдСрдкрд░реЗрдЯрд░ cilk_for (рдорд╛рдирдХ C / C ++ рднрд╛рд╖рд╛ рдХреЗ рдмрдЬрд╛рдп YUV рдХреЛ RGB рдХреЗ рдмрд╛рд╣рд░реА рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рджреЛрд╣рд░реЗ-рдХреЛрд░ рдХреНрд▓реЛрд╡рд░ рдЯреНрд░реЗрд▓ + рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рджреЛ рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
CILK + рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ SSE рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡реЗрдХреНрдЯрд░рдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ 8x рд╕рдордЧреНрд░ рддреНрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП CILK + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдРрд░реЗ рдиреЛрдЯреЗрд╢рди, рдлрдВрдХреНрд╢рди рдореИрдкрд┐рдВрдЧ, рдФрд░ рдХрдореА

CILK + рдореЗрдВ Array рд╕рдВрдХреЗрддрди рдирд╛рдордХ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ, рдЬреЛ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреА рджрдХреНрд╖рддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдПрд░реЗ рдиреЛрдЯреЗрд╢рди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд╕рдорд╛рди рдХреЛрдб рдХреЛ 128-рдмрд┐рдЯ рдПрдЯрдо, 256-рдмрд┐рдЯ рд╣рд╕рд╡реЗрд▓ рдФрд░ 512-рдмрд┐рдЯ рдПрдордЖрдИрд╕реА / рд╕реНрдХрд╛рдИрд▓реЗрдХ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЖрдВрддрд░рд┐рдХ рдПрд╕рдПрд╕рдИ / рдПрд╡реАрдПрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдХреЗ рд╡рд┐рдкрд░реАрдд : рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╕рд░рдгреА рд╕рдВрдХреЗрддрди рдЖрдкрдХреЛ рд╕рд░рдгреА рдХреЗ рддрдерд╛рдХрдерд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ (рдлрд╝рдВрдХреНрд╢рди рдореИрдкрд┐рдВрдЧ) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрдореА (рдпреЛрдЧ, рдЕрдзрд┐рдХрддрдо / рдиреНрдпреВрдирддрдо рдЦреЛрдЬ, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

CILK + рдРрд░реЗ рдиреЛрдЯреЗрд╢рди рдЙрджрд╛рд╣рд░рдг

рджреЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдЦреЗрдВред
рдЬрдЯрд┐рд▓ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЛрдб (рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛):



рдФрд░ CILK + рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рд╕рдВрдпреЛрдЬрди, рдЕрдиреБрднрд╛рдЧ рд╕рд░рдгреА рд╕рдВрдХреЗрддрди, рдлрд╝рдВрдХреНрд╢рди рдореИрдкрд┐рдВрдЧ рдФрд░ рдХрдЯреМрддреА рд╕реЗ рдорд┐рд▓рдХрд░:



рдпреЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди CILK + рд╕рдВрд╕реНрдХрд░рдг 6 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓

рдЖрдВрддрд░рд┐рдХ SSE рд╕реБрд╡рд┐рдзрд╛рдПрдБ (SSSE3 рд╕реНрддрд░) рдПрдЯрдо / рдЗрдВрдЯреЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИрдВред
CILK + рдПрд░реЗ рдиреЛрдЯреЗрд╢рди (рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
CILK + рдПрдЯрдо / рдЗрдВрдЯреЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИред
рдирдИ "рдПрдВрдбреНрд░реЙрдЗрдб" рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдЯрдо / рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢: SSE рдФрд░ CILK + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЧреЗрдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВ - рдпреЗ рд╕рд┐рджреНрдз рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЫрд▓рд╛рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ!

рдЧреНрд░рд┐рдЧреЛрд░реА рдбреИрдиреЛрд╡рд┐рдЪ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд, рд╡рд░рд┐рд╖реНрда рдПрдкреНрд▓рд╛рдЗрдб рд╕реЙрд▓реНрдпреВрд╢рди рдЗрдВрдЬреАрдирд┐рдпрд░, рдЗрдВрдЯреЗрд▓ рдЗрдЬрд╝рд░рд╛рдЗрд▓ред

Source: https://habr.com/ru/post/In202088/


All Articles