Advertisement

Application of Graph Rewriting to Optimization and Parallelization of Programs

Part of the Computing Supplementum book series (COMPUTING, volume 3)

Abstract

Application of Graph Rewriting to Optimization and Parallelization of Programs. Classical automatic optimization is starting with linearized intermediate code and builds up graph-like data struetures (flow graph, DAGs, data flow analysis data). Most of the information which was already known by the upper part of the compiler now has to be detected again. We start with a graph-like intermediate code in which all structural information of the source is still present. Optimization is then carried out by graph manipulations. This is sketched by some examples, namely local common subexpression elimination, motion of loop invariant computations, and induction variable elimination. The usual way in parallelization is also to build up graph-like information (data graph) from flattened code. Here, the parallelization of linear programs and microparallelization within expressions are regarded, starting again with a graph-like intermediate code. There are a lot of further tasks in the context of reliable software generation which can be efficiently performed on high-level intermediate code.

Keywords

Basic Block Array Element Graph Transformation Program Graph Graph Grammar 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

Zusammenfassung

Anwendung von Graphersetzungen auf Optimierung und Parallelisierung von Programmen. Bei der automatischen Optimierung von Programmen beginnt man meist mit linearisiertem Zwischencode und baut daraus, zum Teil durch aufwendige Algorithmen, graphähnliche Datenstrukturen auf. Der größte Teil der so aufgefundenen Information war dem oberen Teil des Compilers bereits bekannt, diese Information wurde aber nicht an den Zwischencode weitergegeben. Wir gehen dagegen gleich von einem graphähnlichen Zwischencode aus, der die Strukturinformation des betreffenden Quellprogramms noch vollständig enthält. Optimierungen werden dann durch Graphmanipulationen auf diesem Zwischencode durchgeführt. Wir betrachten diese Vorgehensweise an zwei Beispielen, nämlich der Elimination (lokaler) gemeinsamer Teilausdrücke und der Optimierung von Schleifen. Bei der Parallelisierung von Programmen baut man sich ebenfalls einen Graphen (Datengraphen) aus Quell- oder Zwischencode auf. Wir gehen auch hier wieder von graphähnlichem Zwischencode aus. Aus diesem Bereich betrachten wir die Parallelisierung von linearen Programmen und von Ausdrücken. Optimierung und Parallelisierung sind nur zwei Aufgaben aus dem Bereich der Erzeugung zuverlässiger und effizienter Software, die sich auf graphähnlichem Zwischencode gut durchführen lassen.

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. [AU77]
    Aho, A. V., Ullman, J. D.: Principles of Compiler design. Reading, Mass.: Addison-Wesley 1977.Google Scholar
  2. [Ba79]
    Bauer, F. L., et al.: Program development by transformation, Section III of program construction (Bauer, F. L., ed.). Lect. Notes Comp. Sei. 69, 235–492 (1979).Google Scholar
  3. [BNW78]
    Brendel, W., Nagl, M., Weber, D.: Implementation of sequential and parallel graph rewriting systems. Applied Computer Science 8, 79–106 (1978).Google Scholar
  4. [CER79]
    Claus, V., Ehrig, H., Rosen, B. K. (eds.): Graph grammars and their application to Computer science and biology. (Lect. Notes in Comp. Sei., Vol. 79.) Berlin-Heidelberg-New York: Springer 1979.MATHGoogle Scholar
  5. [FKZ79]
    Farrow, R., Kennedy, K., Zucconi, L.: Graph grammars and global program data flow analysis. Techn. Rep., Dpt. Math. Sei., Rice University, Texas.Google Scholar
  6. [HHS76]
    Händler, W., Hofmann, F., Schneider, H. J.: A general purpose array with a broad spectrum of applications. (Informatik-Fachberichte, Vol. 4), pp. 311–335. Berlin-Heidelberg-New York: Springer 1976.Google Scholar
  7. [Kn74]
    Knuth, D.: Structured programming with goto statements. Computing Surveys 8,261–301 (1974).CrossRefGoogle Scholar
  8. [Ko76]
    Kotov, V. E.: Theory of parallel programming I, Survey of practical aspects. In: Advances in Information Systems Sciences (Ton, J. T., ed.), Vol. 6, pp. 1–55. New York: Plenum Press 1976.CrossRefGoogle Scholar
  9. [Ku77]
    Kuck, D. J.: A survey of parallel machine Organization and programming. Computing Surveys 9, 29–59 (1977).MathSciNetMATHCrossRefGoogle Scholar
  10. [Lo76]
    Loveman, D. E.: Program improvement by source to source transformation. Proc. 3rd ACM POPL Symp. 140–152 (1976).Google Scholar
  11. [Na79]
    Nagl, M.: Graph-Grammatiken: Theorie, Anwendungen, Implementierung. Wiesbaden: Vieweg 1979.MATHGoogle Scholar
  12. [Na80]
    Nagl, M.: An incremental Compiler as component of a system for Software generation. Proc. 6th Gl Conference on Programming Languages and Program Development. (Informatik- Fachberichte, Vol. 25), pp. 29–44. Berlin-Heidelberg-New York: Springer 1980.Google Scholar
  13. [Na80]
    Nagl, M.: GRAPL — A programming language for handling dynamic problems on graphs. In: Discrete Struetures and Algorithms (Pape, U., ed.), pp. 25–45. München: Carl Hanser Verlag 1980.Google Scholar
  14. [Nr76]
    Naring’yani, A. S.: Theory of parallel programming II, Survey of formal models, as [Ko76] pp. 57–113.Google Scholar
  15. [Ro77]
    Rosen, B. K.: High level data flow analysis. Comm. ACM 20, 712–724 (1977).MATHCrossRefGoogle Scholar
  16. [Ro79]
    Rosen, B. K.: Data flow analysis for procedural languages. Journ. ACM 26, 322–344 (1979).MATHCrossRefGoogle Scholar
  17. [Sn75]
    Schneider, H. J.: Syntax-directed description of incremental Compilers. (Lect. Notes Comp. Sei., Vol. 26), pp. 192–201. Berlin-Heidelberg-New York: Springer 1975.Google Scholar
  18. [U173]
    Ullman, J. D.: Fast algorithms for the elimination of common subexpressions. Acta Informatica 2, 191–213 (1973).MathSciNetMATHCrossRefGoogle Scholar
  19. [Wi79]
    Wilhelm, R.: Computation and use of data flow information in optimizing Compilers. Acta Informatica 12, 209–225 (1979).MATHCrossRefGoogle Scholar
  20. [Wu75]
    Wulf, W., et al.: The Design of an Optimizing Compiler. New York: American Elsevier 1975.MATHGoogle Scholar
  21. [ZB74]
    Zelkowitz, M. V., Bail, W. G.: Optimization of structured programs. Software Pract. & Exp. 4,51–57 (1974).MATHCrossRefGoogle Scholar

Copyright information

© Springer-Verlag 1981

Authors and Affiliations

  • M. Nagl
    • 1
  1. 1.Seminar für InformatikEWH KoblenzKoblenzFederal Republic of Germany

Personalised recommendations