fbpx
Wikipedia

Incremental computing

Incremental computing, also known as incremental computation, is a software feature which, whenever a piece of data changes, attempts to save time by only recomputing those outputs which depend on the changed data.[1][2][3] When incremental computing is successful, it can be significantly faster than computing new outputs naively. For example, a spreadsheet software package might use incremental computation in its recalculation feature, to update only those cells containing formulas which depend (directly or indirectly) on the changed cells.

When incremental computing is implemented by a tool that can implement it for a variety of different pieces of code automatically, that tool is an example of a program analysis tool for optimization.

Incremental computing derives a new input/output pair from one or more old input/output relationships. To do so, ΔP must relate a change in the input to a change in the output. The consumer of the result may be interested in the full updated output, or the delta output, or both.

Static versus dynamic edit

Incremental computing techniques can be broadly separated into two types of approaches:

Static approaches attempt to derive an incremental program from a conventional program P using, e.g., either manual design and refactoring, or automatic program transformations. These program transformations occur before any inputs or input changes are provided.

Dynamic approaches record information about executing program P on a particular input (I1) and use this information when the input changes (to I2) in order to update the output (from O1 to O2). The figure shows the relationship between program P, the change calculation function ΔP, which constitutes the core of the incremental program, and a pair of inputs and outputs, I1, O1 and I2, O2.

Specialized versus general-purpose approaches edit

Some approaches to incremental computing are specialized, while others are general purpose. Specialized approaches require the programmer to explicitly specify the algorithms and data structures that will be used to preserve unchanged sub-calculations. General-purpose approaches, on the other hand, use language, compiler, or algorithmic techniques to give incremental behavior to otherwise non-incremental programs.[4]

Static methods edit

Program derivatives edit

Given a computation   and a potential change  , we can insert code before the change (the pre-derivative) and after the change (the post-derivative) to update the value of   faster than rerunning  . Paige has written down a list of rules for formal differentiation of programs in SUBSETL.[5]

View maintenance edit

In database systems such as DBToaster, views are defined with relational algebra. Incremental view maintenance statically analyzes relational algebra to create update rules that quickly maintain the view in the presence of small updates, such as insertion of a row.[6]

Dynamic methods edit

Incremental computation can be achieved by building a dependency graph of all the data elements that may need to be recalculated, and their dependencies. The elements that need to be updated when a single element changes are given by the transitive closure of the dependency relation of the graph. In other words, if there is a path from the changed element to another element, the latter may be updated (depending on whether the change eventually reaches the element). The dependency graph may need to be updated as dependencies change, or as elements are added to, or removed from, the system. It is used internally by the implementation, and does not typically need to be displayed to the user.

Capturing dependencies across all possible values can be avoided by identifying subset of important values (e.g., aggregation results) across which dependencies can be tracked, and incrementally recomputing other dependent variables, hence balancing the amount of dependency information to be tracked with the amount of recomputation to be performed upon input change.[7]

Partial evaluation can be seen as a method for automating the simplest possible case of incremental computing, in which an attempt is made to divide program data into two categories: that which can vary based on the program's input, and that which cannot (and the smallest unit of change is simply "all the data that can vary"). Partial evaluation can be combined with other incremental computing techniques.

With cycles in the dependency graph, a single pass through the graph may not be sufficient to reach a fixed point. In some cases, complete reevaluation of a system is semantically equivalent to incremental evaluation, and may be more efficient in practice if not in theory.[8]

Existing systems edit

Compiler and language support edit

  • Automatic Incrementalization (also called "Self-Adjusting Computation", and "Adaptive Functional Programming"),[9] Delta ML, Haskell Adaptive
  • Cornell Synthesizer Generator[10]
  • IceDust - a custom domain-specific language.

Frameworks and libraries edit

  • Adapton[11] - with implementations in several languages
  • One-way Dataflow Constraints (Reactive Computation in C++)
  • Differential Dataflow
  • Jane Street Incremental
  • Incremental Datalog (LogicBlox)
  • Incremental Prolog (XSB)[12]
  • Domain-Specific Approaches:
    • Incremental Type Checking

