Spring	  2014	  SEJITS	  Group	  Aspire	  Lab	  U.C.	  Berkeley	  	  Chick	  Markley	  chick@berkeley.edu	  Staﬀ	  Researcher	  Spring	  2014	  ProducIvity-­‐Performance	  Gap	  InteracIve	   Cancer	   Machine	   Graph	   MulImedia	   Computer	   SoZware	  Cloud	   Genomics	   Learning	   Processing	   Analysis	  Vision	  Radio	  ProducIvity	  Languages	  (Python,	  Scala)	  encic
ﬃE	  Layery	  Eﬃciency	  10	  LOC	   Languages	  (C++/C/assembler,	  CUDA/OpenCL,	  Java)	  • ProducIvity	  programmers	  want	  to	  concisely	  express	  problem	  in	  applicaIon	  domain	  • Eﬃciency	  programmers	  focus	  on	  packaging	  eﬃcient	  frameworks	  and	  libraries	  for	  use	  in	  producIvity	  layer	  • What	  kinds	  of	  frameworks	  and	  libraries	  should	  eﬃciency	  layer	  provide?	  Spring	  2014	  SEJITS	  • SelecIve	  • Embedded	  • Just-­‐In-­‐Time	  • Specializers	  Spring	  2014	  Pa]ern	  Speciﬁc	  OpImizaIon	  Pa]erns	  • Stencil	  	  • Linear	  Algebra	  • ReducIon	  • Support	  Vector	  Machine	  2/9/15	  Tools	  • Python	  • C/C++	  • OpenCl	  • OpenMP	  • Chisel,	  FPGA	  • LLVM	  Chick	  Markley	  4	  Spring	  2014	  Front-­‐end	  Back-­‐end	  Anatomy	  of	  SEJITS	  specializer	  ctree	  ctree	  void	  *fn	  DSL	  program	  embedded	  in	  Python	  2/9/15	  Python	  AST	  SemanIc	  Model	  Chick	  Markley	  C	  AST	  5	  Spring	  2014	  OpenTuner	  IntegraIon	  • Originally	  homegrown	  auto-­‐tuning	  • IniIal	  integraIon	  with	  OpenTuner	  • Using	  refactored	  opentuner	  api	  – Opentuner/examples/py_api.py	  Spring	  2014	  Parameters	  • RelaIvely	  small	  ranges	  • Small	  number	  of	  parameters	  Stencil	  example 	  	  	  manip	  =	  ConﬁguraIonManipulator()	  	  	  	  	  	  	  	  	  manip.add_parameter(PowerOfTwoParameter("unroll_factor",	  1,	  4))	  	  	  	  	  	  	  	  	  manip.add_parameter(PowerOfTwoParameter("block_factor1",	  4,	  8))	  	  	  	  	  	  	  	  	  manip.add_parameter(PowerOfTwoParameter("block_factor2",	  4,	  8))	  	  	  	  	  	  	  	  	  manip.add_parameter(PowerOfTwoParameter("block_factor3",	  4,	  8))	  	  #	  hack	  to	  induce	  parameter	  retry	  	  	  	  	  	  	  	  	  	  manip.add_parameter(IntegerParameter("x",	  -­‐10,	  10))	  Spring	  2014	  Drives	  AST	  transformaIon	  first_For = tree.find(For)inner_For = Optimizer.FindInnerMostLoop().find(first_For)
tree = optimizer.unroll(tree, inner_For, unroll_factor)
inner, first = optimizer.block_loops(inner_For,first_For,block_factors + [1])2/9/15	  Chick	  Markley	  8	  Spring	  2014	  Before	  13600	  ×	  1697	  pixels	  2/9/15	  Chick	  Markley	  9	  Spring	  2014	  AZer	  46824	  ×	  2215	  pixels	  	  2/9/15	  Chick	  Markley	  10	  Spring	  2014	  Sample	  Run	  • Intel	  E5-­‐2667v2,	  3.30GHz	  • Laplacian	  3d	  Grid	  size	  1028x128x128	  • 500	  trials	  • Best	  Ime	  0.0506	  • Average	  Ime	  0.1637	  • Worst	  Ime	  1.6589	  • Best	  is	  3x	  versus	  average,	  30x	  be]er	  than	  worst	  2/9/15	  Chick	  Markley	  11	  Spring	  2014	  2/9/15	  Tuning	  Run	  Chick	  Markley	  12	  Spring	  2014	  2/9/15	  Search	  Space	  Chick	  Markley	  13	  Spring	  2014	  Current	  Work	  • Hindemith	  • HPGMG	  • Chisel	  FPGA	  backend	  2/9/15	  Chick	  Markley	  14	  Spring	  2014	  OpenTuner	  Todo	  • Tuning	  space	  relaIonship	  to	  work	  sizes	  • Threading	  issues	  • Small	  search	  spaces	  • Hierarchical	  search	  spaces	  • ComposiIon	  of	  tuning	  parameters	  across	  specializers	  Spring	  2014	  2/9/15	  Thanks	  Chick	  Markley	  16	  Spring	  2014	  Wish	  list	  • Hierarchical	  – Gpu	  vs.	  MIC	  – Compiler	  – Compiler	  ﬂags	  • ComposiIon	  &	  Fusion	  – DSL	  – compilers