рдпрд░реНрдХ - рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдлреНрд▓реЛ-рдлреНрд░реЗрдорд╡рд░реНрдХ (рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ)



Reddit рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдмрд▓реНрдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реЗрдкрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпреЗрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( рдкреНрд░рд▓реЗрдЦрди , рдЬреАрдердм ) рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИред

рдореИрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбреЗрдЯрд╛рдлреНрд▓реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрд░реЗ (рдПрдХ рдЖрдпрд╛рдореА рд╕реЗ рддреАрди рдЖрдпрд╛рдореА) рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡реИрдХреНрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдЬрдЯрд┐рд▓ рдирдВрдмрд░ред рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд╡реИрдХреНрдЯрд░ рдХреЗ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЫрд╡рд┐рдпрд╛рдВред рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реАрдзреЗ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рджрд┐рд▓


рдлреНрд░реЗрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ - рд╕рд░рдгреА рдирд┐рд░реВрдкрдг ( UArray )ред рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ 2 рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


рддреАрди рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ:


рд░реЗрдкрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╛рд░ рдЗрд╕рдХреЗ рд╕рдорд╛рди рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░:


рдЙрджрд╛рд╣рд░рдг


рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рдорд┐рд╢реНрд░рдг рдореЗрдВ рд░реВрдкрд░реЗрдЦрд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдЖрдИрдУрдП рдореЛрдирдб рдореЗрдВ рдбреВрдм рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд▓реНрдХ рд╣реИред

рд╣рд▓реНрдХрд╛рдкрди рджреНрд╡рд╛рд░рд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХреА рдЧрдгрдирд╛ рд╕рдореАрдХрд░рдг рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ (рдКрдкрд░реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рдкрд╣рд▓рд╛ рддреАрд░)ред
 import Data.Yarr import Data.Yarr.Walk import Data.Yarr.Shape as S import Data.Yarr.Repr.Foreign ... computeHist :: UArray FS L Dim2 Float -> IO (UArray FL Dim1 Int) computeHist pixelValues = walkP caps (mutate (S.unrolledFill n8 noTouch) incHist) (newEmpty 256) joinHists pixelValues where incHist :: UArray FL Dim1 Int -> Float -> IO () incHist hist value = do let level = truncate (value * 255.99) c <- index hist level write hist level (c + 1) joinHists h1 h2 = do loadS S.fill (dzip2 (+) h1 h2) h1 return h1 


рдпрд╣ рдЖрд▓реЗрдЦ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ , рдкреНрд░рд╛рд░рдВрдн рдХреА рдПрдХ рдХрд┐рд╕реНрдо рд╕реЗ рдиреНрдпреВрдирддрдо рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдорд╛рдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдорд╛рдк рдХреА рдЗрдХрд╛рдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░ рд╣реИред рдпрд░ рд╕рдВрд╕реНрдХрд░рдг 1.2.3, рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдиреНрдпрд╛рд╕ , рд╕рд╛рдорд╛рдиреНрдп рдореЗрдХрдлрд╛рдЗрд▓ , рдкрд░реАрдХреНрд╖рдг рдЫрд╡рд┐ (2560 ├Ч 1600, 6 рдПрдордмреА) рд╣реИред


