9/29/17 ¡ Packing ¡-‑ ¡the ¡next ¡BLIS ¡Fron5er? ¡ Tze ¡Meng ¡Low ¡ BLIS ¡Retreat ¡2017 ¡ 5 th ¡loop ¡around ¡micro-‑kernel ¡ Looking ¡back ¡ n C n C += ¡ C j A B j § Original ¡Goals ¡ 4 th ¡loop ¡around ¡micro-‑kernel ¡ ¡ k C B p The ¡BLAS-‑like ¡Library ¡Instan7a7on ¡ C j += ¡ A p SoNware ¡(BLIS) ¡framework ¡is ¡a ¡new ¡ k C ~ infrastructure ¡for ¡rapidly ¡instan7a7ng ¡ Pack B p → B p 3 rd ¡loop ¡around ¡micro-‑kernel ¡ Basic ¡Linear ¡Algebra ¡Subprograms ¡ ~ C i A i m C m C B ¡ += ¡ (BLAS) ¡func7onality. ¡…. ¡ p ~ Pack A i → A i § Increase ¡Produc7vity ¡ 2 nd ¡loop ¡around ¡micro-‑kernel ¡ ~ ~ n R n R C i B p A m R i += ¡ § Extensible ¡ k C 1 st ¡loop ¡around ¡micro-‑kernel ¡ n R m R += ¡ k C Etc… ¡ micro-‑kernel ¡ main ¡memory ¡ 1 L3 ¡cache ¡ += ¡ L2 ¡cache ¡ L1 ¡cache ¡ 1 registers ¡ F.G. ¡Van ¡Zee, ¡R. ¡van ¡de ¡Geijn, ¡BLIS: ¡A ¡Framework ¡for ¡Rapidly ¡Instan7a7ng ¡BLAS ¡Func7onality, ¡ACM ¡TOMS ¡2015 ¡ 1 ¡
9/29/17 ¡ Ease ¡of ¡use ¡ § What ¡happens ¡with ¡a ¡new ¡architecture? ¡ – Write/Generate ¡micro-‑kernel ¡ ¡ ¡ ¡ – Use ¡analy7cal ¡modeling ¡for ¡parameters ¡ ¡ ¡ � ⌫ m r ( W L 1 − 1) C A r ≤ m r + n r k c = C A r N L 1 C L 1 m r S data T.M. ¡Low, ¡F. ¡Igual, ¡T. ¡ ¡M. ¡Smith, ¡E. ¡Quintana-‑Or7s, ¡Analy7cal ¡Modeling ¡is ¡Sufficient ¡for ¡High ¡Performance ¡BLIS, ¡ACM ¡TOMS, ¡2017 ¡ Ease ¡of ¡use ¡ § Actual ¡work ¡ – Create ¡directory ¡(recursive ¡copy ¡and ¡rename) ¡ – Edit ¡ bli_kernel.h – Drop ¡your ¡kernel(s) ¡into ¡ kernels/3 – ./configure new_kernel & make install ¡ ¡ ¡ 2 ¡
9/29/17 ¡ Unexpected ¡benefits ¡ kNN ¡ § More ¡than ¡just ¡BLAS ¡ Linkage ¡Disequilibrium ¡ APSP ¡ k ¡ 010101… ¡ SNP ¡A ¡ SNP ¡B ¡ 010011… ¡ ¡ ¡ 010001… ¡ ¡ ¡ ¡ ¡2 ¡ Comm ¡ N. ¡Alachio7s, ¡Popovici, ¡T.M. ¡Low, ¡Efficient ¡Computa7on ¡of ¡ DNA ¡Fingerprin5ng ¡ Linkage ¡Disequilibria ¡as ¡Dense ¡Linear ¡Algebra ¡Opera7ons, ¡ HiCOMB ¡2016 ¡ What ¡everyone ¡is ¡saying… ¡ PACKING ¡ 3 ¡
9/29/17 ¡ Reasons ¡for ¡packing ¡ § Work ¡with ¡different ¡data ¡layouts ¡ ¡ § Hide ¡addi7onal ¡opera7ons ¡ ¡ C = f � (( A ⌦ B ) � C ) § Generalize ¡the ¡framework ¡ Work ¡with ¡Different ¡Data ¡Layout ¡ § Limited ¡ SIMD ¡support ¡for ¡complex ¡mul7plica7on ¡ § Interleaved ¡vs ¡Non-‑interleaved ¡ § Switch ¡format ¡during ¡packing ¡ Performance ¡on ¡Intel ¡Kaby ¡Lake ¡7770K ¡ 70 ¡ BLIS ¡+ ¡Mixed ¡format ¡ 60 ¡ Na5ve ¡BLIS ¡zgemm ¡ 50 ¡ GFlop/s ¡ 40 ¡ 30 ¡ 20 ¡ 10 ¡ 0 ¡ 16 ¡ 48 ¡ 176 ¡ 208 ¡ 336 ¡ 368 ¡ 496 ¡ 528 ¡ 656 ¡ 688 ¡ 816 ¡ 848 ¡ 976 ¡ 1008 ¡ 80 ¡ 112 ¡ 144 ¡ 240 ¡ 272 ¡ 304 ¡ 400 ¡ 432 ¡ 464 ¡ 560 ¡ 592 ¡ 624 ¡ 720 ¡ 752 ¡ 784 ¡ 880 ¡ 912 ¡ 944 ¡ k ¡(m ¡= ¡n ¡= ¡1000) ¡ D. ¡Popovici, ¡F. ¡Franchek, ¡T.M. ¡Low, ¡Mixed ¡Data ¡Format ¡for ¡Vectorized ¡Complex ¡Kernel, ¡HPEC, ¡2017 ¡ 4 ¡
9/29/17 ¡ Hide ¡addi5onal ¡opera5ons ¡ § Finite ¡Field ¡over ¡large ¡primes ¡ ¡ – Reuse ¡BLAS ¡& ¡LAPACK ¡for ¡finite ¡fields ¡ Input ¡ Type ¡ Conversion ¡ GEMM ¡ Modulo ¡p ¡ Type ¡ Conversion ¡ Output ¡ J. ¡Johnson, ¡T.M. ¡Low, ¡M. ¡Lambert, ¡P. ¡Oostema, ¡B. ¡D. ¡Saunders, ¡High-‑Performance ¡Kernels ¡for ¡Exact ¡Linear ¡Algebra, ¡ACA ¡2017 ¡ Hide ¡addi5onal ¡opera5ons ¡ § Finite ¡Field ¡over ¡large ¡primes ¡ ¡ – Reuse ¡BLAS ¡& ¡LAPACK ¡for ¡finite ¡fields ¡ Input ¡ Packing ¡ Type ¡ Conversion ¡ GEMM ¡ Modulo ¡p ¡ Type ¡ Kernel ¡ Conversion ¡ Output ¡ J. ¡Johnson, ¡T.M. ¡Low, ¡M. ¡Lambert, ¡P. ¡Oostema, ¡B. ¡D. ¡Saunders, ¡High-‑Performance ¡Kernels ¡for ¡Exact ¡Linear ¡Algebra, ¡ACA ¡2017 ¡ 5 ¡
9/29/17 ¡ Generalize ¡the ¡framework ¡ § Finite ¡fields ¡for ¡small ¡primes ¡ – 4 ¡Russians ¡Method ¡ Table ¡Crea5on ¡ Compute ¡with ¡A ¡as ¡index ¡ J. ¡Johnson, ¡T.M. ¡Low, ¡M. ¡Lambert, ¡P. ¡Oostema, ¡B. ¡D. ¡Saunders, ¡High-‑Performance ¡Kernels ¡for ¡Exact ¡Linear ¡Algebra, ¡ACA ¡2017 ¡ Performance ¡ Bits ¡Ops ¡/ ¡Cycle ¡ 2000 ¡ 4R ¡-‑ ¡BLIS ¡ m4ri ¡(4 ¡bit ¡tables) ¡ O(n^3) ¡ Naive ¡Peak ¡ 4R ¡-‑ ¡Peak ¡(4 ¡bit ¡tables) ¡ 1500 ¡ Need ¡Packing ¡for ¡A ¡ 1000 ¡ 500 ¡ 0 ¡ 1024 ¡ 4096 ¡ 16384 ¡ N ¡= ¡M ¡= ¡K ¡ J. ¡Johnson, ¡T.M. ¡Low, ¡M. ¡Lambert, ¡P. ¡Oostema, ¡B. ¡D. ¡Saunders, ¡High-‑Performance ¡Kernels ¡for ¡Exact ¡Linear ¡Algebra, ¡ACA ¡2017 ¡ 6 ¡
9/29/17 ¡ What ¡everyone ¡is ¡NOT ¡saying… ¡ PACKING ¡ Remember ¡how ¡easy ¡to ¡add ¡kernels? ¡ 7 ¡
9/29/17 ¡ Introducing ¡packing ¡is ¡not ¡easy ¡ § Files ¡edited ¡or ¡added ¡ frame/1m/bli_l1m_N.h ¡ frame/1m/packm/bli_packm_blk_var2.c ¡ frame/1m/bli_l1m_ker.h ¡ frame/1m/packm/bli_packm_blk_var2.h ¡ frame/1m/packm/bli_packm.h ¡ frame/1m/packm/bli_packm_cxk_cmu.c ¡ frame/1m/packm/bli_packm_cxk.c ¡ frame/1m/packm/bli_packm_cxk_cmu.h ¡ frame/include/bli_kernel_macro_defs.h ¡ frame/1m/packm/bli_packm_struc_cxk_cmu.c ¡ frame/include/bli_kernel_pre_macro_defs.h ¡ frame/1m/packm/bli_packm_struc_cxk_cmu.h ¡ frame/include/bli_kernel_prototypes.h ¡ frame/1m/packm/ukernels/bli_packm_cxk_cmu_ref.c ¡ frame/ind/include/bli_kernel_ind_macro_defs.h ¡ frame/1m/packm/ukernels/bli_packm_cxk_cmu_ref.h ¡ frame/ind/include/bli_packm_ind_pre_macro_defs.h ¡ frame/ind/include/bli_packm_cmu_macro_defs.h ¡ frame/3/gemm/bli_gemm_cntl.c ¡ Calling ¡sequence ¡ 8 ¡
9/29/17 ¡ My ¡wish ¡list ¡ § As ¡easy ¡as ¡adding ¡kernels ¡ § Files ¡to ¡edit ¡or ¡add ¡ frame/1m/bli_l1m_N.h ¡ frame/1m/packm/bli_packm_blk_var2.c ¡ frame/1m/bli_l1m_ker.h ¡ frame/1m/packm/bli_packm_blk_var2.h ¡ frame/1m/packm/bli_packm.h ¡ frame/1m/packm/bli_packm_cxk_cmu.c ¡ frame/1m/packm/bli_packm_cxk.c ¡ frame/1m/packm/bli_packm_cxk_cmu.h ¡ frame/include/bli_kernel_macro_defs.h ¡ frame/1m/packm/bli_packm_struc_cxk_cmu.c ¡ frame/include/bli_kernel_pre_macro_defs.h ¡ frame/1m/packm/bli_packm_struc_cxk_cmu.h ¡ frame/include/bli_kernel_prototypes.h ¡ frame/1m/packm/ukernels/bli_packm_cxk_cmu_ref.c ¡ frame/ind/include/bli_kernel_ind_macro_defs.h ¡ frame/1m/packm/ukernels/bli_packm_cxk_cmu_ref.h ¡ frame/ind/include/bli_packm_ind_pre_macro_defs.h ¡ frame/ind/include/bli_packm_cmu_macro_defs.h ¡ frame/3/gemm/bli_gemm_cntl.c ¡ § Move ¡from ¡ frame ¡to ¡ kernel Summary ¡ § Lighter ¡and ¡more ¡nimble ¡framework ¡ § Refactoring ¡of ¡the ¡packing ¡is ¡proposed ¡ § Inputs ¡from ¡BLIS ¡user ¡and ¡developers ¡wanted ¡ 9 ¡
9/29/17 ¡ Discussion ¡ 10 ¡
Recommend
More recommend