рдХрдиреНрд╡реЗрдВрд╢рди рд▓реЗрдпрд░: рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХ

рдкрд░рд┐рдЪрдп


рдпрд╣ рд▓реЗрдЦ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред
рд╕реАрдиреЗрдЯ рд╕реАрдкреАрдпреВ рдкрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╕рд╛рд░ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЗ рд╡рд┐рддрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдпрдГ рд╕рднреА рд╕рдордп рдХрд╛ 90% рд╕реЗ рдЕрдзрд┐рдХ рд╕рдЬрд╛рддреАрдп рдкрд░рддреЛрдВ рдореЗрдВ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рджреГрдврд╝ рдкрд░рдд рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд░рдд рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдХреЗрдд рдкреНрд░рд╕рд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдФрд░ рдореИрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рд╕рдмрд╕реЗ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд▓реЗрдЦ рди рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ (рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ), рдмрд▓реНрдХрд┐ рдкрд╛рдардХреЛрдВ рдХреЗ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рднреАред рдореИрдВ рдкреВрд░реА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХрд╛ рдХреЗрд╡рд▓ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдХрдиреНрд╡рд░реНрд╕реЗрд╢рди рд▓реЗрдпрд░ рдСрдкреНрд╢рди


рдореИрдВ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд░рдг рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ рд╡рд┐рднреЗрджреА рдкрд░рдд рдореЗрдВ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рдЖрдХрд╛рд░


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рджреГрдврд╝ рдкрд░рдд рдПрдХ рдЗрдирдкреБрдЯ рдФрд░ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ:

рдЫрд╡рд┐

  • srcC / dstC - рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рдореЗрдВ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдХреЗрддрди: C / D
  • srcH / dstH - рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рдХреА рдКрдВрдЪрд╛рдИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджрдирд╛рдо: рдПрдЪред
  • srcW / dstW - рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рдХреА рдЪреМрдбрд╝рд╛рдИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджрдирд╛рдо: рдбрдмреНрд▓реНрдпреВред
  • рдмреИрдЪ - рдЗрдирдкреБрдЯ (рдЖрдЙрдЯрдкреБрдЯ) рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ - рдкрд░рдд рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдкреВрд░реЗ рдмреИрдЪ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджрдирд╛рдо: рдПрдиред

рдХрдирд╡рд▓реНрд╢рди рдХреЛрд░ рд╕рд╛рдЗрдЬрд╝


рдХрдирд╡рд▓реНрд╢рди рдСрдкрд░реЗрд╢рди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЫрд╡рд┐ рдореЗрдВ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрдбрд╝реЛрд╕ рдХрд╛ рдПрдХ рднрд╛рд░рд┐рдд рдпреЛрдЧ рд╣реИред рдХрдирд╡рд▓реНрд╢рди рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ - рдЗрд╕ рдкрдбрд╝реЛрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдФрд░ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИ:

рдЫрд╡рд┐

  • рдХрд░реНрдиреЗрд▓ рдХреА рд▓рдВрдмрд╛рдИ рдХрдирд╡рд▓реНрд╢рди рдХрд░реНрдиреЗрд▓ рдХреА рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджрдирд╛рдо: Y.
  • рдХрд░реНрдиреЗрд▓рдПрдХреНрд╕ рдХрдиреНрд╡реЗрдХреНрд╢рди рдХреА рдХрд░реНрдиреЗрд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджрдирд╛рдо: X.

1x1 рдФрд░ 3x3 рдХреЗ рдХрд░реНрдиреЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЖрдо рджреГрдврд╝ рд╕рдВрдХрд▓реНрдкред рдЖрдХрд╛рд░ 5x5 рдФрд░ 7x7 рдмрд╣реБрдд рдХрдо рдЖрдо рд╣реИрдВред рдмрдбрд╝реЗ рдХрдирд╡рд▓реНрд╢рди рд╕рд╛рдЗрдЬрд╝, рд╕рд╛рде рд╣реА рд╕реНрдХреНрд╡рд╛рдпрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдХрдирд╡рд▓реНрд╢рди рднреА рдХрднреА-рдХрднреА рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рджреЗрд╢реА рд╣реИред