рдПрдХ рдЪрд┐рдХрдиреА рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдЫрд╡рд┐ рд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдврд╛рд▓ рдХреА рджрд┐рд╢рд╛ рдФрд░ рд╢рдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ (рд╢реАрд░реНрд╖ рдЪрд┐рддреНрд░ рдореЗрдВ рджреВрд╕рд░рд╛ рддреАрд░)ред
GradientMagOrient рдлрд╝рдВрдХреНрд╢рди, рдХреЛрдб рд╕реНрдХреНрд░реАрди
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд╣реИрдВ рдХрд┐ рдкреВрд░реЗ рдкрд░ рдпреЗрд░ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
 {-# LANGUAGE QuasiQuotes #-} ... import Data.Yarr.Convolution ... noOrient = 0 :: Word8 posDiag = 64 :: Word8 vert = 128 :: Word8 negDiag = 192 :: Word8 horiz = 255 :: Word8 gradientMagOrient :: Word8 -> UArray FL Dim2 Float -> FImage (VecTuple N2 Word8) -> IO () gradientMagOrient !threshLow image target = loadP S.fill caps delayedMagOrient target where delayedMagOrient = dzip2 magnitudeAndOrient gradientX gradientY -- Sobel-X operator application gradientX = dConvolveLinearDim2WithStaticStencil [dim2St| -1 0 1 -2 0 2 -1 0 1 |] image -- Sobel-Y gradientY = dConvolveLinearDim2WithStaticStencil [dim2St| 1 2 1 0 0 0 -1 -2 -1 |] image magnitudeAndOrient :: Float -> Float -> VecTuple N2 Word8 magnitudeAndOrient gX gY = VT_2 (mag, if mag < threshLow then noOrient else orient gX gY) where mag = floatToWord8 $ sqrt (gX * gX + gY * gY) orient :: Float -> Float -> Word8 orient gX gY | atan_1q < 0.33 = horiz | atan_1q > 0.66 = vert | otherwise = posDiag + diagInv where rr = gY / gX (r, diagInv) = if rr < 0 then (negate rr, negDiag - posDiag) else (rr, 0) -- 2nd order Taylor series of atan, -- see http://stackoverflow.com/a/14101194/648955 br = 0.596227 * r num = br + (r * r) atan_1q = num / (1.0 + br + num) 




рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрд░ рдФрд░ рдУрдкрдирд╕реАрд╡реА рдкрд░ рдмреЙрд░реНрдбрд░ рдбрд┐рдЯреЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛, рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред Yarr рдХреЛрдб, OpenCV рдХреЛрдб ред OpenCV рдПрдХрд▓ рдЫрд╡рд┐ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖: рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рд╕реАрдорд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдУрдкрдирд╕реАрд╡реА (рдпрджрд┐ рдЖрдк рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рддрд┐рддрд░ рдмрд┐рддрд░ рдХрд░рддреЗ рд╣реИрдВ) рдкрд░ рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдкрд░, рдЧреАрдЧрд╛рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ, рдлреЛрдЯреЛ - рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рддреЗрдЬреА рд╕реЗред

рдореВрд▓реНрдпрд╡рд╛рди рдЕрдиреБрдХреВрд▓рди


рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЖрдк рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдкрд╣рд▓рд╛ рддрд░реНрдХ caps : walkP , loadP ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХреЛрд░ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп "рдЬрд╛рджреВ" рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рддреНрд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред caps getNumCapabilities рд▓рд┐рдП getNumCapabilities , рдорд╛рдирдХ Control.Concurrent рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рдиред caps рдмрдЬрд╛рдп caps рдЖрдк рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, (threads 2) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг

рдпрджрд┐ рддрддреНрд╡ рдкрд░ рдЧрдгрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рд▓рдХреНрд╖реНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рд╡рд┐рд╕реНрддреГрдд рд╣реИ, рддреЛ рдЖрдк рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг computeHist рдлрд╝рдВрдХреНрд╢рди рдХреА 1 рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реИ (рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдЧрдгрдирд╛ 8 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рд╣реИ)ред рдЕрдиреНрдп рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди, рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ (рдкреИрдорд╛рдирд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓рдШреБрдЧрдгрдХ рд╣реИ):

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреИрдирд╛рддреА рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рдЧрднрдЧ рддреАрди рдмрд╛рд░ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ 3 рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реИрдВред рд▓рдВрдмреЗ рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рд╕рд╛рде, рд╡реЗ рдкреВрд░реА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдмрд┐рдирд╛, 3 рдореЗрдВ рд╕реЗ 2 рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИрдВред

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

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрдм рд╡реИрдХреНрдЯрд░ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рд░рдгрд┐рдпреЛрдВ, рдпрджрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдВрдХрдЧрдгрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рднреА рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдпрд╣ рдПрдХ 5 ├Ч 5 рдХреЛрд░ ( blur.hs ) рдХреЗ рд╕рд╛рде рдПрдХ рд░рдВрдЧреАрди рдЫрд╡рд┐ рдХреЗ рдЧреЙрд╕рд┐рдпрди рдЪреМрд░рд╕рд╛рдИ рдХреЗ рд╕рд╛рде 15% рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рджреЗрддрд╛ рд╣реИред рдЧрдгрдирд╛ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдШрдЯрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ -Slices- рдпрд╛ -SlicesSeparate- ред

рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдХрдирд╡рд▓реНрд╢рди рдХреИрд▓рдХреБрд▓реЗрд╢рди рдХреЗ 2 рдбреА рд░реЛрд▓-рдЕрдк

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 3 ├Ч 3 рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдЫрд╡рд┐ рдХреЗ рдЧреМрд╕рд┐рдпрди рд╕реНрдореВрджреА рдХреЛ рд▓реЗрдВ:



рдпрджрд┐ рд╣рдо рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ 4 рдкрдбрд╝реЛрд╕реА рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреЛрд╣рд░рд╛рдпрд╛ рд░реАрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдореВрд▓ рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рди рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдХреЛрдИ рд▓реЗрдЦрди рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ) рдФрд░ рдмрд╛рдж рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



рдКрдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рддреАрд╡реНрд░рддрд╛ рдХреА рдореВрд▓ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ, рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (y = 2, x = 2), (2, 3), (3, 2) рдФрд░ (3) рдореЗрдВ рдЪрд┐рдХрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓, рдиреАрд▓рд╛, рдкреАрд▓рд╛ рдФрд░ рд╣рд░рд╛ рдЖрдпрддрд╛рдХрд╛рд░ рдЧреБрдард▓реА рд╣реИред 3) рдХреНрд░рдорд╢рдГред рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЧреБрдгрдХ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред

рдпрджрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВ, рддреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо 36 рдХреЗ рдмрдЬрд╛рдп 16 рд░реАрдб рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдРрд╕реА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ - рдЬреАрд╡реАрдПрди (рдЧреНрд▓реЛрдмрд▓ рд╡реИрд▓реНрдпреВ рдирдВрдмрд░рд┐рдВрдЧ) рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ 2 рдЕрдиреБрдХреНрд░рдорд┐рддреЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред рддреИрдирд╛рддреА рдЪрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреМрд░рд╕рд╛рдИ рдХреА рдЧрддрд┐:

рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рджреЛрдиреЛрдВ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬреНрдб рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, dim2BlockFill ред

рдХрдорд┐рдпреЛрдВ


рд▓реВрдк рд╡реЗрдХреНрдЯрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде, рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рджреЗ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред LLVM 3.3 рдиреЗ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рд╣реИ , рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдХреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдФрд░ рднреА рддреЗрдЬ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреАрдПрдЪрд╕реА 7.6.1 рдХрд╛ рд╕реНрдерд┐рд░ рдмреИрдХрдПрдВрдб рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.1 рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдЯреНрд░реАрдо рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд░реЗрдкрд╛ 4 (рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг) рдореЗрдВ рд╣реЛрдЧреАред рдпрд╣ рдпреЗрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдкрдХреНрд╖ рдХреЛ рдХрд╕рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмреЗрди рд▓рд┐рдкрд┐рдореАрдпрд░ рднреА рд░реЗрдкрд╛ 3 рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА :)


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рджрд░реНрд╢рди / рд╕рдВрдпреЛрдЬрди рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдореИрдкреНрд╕, рдЬрд╝рд┐рдкреНрд╕) рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛ рдПрдХ рд╕рд░рдгреА рдХреЛ рдирд┐рд╣рд┐рдд рд╕реЗ рд╕реНрдкрд╖реНрдЯ ( Load ) рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд░рд▓ рд░реВрдк рд╕реЗ, рдореИрдкрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 1 рдкреИрд░рд╛рдореАрдЯрд░ рдореВрд▓ рд╕рд░рдгреА рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд╣рд┐рдд рд╕рд░рдгреА рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЧрдгрдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 1 рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдирдкреБрдЯ рдирд┐рд╣рд┐рдд рд╕рд░рдгреА рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ рдкрд░рд┐рдгрд╛рдореА рдЧрдгрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╕рд░рдгреА рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдирддреАрдЬрддрди, рдЬрдм рдирд┐рд╣рд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдореИрдкрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд" рд╕реНрдкрд╖реНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдЧрдгрдирд╛ рдореЗрдВ, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЬреНрдЮрд╛рди рдЖрдкрдХреЛ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдбреНрдпреВрд▓ рдкреНрд░реЗрд╖рдг рд╣реИред рд╡рд┐рд╖рдп рдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдпрд╣ рдЕрдзрд┐рдХрддрд░ рдиреЛрдЯ рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдЬреАрдПрдЪрд╕реА рд╕реБрд╕реНрддреА рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ ред

