280 likes | 367 Views
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. High-Level Questions.
E N D
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
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?
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, SenemEzgiEmgin, Yu David Liu, "Energy Types," OOPSLA’12. • Hybrid Typing: ongoing work
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”…
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”
Phases in Programs I/O-bound CPU-bound class Compute{ … void doCompute(){ for(inti = 0; i < N; i++){ pi += factor/(2 * i + 1); factor /= -3.0; }}} class Draw{ … void doDraw(){ for(inti = 0; i < NUM; i++) { canvas.drawL(x[i], y[i],); c.draw(getImg(), rect); }}}
Phases in Programs Draw draw = new Draw(); Draw draw = new Draw(); draw.doDraw(); Compute cmpt = new Compute(); cmpt.doCompute();
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();
DVFS in Energy Management • Dynamic Voltage & Frequency Scaling(DVFS) Power = c * Frequency * V2 Energy = Power * Time
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
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(); CPU frequency scaled through compiler instrumentation CPU frequency scaled through compiler 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
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
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
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”
Mode-based Energy Management class Renderer{ Renderer(double quality){ intloopNum = 1000 * quality; for(inti = 0; i < loopNum; i++){ render(canvas, i); }} } Objects of different qualities Renderer m1= new Renderer(0.99); Renderer m2= new Renderer(0.5);
Modes as Type Qualifiers modes { low <: hi; } Renderer m1= new Renderer(0.99); Renderer m2= new Renderer(0.5); Renderer@mode(hi) m1= new Renderer(0.99); Renderer@mode(low) m2= new Renderer(0.5); Encouraging Application-Specific Energy Savings
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
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
Ongoing Effort: Hybrid Typing class Network { void send() {…} } class Client { … Network n = new Network(); while (…) { n.send(); }}
Ongoing Effort: Hybrid Typing class Network { void send() {…} } class Client { … Network@mode(hi)n = new Network(); while (…) { n.send(); }} • Hmm..
Ongoing Effort: Hybrid Typing class Network { void send() {…} } class Client { … Network@mode(low)n = new Network(); while (…) { n.send(); }} • Hmm..
Dynamic Types class Network { void send() {…} } class Client { … Network@mode(dynamic)n = newNetwork(); while (…) { n.send(); }}
From Dynamic to Static (One Possible Design) class Network { void send() {…} } class Client { … Network@mode(dynamic)n = newNetwork(); while (…) { ((Network@mode(low))n).send(); }} Client Makes Decision • Hmm..
From Dynamic to Static (Our Design) class Network { void send() {…} ~ Network () { if (…) return hi else return low; } } class Client { … Network@mode(dynamic)n = newNetwork(); while (…) { attribute n to low { n.send(); } }} Bi-Directional Decision
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
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