рдПрд▓реНрдмреНрд░рд╕ рдкрд░ 8-рдмрд┐рдЯ рдиреЗрдЯрд╡рд░реНрдХ, рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?

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


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдорд╛рдиреНрдпрддрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдПрд▓реНрдмреНрд░рд╕ рдкрд░ 8-рдмрд┐рдЯ рдЧреНрд░рд┐рдб рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЖрдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, 8-рдмрд┐рдЯ рдЧреБрдгрд╛рдВрдХ рдФрд░ рдЗрдирдкреБрдЯ рдФрд░ 32-рдмрд┐рдЯ рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ рдмреЗрд╣рдж рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google [1] рдФрд░ рдлреЗрд╕рдмреБрдХ [2] рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЙрдиреНрдЪ рдХрд┐рдП, рдЬреЛ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, SIMD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХрдореА рдХреЗ рдмрд┐рдирд╛ 25% рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдардВрдбрд╛ рд╣реИ?)ред



 


рдЧрдгрдирд╛ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣рд╡рд╛ рдореЗрдВ рд╣реИ:


  • . , тАЬтАЭ , float , ;
  • . - , , тАж , . , (SIMD). c 128- SIMD 4 floatтАЩ 16 uint8. 4 , ;
  • , . тАФ !

8- [3] . , , .


8- , 16-, . 32- . , 8- . , .


, тАФ . (. . 1) :


O(x,y,k)=╧Ж(тИСcтИС╬ФxтИС╬ФyI(c,x+╬Фx,y+╬Фy)wk(c,╬Фx,╬Фy)+bk)     (1)


(x,y)тАФ , OтАФ , IтАФ , wkтАФ .



. 1. C x X x Y.


тАФ [4]. , , . , "" тАФ .. , . , .. (1). "" , .. ( ), ..


8- 32- .



- , , .


тАУ , . , , тАФ . . , , , [5-7].


6 ( ), . : - , . , , , , , . , .


. 1 (). 32 .


1. . "/" , , .


-4-8, -1+-8
,6464128
(64 )6/16/16/1
(64 )4/46/46/4
(3232 -> 64 )4/44/44/4
(64 )4/86/86/8
()2/12/12/1
()2/22/22/2
(64 )4/14/14/1
()2/12/12/1
APB4/54/54/5

, - APB (array prefetch buffer). APB n- , . -, , APB , . APB :


  • ;
  • 3 4 APB , 5 ~6.

, APB :


  • , APB;
  • , 32b;
  • , .


, , . , . Goto [8] . , , , . .


, , (. . 2-3). тАФ . , .. . , APB - : , 8 ( 64- ) 2 .



. 2. .



3. .


:


for bl_r in block_r(rhs):
  packed_r <- pack_rhs(bl_r)
  for bl_l in block_l(lhs):
    packed_l <- pack_lhs(bl_l)
    packed_res <- pack_res(bl_res)
    kernel(packed_res, packed_l, packed_r)
    bl_res <- unpack_res(packed_res)

lhs rhs тАФ , block_l(.), block_r(.) тАФ , lhs rhs . pack_rhs pack_lhs , pack_res тАФ , unpack_res тАФ . kernel .


kernel :


for j in {0, ..., cols / nr}
{dst0, dst1} <-   
  for i in {0, ..., rows / mr}
    for k in {0, ..., depth / 2}
      bl_r <-    
      bl_l <-    
      lhs <- pshufb(zero, bl_l, 0x0901080009010800LL)
      rhs0 <- punpcklbh(zero, bl_r)
      rhs1 <- punpckhbh(zero, bl_r)
      dst0 <- dst0 + pmaddh(rhs0, lhs)
      dst1 <- dst1 + pmaddh(rhs1, lhs);
//   

pshufb тАФ , ( ), punpckhbh тАФ , 16- , punpcklbh тАФ , 16- , pmaddh тАФ , 16- .


. nr mr = 12 8.


, 8 48 . 8 3, 14 , тАФ 48 +, 8 .


2 8- -4, EML. N = 10^6 .


2. EML .


,EML,
16x991000.040.01
16x994000.150.04
16x2525x4000.180.06
16x144144x4000.290.20
16x400400x4000.620.50
16x400400x16002.572.07
32x400400x16004.573.94
32x800800x160013.9111.88
32x800800x250014.0511.90

, -4 . , .



8- , x86 ARM, . , , , . 8- . , , ( , x86 ARM), : 6 64- , (64 128 ) 2 6 .


, 8- 32- . 3 (-4), 4 5 (-8 -8).


? , . , тАЬтАЭ , . - , . , , / .


- 8- ? , , , - ( ).


P.S.
Limonova E. E., Neyman-Zade M. I., Arlazarov V. L. Special aspects of matrix operation implementations for low-precision neural network model on the Elbrus platform // . . тАФ 2020. тАФ . 13. тАФ тДЦ 1. тАФ . 118-128. тАФ DOI: 10.14529/mmp200109.


  1. https://github.com/google/gemmlowp
  2. https://engineering.fb.com/ml-applications/qnnpack/
  3. Vanhoucke, Vincent, Andrew Senior, and Mark Z. Mao. "Improving the speed of neural networks on CPUs." (2011).
  4. K. Chellapilla, S. Puri, P. Simard. High Performance Convolutional Neural Networks for Document Processing // Tenth International Workshop on Frontiers in Handwriting Recognition. тАУ Universite de Rennes, 1 Oct 2006. тАУ La Baule (France). тАУ 2006.
  5. .., . ., . . тАЬтАЭ. тАУ .: , тАУ 2013. тАУ 272 c.
  6. , .. / .. , .. , .. // - . тАУ .: - тАЬтАЭ . . .. . тАУ 2015. тАУ No4 (8). тАУ cc. 64-68.
  7. Limonova E. E., Skoryukina N. S., Neyman-Zade M. I. Fast Hamming Distance Computation for 2D Art Recognition on VLIW-Architecture in Case of Elbrus Platform // ICMV 2018 / SPIE. 2019. . 11041. ISSN 0277-786X. ISBN 978-15-10627-48-2. 2019. . 11041. 110411N. DOI: 10.1117/12.2523101
  8. Goto, K. Anatomy of high-performance matrix multiplication / K. Goto, R.A. Geijn // ACM Transactions on Mathematical Software (TOMS) тАУ 2008. тАУ 34(3). тАУ p.12.


All Articles