рдЕрдирдлреЙрд▓реЛ рдХрд┐рдП рдЧрдП рд▓реВрдк рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, unrolledFill , рдПрдХ рдирдВрдмрд░ рдХреЛ рдЕрдирдлреЙрд▓реЛ рдХрд░рдиреЗ рдХреЗ рдХрджрдо рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг ( Int ), рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реНрддрд░ рддрдХ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ред computeHist рдлрд╝рдВрдХреНрд╢рди (рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ) рдореЗрдВ, N8 рдкреНрд░рдХрд╛рд░ N8 рдХрд╛ рдПрдХ рдореВрд▓реНрдп рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд-рд╡реЗрдХреНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ Arity рд╡рд░реНрдЧ рдХрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░реВрдкрд░реЗрдЦрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

unrolledFill рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдПрд░рд┐рдЯреА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрдирддрд╛ рд╣реИ ред рдЬреАрдПрдЪрд╕реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдкрд╛рдЯ рдЕрдиреБрдХреНрд░рдо рд░рд╣рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдмрд╕ рдЦреБрд▓рд╛рд╕рд╛ред рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, GHC рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбрдмрд▓ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╡реИрдХреНрдЯрд░ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдлрд╝рдВрдХреНрд╢рди dim2BlockFill рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ !

рдбрд┐рдЬрд╝рд╛рдЗрди


рдПрдХ рдврд╛рдВрдЪрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдард┐рди рдмрд╛рдд рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдерд╛ред рд╕реНрд╡-рд╡рд┐рдбрдВрдмрдирд╛ рдХреЗ рдЖрдБрд╕реВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдореЗрд░реЗ рдиреЛрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ 8 рдмрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ред рдЕрдВрд╢ рдмрд╣ рдЧрдП, рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рд╕реНрдлреБрдЯрд┐рдд рд╣реБрдЖ, рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдиреЗ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдпрд╛ рдЬреАрдПрдЪрд╕реА рдЕрдиреБрдХреВрд▓рдХ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдФрд░ рд╢реБрд░реБрдЖрдд рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

рдкрд╣рд▓реЗ 3-4 рджреГрд╖реНрдЯрд┐рдХреЛрдг рд░реЗрдкрд╛ рдХреЛ рдШрдЯрдХ-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдереЗред рдЬрдм рдореБрдЭреЗ рдЕрдВрддрддрдГ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рддреЛ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реЗрдкрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рджреВрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рд╢реЗрд╖ "рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ" рдиреЗ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд░реЗрдкрд╛ рдХреЗ рдХрд░реАрдм рд▓рд╛рдпрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдмрд╛рд╣рд░ рд╕реЗ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рд░реАрдкрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдпрд╣ рдордЬреЗрджрд╛рд░ рд╣реИ рдХрд┐ рдЕрд▓реЗрдХреНрд╕рдИ рдЦреБрджрд╛рдпрд╛рдХреЛрд╡ рдиреЗ рдлрд┐рдХреНрд╕реНрдб-рд╡реЗрдХреНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдирд╡рдВрдмрд░ рдореЗрдВ рд╣реА рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛, рдпрд╛рдиреА 2 рдорд╣реАрдиреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдореИрдВрдиреЗ рдХрд░реНрд╕рд░ рдХреА рдереАрдо рд▓реА)ред рд▓реЗрдХрд┐рди рджрд┐рд╕рдВрдмрд░ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдмрд╣реБрдд рдЕрдВрддрд░ рдХреЗ рдмрд┐рдирд╛ рдирд┐рдХрд▓рд╛ред рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ :)

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


All Articles