Types for Energy Management Yu David Liu State University of New York (SUNY) at Binghamton OOPSLA’13 PC Workshop Energy Efficiency in Computing operational cost phone battery life sensor network usability system reliability (overheating) environment PL & SE efforts PACT, ASPLOS OSDI, SOSP, SenSys, SIGCOMM ISCA, MICRO, HPCA VLSI, DAC 2 High-Level Questions What are the principles of energy management? recurring themes of software-hardware interactions recurring themes of static-dynamic interactions How can the principles be abided by at software construction time (or through software lifecycle)? What is the role of programmers in energy-efficient computing? 3 This Talk An energy-aware programming language design Core Idea: building the principles of energy management into a type system Static Typing: Michael Cohen, Haitao Steve Zhu, Senem Ezgi Emgin, Yu David Liu, "Energy Types," OOPSLA’12. Hybrid Typing: ongoing work 4 Energy Types A type system to reason about energy management based on two concepts: Phase • A pattern of system (CPU, memory…) utilization • “math”, “graphics”, “audio”… Mode • A level of energy state • “battery low”, “battery high”, “battery charged”… 5 Energy Types A type system to reason about energy management based on two concepts: Phase • A pattern of system (CPU, memory…) utilization • “math”, “graphics”, “audio”… Mode • A level of energy state • “battery low”, “battery high”, “battery charged” 6 Phases in Programs I/O-bound class Draw{ CPU-bound class Compute{ … … void doDraw(){ void doCompute(){ for(int i = 0; i < N; i++){ for(int i = 0; i < NUM; i++) { }}} canvas.drawL(x[i], y[i],); pi += factor/(2 * i + 1); c.draw(getImg(), rect); factor /= -3.0; }}} 7 Phases in Programs Draw draw = new Draw(); draw.doDraw(); Compute cmpt = new Compute(); cmpt.doCompute(); 8 Phases as Type Qualifiers phases { graphics <cpu math} Draw draw = new Draw(); Draw@phase(graphics) draw = new Draw(); draw.doDraw(); Compute@phase(math) cmpt = new Compute(); cmpt.doCompute(); 9 DVFS in Energy Management Dynamic Voltage & Frequency Scaling (DVFS) Power = c * Frequency * V2 Energy = Power * Time 10 Phase-based Energy Management What: divide execution into distinct system utilization “phases”, and scale down CPU frequency when a phase is not CPU-bound Why: minimum performance degradation with maximum energy savings Energy Types Solution: use (declared or inferred) phase types to guide DVFS A case of software-hardware interaction for energy management 11 Phases as Type Qualifiers phases { graphics <cpu math} Draw draw = new Draw(); Draw@phase(graphics) draw = new Draw(); draw.doDraw(); CPU CPU frequency frequency scaled scaled through through Compute@phase(math) cmpt = new Compute(); compiler compiler instrumentation instrumentation cmpt.doCompute(); Energy Management through Type-Directed DVFS: 1. tap programmer knowledge 2. tap type systems’ ability for consistency checking, type propagation and inference 12 Invariants Phase distinction: No object can commit to more than one phase Phase isolation: an object can only send messages to an object belonging to the same phase Inter-phase messaging is only allowed through explicit type coercion Promoting phased behaviors 13 Type System Details Based on region types: phases are regions Parametric polymorphism: Different objects of the same class can have different phases Finer-grained support through method polymorphism Explicit form: “generic” phases Implicit form: polymorphic inference to allow for arbitrary qualifier elision Type Soundness 14 Energy Types A type system to reason about energy management based on two concepts Phase • A pattern of CPU and memory utilization • “math”, “graphics”, “audio” Mode • A level of energy state expectation • “battery low”, “battery high”, “battery charged” 15 Mode-based Energy Management class Renderer{ Renderer(double quality){ int loopNum = 1000 * quality; for(int i = 0; i < loopNum; i++){ render(canvas, i); }} } Objects of different qualities Renderer m1 = new Renderer(0.99); Renderer m2 = new Renderer(0.5); 16 Modes as Type Qualifiers modes { low <: hi; } Renderer m1 = new m1 Renderer(0.99); Renderer@mode(hi) = new Renderer(0.99); Renderer m2 = new Renderer(0.5); Renderer@mode(low) m2 = new Renderer(0.5); Encouraging Application-Specific Energy Savings 17 Invariants waterfall Invariant: an object can only send messages to an object of the same mode, or of a “lower” mode in the partial order A program in “high” energy state can invoke code supposed to be used in “low” energy state The other way around requires explicit type coercion Regulating Energy States 18 Type System Details Based on region types: modes are regions Parametric polymorphism: Different objects of the same class can have different modes Finer-grained support through method polymorphism Explicit form: “generic” modes Implicit form: polymorphic inference to allow for arbitrary qualifier elision Type Soundness 19 Ongoing Effort: Hybrid Typing class Network { void send() {…} } class Client { … Network n = new Network(); while (…) { n.send(); }} 20 Ongoing Effort: Hybrid Typing class Network { void send() {…} } class Client { … Network@mode(hi) n = new Network(); while (…) { n.send(); }} Hmm.. 21 Ongoing Effort: Hybrid Typing class Network { void send() {…} } class Client { … Network@mode(low) n = new Network(); while (…) { n.send(); }} Hmm.. 22 Dynamic Types class Network { void send() {…} } class Client { … Network@mode(dynamic) n = new Network(); while (…) { n.send(); }} 23 From Dynamic to Static (One Possible Design) class Network { void send() {…} } Client Makes Decision class Client { … Network@mode(dynamic) n = new Network(); while (…) { ((Network@mode(low))n).send(); }} Hmm.. 24 From Dynamic to Static (Our Design) class Network { void send() {…} ~ Network () { if (…) return hi else return low; } Bi-Directional } Decision class Client { … Network@mode(dynamic) n = new Network(); while (…) { attribute n to low { n.send(); } }} 25 Implementation and Evaluation Prototyped compiler for Android Apps Static typing: benchmarking results show promising energy savings with minimal performance loss For some game benchmarks, 40% energy savings and 2% performance loss with phases; application-specific with modes Hybrid typing: under development 26 Conclusions New language designs may capture and facilitate complex software/hardware static/dynamic interactions in energy management Principles of energy management may be enforced by type systems Energy-aware programming broadens the scope of energy optimization by bringing in programmer knowledge 27 Q&A 28