Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Memoization Aspects

838 views

Published on

Published in: Technology
  • Be the first to comment

Memoization Aspects

  1. 1. Motivation First Approach Aspect-based Refactoring Results Memoization Aspects: a Case Study Santiago A. Vidal 1,2 Claudia A. Marcos 1 Alexandre Bergel 3 Gabriela Arévalo 2,4 1 ISISTAN Research Institute, Faculty of Sciences, UNICEN University, Argentina 2 CONICET (National Scientic and Technical Research Council) 3 PLEIAD Lab, Department of Computer Science (DCC), University of Chile, Chile 4 Universidad Nacional de Quilmes, Argentina, International Workshop on Smalltalk Technologies (ESUG 2011)1 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  2. 2. Motivation First Approach Aspect-based Refactoring Results Mondrian Mondrian is an agile visualization engine implemented in Pharo, and has been used in more than a dozen projects2 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  3. 3. Motivation First Approach Aspect-based Refactoring Results Dealing with Mondrian Evolution Mondrian has several caches Each unpredictable usage led to a performance problem that has been solved using a new memoization.3 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  4. 4. Motivation First Approach Aspect-based Refactoring Results Mondrian Computations Memoization An optimization technique used to speed up an application by making calls that avoid repeating the similar previous computation Mondrian caches are instances of the memoization technique MOGraphElementabsoluteBounds absoluteBoundsCache ifNotNil: [ ^ absoluteBoundsCache ]. ^ absoluteBoundsCache:= self shape absoluteBoundsFor: self4 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  5. 5. Motivation First Approach Aspect-based Refactoring Results Proposal Problems The caches that are used intensively when visualizing software are not useful and may even be a source of slowdown and complexity in other contexts. The legibility of the methods with memoization has been aected.5 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  6. 6. Motivation First Approach Aspect-based Refactoring Results Proposal Problems The caches that are used intensively when visualizing software are not useful and may even be a source of slowdown and complexity in other contexts. The legibility of the methods with memoization has been aected. Goals Identication of memoizing crosscutting concerns Refactorization of these crosscutting concerns into modular and pluggable aspects5 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  7. 7. Motivation First Approach Aspect-based Refactoring Results A Naive Solution General operations for accessing and resetting a cache6 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  8. 8. Motivation First Approach Aspect-based Refactoring Results A Naive Solution General operations for accessing and resetting a cache Problem Signicant overhead (3 to 10 times slower)6 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  9. 9. Motivation First Approach Aspect-based Refactoring Results Requirements for Refactoring All cache accesses have to be identied. This is essential to have all the caches considered equally. No cost of performance must be paid, or it defeats the whole purpose of the work. Readability must not be reduced.7 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  10. 10. Motivation First Approach Aspect-based Refactoring Results Identifying caches The caches are mostly identied by browsing the methods in which the cache variables are referenced and accessed.8 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  11. 11. Motivation First Approach Aspect-based Refactoring Results Identifying caches The caches are mostly identied by browsing the methods in which the cache variables are referenced and accessed. 9 caches were found.8 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  12. 12. Motivation First Approach Aspect-based Refactoring Results Identifying caches The caches are mostly identied by browsing the methods in which the cache variables are referenced and accessed. 9 caches were found. The caches were grouped together based on the purpose of its use: Initialize and reset the cache Retrieve the cache value Store data in the cache8 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  13. 13. Motivation First Approach Aspect-based Refactoring Results Identifying caches The caches are mostly identied by browsing the methods in which the cache variables are referenced and accessed. 9 caches were found. The caches were grouped together based on the purpose of its use: Initialize and reset the cache Retrieve the cache value Store data in the cache These groups allow the identication of code patterns.8 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  14. 14. Motivation First Approach Aspect-based Refactoring Results Patterns identied MOGraphElement -cacheShapeBounds LI: lazy initialization -cacheForm -boundsCache CI: cache initialization -absoluteBoundsCache -elementsToDisplayCache ResC: reset cache -lookupNodeCache RetC: return cache absoluteBounds LI bounds CL: cache loaded elementsToDisplay CI cacheCanvas isCacheLoaded resetAbsoluteBoundsCacheRecursively resetCache ResC resetElementsToDisplayCache resetFormCache resetFormCacheRecursively resetFormCacheToTheRoot shapeBoundsAt:put: RetC shapeBounds MOEdge MONode -cacheFromPoint -cacheToPoint RetC cacheForm LI bounds scaleBy: ResC translateBy:bounded: CL isCacheLoaded ResC resetCache cacheFromPoint: CI cacheToPoint: cacheFromPoint MORoot RetC cacheToPoint -cacheBounds LI bounds9 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  15. 15. Motivation First Approach Aspect-based Refactoring Results Pattern description Lazy Initialization: In some situations it is not relevant to initialize the cache before it is actually needed. MOEdgebounds ^ boundsCache ifNil:[boundsCache:= self shape computeBoundsFor: self ]. Reset Cache: A cache has to be invalidated when its content has to be updated. MOGraphElementresetCache self resetElementsToLookup. boundsCache := nil. absoluteBoundsCache := nil. cacheShapeBounds :=SmallDictionary new. elementsToDisplayCache := nil. self resetMetricCaches10 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  16. 16. Motivation First Approach Aspect-based Refactoring Results Cache Concerns as Aspects The goal of the refactorization is the separation of these patterns from the main code without changing the overall behavior.11 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  17. 17. Motivation First Approach Aspect-based Refactoring Results Cache Concerns as Aspects The goal of the refactorization is the separation of these patterns from the main code without changing the overall behavior. Aspect weaving is achieved via a customized AOP mechanism based on code annotation and source code manipulation.11 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  18. 18. Motivation First Approach Aspect-based Refactoring Results Cache Concerns as Aspects The goal of the refactorization is the separation of these patterns from the main code without changing the overall behavior. Aspect weaving is achieved via a customized AOP mechanism based on code annotation and source code manipulation. Refactoring strategy: for each method that involves a cache, the part of the method that deals directly with the cache is removed and the method is annotated.11 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  19. 19. Motivation First Approach Aspect-based Refactoring Results Cache Concerns as Aspects The goal of the refactorization is the separation of these patterns from the main code without changing the overall behavior. Aspect weaving is achieved via a customized AOP mechanism based on code annotation and source code manipulation. Refactoring strategy: for each method that involves a cache, the part of the method that deals directly with the cache is removed and the method is annotated. The annotation structure is patternCodeName: cacheName LazyInitializationPattern: #absoluteBoundsCache11 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  20. 20. Motivation First Approach Aspect-based Refactoring Results Injection Mechanism I For every annotation a method may have, the code injector performs the needed source code transformation to use the cache. 1 A new method is created with the same name as the method that contains the annotation but with the prex compute plus the name of the class in which is dened. MOEdgebounds LazyInitializationPattern: #boundsCache ^ self shape computeBoundsFor: self. MOEdgecomputeMOEdgeBounds 2 The code of the original method is copied into the new one. MOEdgecomputeMOEdgeBounds ^ self shape computeBoundsFor: self.12 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  21. 21. Motivation First Approach Aspect-based Refactoring Results Injection Mechanism II 3 The code inside the original method is replaced by the code automatically generated according to the pattern dened in the annotation MOEdgebounds boundsCache ifNotNil: [ ^ boundsCache]. ^ boundsCache:= computeMOEdgeBounds13 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  22. 22. Motivation First Approach Aspect-based Refactoring Results Injection Mechanism III14 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  23. 23. Motivation First Approach Aspect-based Refactoring Results Maintainability The contribution of this approach is twofold: 1 The mechanism of encapsulation and injection can be used to refactor the current Mondrian caches improving the code reuse. 2 The code legibility is increased because the Cache Concern is extracted from the main concern leaving a cleaner code.15 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  24. 24. Motivation First Approach Aspect-based Refactoring Results Performance d E 16 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study
  25. 25. Motivation First Approach Aspect-based Refactoring Results17 / 17 S. Vidal, C. Marcos, A. Bergel, G. Arévalo Memoization Aspects: a Case Study

×