рдмрд╛рддрдЪреАрдд рдХрд╛ рдХрджрдо


рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ рдХрдирд╡рд▓реНрд╢рди рд╕реНрдЯреЗрдк рд╣реИ:

рдЫрд╡рд┐

  • strideY рд╡рд░реНрдЯрд┐рдХрд▓ рдХрдирд╡рд▓реНрд╢рдирд╢рди рд╕реНрдЯреЗрдк рд╣реИред
  • strideX - рдХреНрд╖реИрддрд┐рдЬ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХрджрдоред

рдпрджрд┐ рдЪрд░рдг 1x1 рд╕реЗ рднрд┐рдиреНрди рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - 2x2 , рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рдЖрдзреА рд╣реЛ рдЬрд╛рдПрдЧреА (рдХрдиреНрд╡реЗрдВрд╢рди рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рд╕рдорд╛рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкрдбрд╝реЛрд╕ рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреА)ред

рд╕реНрдЯреНрд░реЗрдЪрд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди


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

рдЫрд╡рд┐

  • dilationY - рдЕрдиреБрд▓рдВрдм рдЦрд┐рдВрдЪрд╛рд╡ рдХреЗ рдКрд░реНрдзреНрд╡рд╛рдзрд░ред
  • dilationX - рдЖрдХреНрд╖реЗрдк рдХрд╛ рдХреНрд╖реИрддрд┐рдЬ рдлреИрд▓рд╛рд╡ ред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ 1x1 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛рдлреА рджреБрд░реНрд▓рдн рд╣реИрдВ (рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд░рд┐рдпрд░ рдореЗрдВ рдХрднреА рднреА рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред

рдкреИрдбрд┐рдВрдЧ рдЗрдирдкреБрдЯ рдЫрд╡рд┐


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

рдЫрд╡рд┐

  • рдкреИрдбреА / рдкреИрдбрдПрдХреНрд╕ - рд╕рд╛рдордиреЗ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рдкреИрдбрд┐рдВрдЧред
  • рдкреИрдбрдПрдЪ / рдкреИрдбрдбрдмреНрд▓реНрдпреВ - рд░рд┐рдпрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рдкреИрдбрд┐рдВрдЧред

рдЪреИрдирд▓ рд╕рдореВрд╣


рдЖрдорддреМрд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓ рд╕рднреА рдЗрдирдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдореЗрдВ рд╕рдВрдХрд▓реНрдкреЛрдВ рдХрд╛ рдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдХреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рд╕рдореНтАНрдореЗрд▓рди рдХреЗрд╡рд▓ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЫрд╡рд┐

  • рд╕рдореВрд╣ - рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдореВрд╣ = 1 рдФрд░ рд╕рдореВрд╣ = srcC = dstC , рддрдерд╛рдХрдерд┐рдд рдбреЗрдкреНрдерд╡рд╛рдЗрдЬрд╝ рдХрдирд╡рд▓реНрд╢рди рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рд╕реНрдерд╛рдкрди рдФрд░ рд╕рдХреНрд░рд┐рдпрдг рдХрд╛рд░реНрдп


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

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

float relu(float value) { return value > 0 ? return value : 0; } void convolution(const float * src, int batch, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, int group, const float * weight, const float * bias, float * dst, int dstC) { int dstH = (srcH + padY + padH - (dilationY * (kernelY - 1) + 1)) / strideY + 1; int dstW = (srcW + padX + padW - (dilationX * (kernelX - 1) + 1)) / strideX + 1; for (int b = 0; b < batch; ++b) { for (int g = 0; g < group; ++g) { for (int dc = 0; dc < dstC / group; ++dc) { for (int dy = 0; dy < dstH; ++dy) { for (int dx = 0; dx < dstW; ++dx) { float sum = 0; for (int sc = 0; sc < srcC / group; ++sc) { for (int ky = 0; ky < kernelY; ky++) { for (int kx = 0; kx < kernelX; kx++) { int sy = dy * strideY + ky * dilationY - padY; int sx = dx * strideX + kx * dilationX - padX; if (sy >= 0 && sy < srcH && sx >= 0 && sx < srcW) sum += src[((b * srcC + sc)*srcH + sy)*srcW + sx] * weight[((dc * srcC / group + sc)*kernelY + ky)*kernelX + kx]; } } } dst[((b * dstC + dc)*dstH + dy)*dstW + dx] = relu(sum + bias[dc]); } } } } } } 

рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдореИрдВрдиреЗ рдорд╛рдирд╛ рдХрд┐ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ NCHW рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИ:

рдЫрд╡рд┐

рдХрдирд╡рд▓реНрд╢рди рд╡реЗрдЯ рдХреЛ DCYX рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рдПрдХреНрдЯрд┐рд╡реЗрд╢рди рдлрдВрдХреНрд╢рди ReLU рд╣реИ ред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдРрд╕реА рдзрд╛рд░рдгрд╛рдПрдВ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ - рдЖрдкрдХреЛ рдХреБрдЫ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 8 рдиреЗрд╕реНрдЯреЗрдб рдЪрдХреНрд░ рдФрд░ рдХреБрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ:

 batch * kernelY * kernelX * srcC * dstH * dstW * dstC / group * 2, 

рдЗрдирдкреБрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛:

 batch * srcC * srcH * srcW, 

рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐:

 batch * dstC * dstH * dstW, 

рдФрд░ рд╡рдЬрд╝рди рдХреА рд╕рдВрдЦреНрдпрд╛:

 kernelY * kernelX * srcC * dstC / group. 

рдпрджрд┐ рд╕рдореВрд╣ << srcC (рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИ), рд╕рд╛рде рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝реЗ рдорд╛рдкрджрдВрдбреЛрдВ srcC , srcH , srcW рдФрд░ dstC рдХреЗ рд╕рд╛рде , рд╣рдо рдПрдХ рд╢рд╛рд╕реНрддреНрд░реАрдп рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЧрдгрдирд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдСрдкрд░реЗрд╢рди рдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЖрд░рд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдореЗрдореЛрд░реА рдмреИрдВрдбрд╡рд┐рдбреНрде рдкрд░ред рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛


рдХрдирд╡рд▓реНрд╢рди рдореЗрдВ рдореБрдЦреНрдп рдСрдкрд░реЗрд╢рди рдПрдХ рднрд╛рд░рд┐рдд рд░рд╛рд╢рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд░ рд╕рдорд╛рди рд╣реИрдВред рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 void im2col(const float * src, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, float * buf) { int dstH = (srcH + padY + padH - (dilationY * (kernelY - 1) + 1)) / strideY + 1; int dstW = (srcW + padX + padW - (dilationX * (kernelX - 1) + 1)) / strideX + 1; for (int sc = 0; sc < srcC; ++sc) { for (int ky = 0; ky < kernelY; ky++) { for (int kx = 0; kx < kernelX; kx++) { for (int dy = 0; dy < dstH; ++dy) { for (int dx = 0; dx < dstW; ++dx) { int sy = dy * strideY + ky * dilationY - padY; int sx = dx * strideX + kx * dilationX - padX; if (sy >= 0 && sy < srcH && sx >= 0 && sx < srcW) *buf++ = src[((b * srcC + sc)*srcH + sy)*srcW + sx]; else *buf++ = 0; } } } } } } 

рдлрд┐рд░ рд╣рдо рдлреЙрд░реНрдореЗрдЯ srcC - srcH - srcW рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗред рд╣рдо srcC - рдХрд░реНрдиреЗрд▓ - рдХрд░реНрдиреЗрд▓ - dstH - dstW рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рддреНрд░ 1 рдФрд░ 3x3 рдХреЛрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдиреНрд╡реЗрдХреНрд╢рди рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЫрд╡рд┐ рдкрдбрд╝реЛрд╕ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБ рдкрд░рд┐рдгрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдирд╛рдо - im рдЙрдореНрд░ рд╕реЗ рд▓реЗрдХрд░ рдХреЛрд▓ рдкреВрд░реНрд╡ рдЫрд╛рддреНрд░реЛрдВ рддрдХ)ред

рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдХрд╛ рдирдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдореЗрдВ рд╕рдВрд▓рдХреНрд╖рдг рд╕рдВрдХреНрд░рд┐рдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдореЗрдВ рдХрдо рд╣реЛ рдЧрдИ рд╣реИ:

рдЫрд╡рд┐

рдЕрдм рдХрдиреНрд╡реЗрдВрд╢рди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 void gemm_nn(int M, int N, int K, float alpha, const float * A, int lda, float beta, const float * B, int ldb, float * C, int ldc) { for (int i = 0; i < M; ++i) { for (int j = 0; j < N; ++j) { C[i*ldc + j] = beta; for (int k = 0; k < K; ++k) C[i*ldc + j] += alpha * A[i*lda + k] * B[k*ldb + j]; } } } void convolution(const float * src, int batch, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, int group, const float * weight, const float * bias, float * dst, int dstC, float * buf) { int dstH = (srcH + padY + padH - (dilationY * (kernelY - 1) + 1)) / strideY + 1; int dstW = (srcW + padX + padW - (dilationX * (kernelX - 1) + 1)) / strideX + 1; int M = dstC / group; int N = dstH * dstW; int K = srcC * kernelY * kernelX / group; for (int b = 0; b < batch; ++b) { im2col(src, srcC, srcH, srcW, kernelY, kernelX, dilationY, dilationY, strideY, strideX, padY, padX, padH, padW, buf); for (int g = 0; g < group; ++g) gemm_nn(M, N, K, 1, weight + M * K * g, K, 0, buf + N * K * g, N, dst + M * N * g, N)); for (int i = 0; i < M; ++i) for (int j = 0; j < N; ++j) dst[i*N+ j] = relu(dst[i*N + j] + bias[i]); src += srcC*srcH*srcW; dst += dstC*dstH*dstW; } } 

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