Applications edit

  • Databases (view maintenance)
  • Build systems
  • Spreadsheets[13]
  • Development Environments
  • Financial Computations
  • Attribute Grammar Evaluation
  • Graph Computations and Queries
  • GUIs (e.g., React and DOM diffing)
  • Scientific applications

See also edit

References edit

  1. ^ Carlsson, Magnus (2002). "Monads for incremental computing". Proceedings of the seventh ACM SIGPLAN international conference on Functional programming. New York: ACM. pp. 26–35. doi:10.1145/581478.581482. ISBN 1-58113-487-8.
  2. ^ Umut A. Acar (2005). Self-Adjusting Computation (PDF) (Ph.D. thesis).
  3. ^ Camil Demetrescu; Irene Finocchi; Andrea Ribichini (2011). "Reactive Imperative Programming with Dataflow Constraints". Proceedings of the 26th ACM International Conference on Object-Oriented Programming Systems Languages and Applications (OOPSLA 2011). ACM. pp. 407–426. arXiv:1104.2293. doi:10.1145/2048066.2048100. ISBN 978-1-4503-0940-0.
  4. ^ Yan Chen; Joshua Dunfield; Matthew A. Hammer; Umut A. Acar. . ICFP '11. pp. 129–141. Archived from the original on 2016-10-30. Retrieved 2018-03-12.
  5. ^ Paige, Robert (1981). Formal Differentiation: A Program Synthesis Technique. UMI Research Press. ISBN 978-0-8357-1213-2.
  6. ^ Ahmad, Yanif; Kennedy, Oliver; Koch, Christoph; Nikolic, Milos (2012-06-01). "DBToaster: Higher-order Delta Processing for Dynamic, Frequently Fresh Views". Proc. VLDB Endow. 5 (10): 968–979. arXiv:1207.0137. doi:10.14778/2336664.2336670. ISSN 2150-8097.
  7. ^ Mugilan Mariappan; Keval Vora (2019). "GraphBolt: Dependency-Driven Synchronous Processing of Streaming Graphs". In European Conference on Computer Systems (EuroSys'19). pp. 25:1–25:16. doi:10.1145/3302424.3303974.
  8. ^ Kimberley Burchett; Gregory H. Cooper; Shriram Krishnamurthi (2007). "Lowering: A static optimization technique for transparent functional reactivity". In ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation. pp. 71–80. CiteSeerX 10.1.1.90.5866. ISBN 978-1-59593-620-2.
  9. ^ Hammer, Matthew A.; Acar, Umut A.; Chen, Yan (2009). "CEAL". Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation - PLDI '09. p. 25. doi:10.1145/1542476.1542480. ISBN 9781605583921. S2CID 11058228.
  10. ^ Reps, Thomas; Teitelbaum, Tim (1984). "The synthesizer generator". Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments - SDE 1. pp. 42–48. doi:10.1145/800020.808247. ISBN 978-0897911313.
  11. ^ "Adapton: Programming Language Abstractions for Incremental Computation". adapton.org. Retrieved 2016-10-07.
  12. ^ Saha, Diptikalyan; Ramakrishnan, C. R. (2005). "Incremental Evaluation of Tabled Prolog: Beyond Pure Logic Programs". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 3819. pp. 215–229. CiteSeerX 10.1.1.111.7484. doi:10.1007/11603023_15. ISBN 978-3-540-30947-5. ISSN 0302-9743.
  13. ^ Hammer, Matthew; Phang, Khoo; Hicks, Michael; Foster, Jeffrey (2014). ADAPTON: Composable, Demand-Driven Incremental Computation (PDF). PLDI.

incremental, computing, also, known, incremental, computation, software, feature, which, whenever, piece, data, changes, attempts, save, time, only, recomputing, those, outputs, which, depend, changed, data, when, incremental, computing, successful, significan. Incremental computing also known as incremental computation is a software feature which whenever a piece of data changes attempts to save time by only recomputing those outputs which depend on the changed data 1 2 3 When incremental computing is successful it can be significantly faster than computing new outputs naively For example a spreadsheet software package might use incremental computation in its recalculation feature to update only those cells containing formulas which depend directly or indirectly on the changed cells When incremental computing is implemented by a tool that can implement it for a variety of different pieces of code automatically that tool is an example of a program analysis tool for optimization Incremental computing derives a new input output pair from one or more old input output relationships To do so DP must relate a change in the input to a change in the output The consumer of the result may be interested in the full updated output or the delta output or both Contents 1 Static versus dynamic 2 Specialized versus general purpose approaches 3 Static methods 3 1 Program derivatives 3 2 View maintenance 4 Dynamic methods 5 Existing systems 5 1 Compiler and language support 5 2 Frameworks and libraries 6 Applications 7 See also 8 ReferencesStatic versus dynamic editThis section does not cite any sources Please help improve this section by adding citations to reliable sources Unsourced material may be challenged and removed November 2016 Learn how and when to remove this template message Incremental computing techniques can be broadly separated into two types of approaches Static approaches attempt to derive an incremental program from a conventional program P using e g either manual design and refactoring or automatic program transformations These program transformations occur before any inputs or input changes are provided Dynamic approaches record information about executing program P on a particular input I1 and use this information when the input changes to I2 in order to update the output from O1 to O2 The figure shows the relationship between program P the change calculation function DP which constitutes the core of the incremental program and a pair of inputs and outputs I1 O1 and I2 O2 Specialized versus general purpose approaches editSome approaches to incremental computing are specialized while others are general purpose Specialized approaches require the programmer to explicitly specify the algorithms and data structures that will be used to preserve unchanged sub calculations General purpose approaches on the other hand use language compiler or algorithmic techniques to give incremental behavior to otherwise non incremental programs 4 Static methods editProgram derivatives edit Given a computation C f x 1 x 2 x n displaystyle C f x 1 x 2 dots x n nbsp and a potential change x j D x j displaystyle x j Delta x j nbsp we can insert code before the change the pre derivative and after the change the post derivative to update the value of C displaystyle C nbsp faster than rerunning f displaystyle f nbsp Paige has written down a list of rules for formal differentiation of programs in SUBSETL 5 View maintenance edit In database systems such as DBToaster views are defined with relational algebra Incremental view maintenance statically analyzes relational algebra to create update rules that quickly maintain the view in the presence of small updates such as insertion of a row 6 Dynamic methods editIncremental computation can be achieved by building a dependency graph of all the data elements that may need to be recalculated and their dependencies The elements that need to be updated when a single element changes are given by the transitive closure of the dependency relation of the graph In other words if there is a path from the changed element to another element the latter may be updated depending on whether the change eventually reaches the element The dependency graph may need to be updated as dependencies change or as elements are added to or removed from the system It is used internally by the implementation and does not typically need to be displayed to the user Capturing dependencies across all possible values can be avoided by identifying subset of important values e g aggregation results across which dependencies can be tracked and incrementally recomputing other dependent variables hence balancing the amount of dependency information to be tracked with the amount of recomputation to be performed upon input change 7 Partial evaluation can be seen as a method for automating the simplest possible case of incremental computing in which an attempt is made to divide program data into two categories that which can vary based on the program s input and that which cannot and the smallest unit of change is simply all the data that can vary Partial evaluation can be combined with other incremental computing techniques With cycles in the dependency graph a single pass through the graph may not be sufficient to reach a fixed point In some cases complete reevaluation of a system is semantically equivalent to incremental evaluation and may be more efficient in practice if not in theory 8 Existing systems editCompiler and language support edit Automatic Incrementalization also called Self Adjusting Computation and Adaptive Functional Programming 9 Delta ML Haskell Adaptive Cornell Synthesizer Generator 10 IceDust a custom domain specific language Frameworks and libraries edit Adapton 11 with implementations in several languages One way Dataflow Constraints Reactive Computation in C Differential Dataflow Jane Street Incremental Incremental Datalog LogicBlox Incremental Prolog XSB 12 Domain Specific Approaches Incremental Type CheckingApplications editThis section needs additional citations for verification Please help improve this article by adding citations to reliable sources in this section Unsourced material may be challenged and removed Find sources Incremental computing news newspapers books scholar JSTOR February 2017 Learn how and when to remove this template message Databases view maintenance Build systems Spreadsheets 13 Development Environments Financial Computations Attribute Grammar Evaluation Graph Computations and Queries GUIs e g React and DOM diffing Scientific applicationsSee also editReactive programming Functional reactive programming Memoization Bidirectional transformationReferences edit Carlsson Magnus 2002 Monads for incremental computing Proceedings of the seventh ACM SIGPLAN international conference on Functional programming New York ACM pp 26 35 doi 10 1145 581478 581482 ISBN 1 58113 487 8 Umut A Acar 2005 Self Adjusting Computation PDF Ph D thesis Camil Demetrescu Irene Finocchi Andrea Ribichini 2011 Reactive Imperative Programming with Dataflow Constraints Proceedings of the 26th ACM International Conference on Object Oriented Programming Systems Languages and Applications OOPSLA 2011 ACM pp 407 426 arXiv 1104 2293 doi 10 1145 2048066 2048100 ISBN 978 1 4503 0940 0 Yan Chen Joshua Dunfield Matthew A Hammer Umut A Acar Implicit self adjusting computation for purely functional programs ICFP 11 pp 129 141 Archived from the original on 2016 10 30 Retrieved 2018 03 12 Paige Robert 1981 Formal Differentiation A Program Synthesis Technique UMI Research Press ISBN 978 0 8357 1213 2 Ahmad Yanif Kennedy Oliver Koch Christoph Nikolic Milos 2012 06 01 DBToaster Higher order Delta Processing for Dynamic Frequently Fresh Views Proc VLDB Endow 5 10 968 979 arXiv 1207 0137 doi 10 14778 2336664 2336670 ISSN 2150 8097 Mugilan Mariappan Keval Vora 2019 GraphBolt Dependency Driven Synchronous Processing of Streaming Graphs In European Conference on Computer Systems EuroSys 19 pp 25 1 25 16 doi 10 1145 3302424 3303974 Kimberley Burchett Gregory H Cooper Shriram Krishnamurthi 2007 Lowering A static optimization technique for transparent functional reactivity In ACM SIGPLAN Symposium on Partial Evaluation and Semantics Based Program Manipulation pp 71 80 CiteSeerX 10 1 1 90 5866 ISBN 978 1 59593 620 2 Hammer Matthew A Acar Umut A Chen Yan 2009 CEAL Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation PLDI 09 p 25 doi 10 1145 1542476 1542480 ISBN 9781605583921 S2CID 11058228 Reps Thomas Teitelbaum Tim 1984 The synthesizer generator Proceedings of the first ACM SIGSOFT SIGPLAN software engineering symposium on Practical software development environments SDE 1 pp 42 48 doi 10 1145 800020 808247 ISBN 978 0897911313 Adapton Programming Language Abstractions for Incremental Computation adapton org Retrieved 2016 10 07 Saha Diptikalyan Ramakrishnan C R 2005 Incremental Evaluation of Tabled Prolog Beyond Pure Logic Programs Practical Aspects of Declarative Languages Lecture Notes in Computer Science Vol 3819 pp 215 229 CiteSeerX 10 1 1 111 7484 doi 10 1007 11603023 15 ISBN 978 3 540 30947 5 ISSN 0302 9743 Hammer Matthew Phang Khoo Hicks Michael Foster Jeffrey 2014 ADAPTON Composable Demand Driven Incremental Computation PDF PLDI Retrieved from https en wikipedia org w index php title Incremental computing amp oldid 1142817674, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.