NHWC рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

рдЫрд╡рд┐

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ NHWC рджреЗрд╢реА рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдкреНрд░рд╛рд░реВрдк рд╣реИред

рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП, рдХрдиреНрд╡реЗрдВрд╢рди рдСрдкрд░реЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреЛ рднреА рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд░реВрдк srcH - srcW - srcC рд╕реЗ рд╣рдо рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рдкреНрд░рд╛рд░реВрдк dstH - dstW - k рдЧрд┐рдиреЗрд▓реА - рдХрд░реНрдиреЗрд▓ - srcC рдореЗрдВ im2row рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ:

 void im2row(const float * src, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, int group, float * buf) { int dstH = (srcH + padY + padH - (dilationY * (kernelY - 1) + 1)) / strideY + 1; int dstW = (srcW + padX + padW - (dilationX * (kernelX - 1) + 1)) / strideX + 1; for (int g = 0; g < group; ++g) { for (int dy = 0; dy < dstH; ++dy) { for (int dx = 0; dx < dstW; ++dx) { for (int ky = 0; ky < kernelY; ky++) { for (int kx = 0; kx < kernelX; kx++) { int sy = dy * strideY + ky * dilationY - padY; int sx = dx * strideX + kx * dilationX - padX; for (int sc = 0; sc < srcC; ++sc) { if (sy >= 0 && sy < srcH && sx >= 0 && sx < srcW) *buf++ = src[(sy * srcW + sx)*srcC + sc]; else *buf++ = 0; } } } } } src += srcC / group; } } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдиреНрд╡реЗрдХреНрд╢рди рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЗрдореЗрдЬ рдкрдбрд╝реЛрд╕ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБ рдкрд░рд┐рдгрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдирд╛рдо - im рдЙрдореНрд░ рд╕реЗ рдкрдВрдХреНрддрд┐ s)ред рд╣рдореЗрдВ DCYX рдлреЙрд░реНрдореЗрдЯ рд╕реЗ рдХрдиреНрд╡рд░реНрдЬрди рд╕реНрдХреЗрд▓ рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдлреЙрд░реНрдореЗрдЯ рдХреЛ рднреА YXCD рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

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

 void convolution(const float * src, int batch, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, int group, const float * weight, const float * bias, float * dst, int dstC, float * buf) { int dstH = (srcH + padY + padH - (dilationY * (kernelY - 1) + 1)) / strideY + 1; int dstW = (srcW + padX + padW - (dilationX * (kernelX - 1) + 1)) / strideX + 1; int M = dstH * dstW; int N = dstC / group; int K = srcC * kernelY * kernelX / group; for (int b = 0; b < batch; ++b) { im2row(src, srcC, srcH, srcW, kernelY, kernelX, dilationY, dilationY, strideY, strideX, padY, padX, padH, padW, group, buf); for (int g = 0; g < group; ++g) gemm_nn(M, N, K, 1, buf + M * K * g, K * group, 0, weight + N * g, dstC, dst + N * g, dstC)); for (int i = 0; i < M; ++i) for (int j = 0; j < N; ++j) dst[i*N+ j] = relu(dst[i*N + j] + bias[i]); src += srcC*srcH*srcW; dst += dstC*dstH*dstW; } } 

рд╡рд┐рдзрд┐ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди


рд╢реБрд░реБрдЖрдд рд╕реЗ, рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

  • рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ: рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рддрд┐рд╢рдд рдХреА рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рд╣рдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЕрдзрд┐рдХрддрдо 80% рд╕реЗ рдЕрдзрд┐рдХ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред
  • рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдкрд░рддреЛрдВ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рд╣реИ (рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ!)ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдХреНрд╕рд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ) рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВред
  • рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЫрд╡рд┐ рдЯреЗрдирд░реНрд╕ рдХреЗ рдореБрдЦреНрдп рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдПрдирд╕реАрдПрдЪрдбрдмреНрд▓реНрдпреВ рдФрд░ рдПрдирдПрдЪрдбрдмреНрд▓реНрдпреВрд╕реА ред

рдЕрдм рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

  • рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рдирдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ M, N, K рдХреЗ рдорд╛рди рдХрд╛рдлреА рдмрдбрд╝реЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдкрд░рд┐рдорд╛рдг рдХреЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдХреНрд░рдо рд╣реИрдВ (рджрдХреНрд╖рддрд╛ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ ~ O (N ^ 3) рд╣реИ , рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдереНрд░реВрдкреБрдЯ рдореЗрдореЛрд░реА рдХреНрд╖рдорддрд╛ ~ O (N ^ 2) )ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдо, рдПрди, рдХреЗ рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреА рджрдХреНрд╖рддрд╛ рддреЗрдЬреА рд╕реЗ рдЧрд┐рд░рддреА рд╣реИред
  • рд╡рд┐рдзрд┐ рдХреЛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рдСрдкрд░реЗрд╢рди рд╕реЗ рджреВрд░ рд╣реИред рд╡рд╣ рдХреЗрд╡рд▓ рдЙрдкреЗрдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ K рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реЛред рдФрд░ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдирдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреЗ рдЕрдВрджрд░ рдЕрднреА рднреА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рддреЛ рд╕реНрдерд┐рддрд┐ рдФрд░ рднреА рджреБрдЦреА рд╣реЛ рдЬрд╛рддреА рд╣реИред
  • рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдХреЗ = srcC * рдХрд░реНрдиреЗрд▓ * рдХрд░реНрдиреЗрд▓рдПрдХреНрд╕ / рд╕рдореВрд╣ , рд╡рд┐рдзрд┐ рдХреА рджрдХреНрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рдХрдВрдлреНрдпреВрдЬрдирд▓ рд▓реЗрдпрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реИред рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрджреНрдзрддрд┐ рдЖрдо рддреМрд░ рдкрд░ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреЛ рджреЗрддреА рд╣реИред
  • рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╕рдХреНрд░рд┐рдпрдг рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЧрдгрд┐рддреАрдп рддрд░реАрдХреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдХрдо рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреГрдврд╝реАрдХрд░рдг рдХреА рдЧрдгрдирд╛ рдХреА рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИ рдФрд░ рдЙрдЪреНрдЪ рджрдХреНрд╖рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИред рдХрдИ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рддреЗрдЬреА рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдореИрдВ рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдкрд╛рдардХреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗ!

PS рдпрд╣ рдФрд░ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рдордб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреНрд╡реЗрдВрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ Synet рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ , CPU рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ред

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


All Articles