<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <title>Project-Team:COMPSYS</title>
    <link rel="stylesheet" href="../static/css/raweb.css" type="text/css"/>
    <meta name="description" content="Research Program - Mathematical tools"/>
    <meta name="dc.title" content="Research Program - Mathematical tools"/>
    <meta name="dc.subject" content=""/>
    <meta name="dc.publisher" content="INRIA"/>
    <meta name="dc.date" content="(SCHEME=ISO8601) 2014-01"/>
    <meta name="dc.type" content="Report"/>
    <meta name="dc.language" content="(SCHEME=ISO639-1) en"/>
    <meta name="projet" content="COMPSYS"/>
    <!-- Piwik -->
    <script type="text/javascript" src="/rapportsactivite/piwik.js"></script>
    <noscript><p><img src="//piwik.inria.fr/piwik.php?idsite=49" style="border:0;" alt="" /></p></noscript>
    <!-- End Piwik Code -->
  </head>
  <body>
    <div class="tdmdiv">
      <div class="logo">
        <a href="http://www.inria.fr">
          <img style="align:bottom; border:none" src="../static/img/icons/logo_INRIA-coul.jpg" alt="Inria"/>
        </a>
      </div>
      <div class="TdmEntry">
        <div class="tdmentete">
          <a href="uid0.html">Project-Team Compsys</a>
        </div>
        <span>
          <a href="uid1.html">Members</a>
        </span>
      </div>
      <div class="TdmEntry">Overall Objectives<ul><li><a href="./uid3.html">Introduction</a></li><li><a href="./uid6.html">General Presentation</a></li><li><a href="./uid11.html">Summary of Compsys I Achievements</a></li><li><a href="./uid17.html">Quick view of Compsys II
Achievements and directions for Compsys III</a></li></ul></div>
      <div class="TdmEntry">Research Program<ul><li><a href="uid21.html&#10;&#9;&#9;  ">Architecture and compilation trends</a></li><li><a href="uid36.html&#10;&#9;&#9;  ">Code analysis, code transformations, code optimizations</a></li><li class="tdmActPage"><a href="uid39.html&#10;&#9;&#9;  ">Mathematical tools</a></li></ul></div>
      <div class="TdmEntry">Application Domains<ul><li><a href="uid41.html&#10;&#9;&#9;  ">Compilers for Embedded Computing Systems</a></li><li><a href="uid42.html&#10;&#9;&#9;  ">Users of HPC Platforms and Scientific Computing</a></li></ul></div>
      <div class="TdmEntry">New Software and Platforms<ul><li><a href="uid46.html&#10;&#9;&#9;  ">Introduction</a></li><li><a href="uid47.html&#10;&#9;&#9;  ">Pip</a></li><li><a href="uid48.html&#10;&#9;&#9;  ">Cl@k</a></li><li><a href="uid49.html&#10;&#9;&#9;  ">Syntol</a></li><li><a href="uid52.html&#10;&#9;&#9;  ">Dcc</a></li><li><a href="uid53.html&#10;&#9;&#9;  ">PoCo</a></li><li><a href="uid58.html&#10;&#9;&#9;  ">Bee</a></li><li><a href="uid59.html&#10;&#9;&#9;  ">Chuba</a></li><li><a href="uid60.html&#10;&#9;&#9;  ">RanK</a></li><li><a href="uid61.html&#10;&#9;&#9;  ">Aspic</a></li><li><a href="uid62.html&#10;&#9;&#9;  ">C2fsm</a></li><li><a href="uid63.html&#10;&#9;&#9;  ">SToP</a></li><li><a href="uid64.html&#10;&#9;&#9;  ">Termite</a></li><li><a href="uid65.html&#10;&#9;&#9;  ">Simplifiers</a></li></ul></div>
      <div class="TdmEntry">New Results<ul><li><a href="uid67.html&#10;&#9;&#9;  ">Highlights of the Year</a></li><li><a href="uid78.html&#10;&#9;&#9;  ">Data-Aware Process Networks</a></li><li><a href="uid79.html&#10;&#9;&#9;  ">Preventing from Out-of-Bound Memory Accesses</a></li><li><a href="uid82.html&#10;&#9;&#9;  ">Scaling Termination Proofs</a></li><li><a href="uid85.html&#10;&#9;&#9;  ">Equivalence-Checking of Programs with Reductions</a></li><li><a href="uid86.html&#10;&#9;&#9;  ">Analysis and Transformation of
Parallel Programs</a></li><li><a href="uid87.html&#10;&#9;&#9;  ">Handling Polynomials for Program Analysis and
Transformation</a></li><li><a href="uid88.html&#10;&#9;&#9;  ">Parametric Loop Tiling with Constant Aspect Ratio</a></li><li><a href="uid89.html&#10;&#9;&#9;  ">Exact and Approximated Data-Reuse Optimizations for Tiling with
Parametric Sizes</a></li><li><a href="uid90.html&#10;&#9;&#9;  ">Studying Optimal Spilling in the Light of SSA</a></li></ul></div>
      <div class="TdmEntry">Bilateral Contracts and Grants with Industry<ul><li><a href="uid92.html&#10;&#9;&#9;  ">ManycoreLabs Project with Kalray</a></li><li><a href="uid93.html&#10;&#9;&#9;  ">Technological Transfer: XtremLogic Start-Up</a></li></ul></div>
      <div class="TdmEntry">Partnerships and Cooperations<ul><li><a href="uid95.html&#10;&#9;&#9;  ">Regional Initiatives</a></li><li><a href="uid98.html&#10;&#9;&#9;  ">National Initiatives</a></li><li><a href="uid100.html&#10;&#9;&#9;  ">European Initiatives</a></li><li><a href="uid102.html&#10;&#9;&#9;  ">International Initiatives</a></li><li><a href="uid108.html&#10;&#9;&#9;  ">International Research Visitors</a></li></ul></div>
      <div class="TdmEntry">Dissemination<ul><li><a href="uid115.html&#10;&#9;&#9;  ">Promoting Scientific Activities</a></li><li><a href="uid126.html&#10;&#9;&#9;  ">Teaching - Supervision - Juries</a></li><li><a href="uid149.html&#10;&#9;&#9;  ">Popularization</a></li></ul></div>
      <div class="TdmEntry">
        <div>Bibliography</div>
      </div>
      <div class="TdmEntry">
        <ul>
          <li>
            <a id="tdmbibentyear" href="bibliography.html">Publications of the year</a>
          </li>
          <li>
            <a id="tdmbibentfoot" href="bibliography.html#References">References in notes</a>
          </li>
        </ul>
      </div>
    </div>
    <div id="main">
      <div class="mainentete">
        <div id="head_agauche">
          <small><a href="http://www.inria.fr">
	    
	    Inria
	  </a> | <a href="../index.html">
	    
	    Raweb 
	    2014</a> | <a href="http://www.inria.fr/en/teams/compsys">Presentation of the Project-Team COMPSYS</a> | <a href="http://www.ens-lyon.fr/LIP/COMPSYS/index.html.en">COMPSYS Web Site
	  </a></small>
        </div>
        <div id="head_adroite">
          <table class="qrcode">
            <tr>
              <td>
                <a href="compsys.xml">
                  <img style="align:bottom; border:none" alt="XML" src="../static/img/icons/xml_motif.png"/>
                </a>
              </td>
              <td>
                <a href="compsys.pdf">
                  <img style="align:bottom; border:none" alt="PDF" src="IMG/qrcode-compsys-pdf.png"/>
                </a>
              </td>
              <td>
                <a href="../compsys/compsys.epub">
                  <img style="align:bottom; border:none" alt="e-pub" src="IMG/qrcode-compsys-epub.png"/>
                </a>
              </td>
            </tr>
            <tr>
              <td/>
              <td>PDF
</td>
              <td>e-Pub
</td>
            </tr>
          </table>
        </div>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid36.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid41.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
      <div id="textepage">
        <!--DEBUT2 du corps du module-->
        <h2>Section: 
      Research Program</h2>
        <h3 class="titre3">Mathematical tools</h3>
        <p>All compilers have to deal with <i>sets</i> and relations. In classical
compilers, these sets are finite: the set of statements of a program, the set
of its variables, its abstract syntax tree (AST), its control-flow graph
(CFG), and many others. It is only in the first phase of compilation,
parsing, that one has to deal with infinite objects, regular and context-free
languages, and those are represented by finite grammars, and are processed by
a symbolic algorithm, <tt>yacc</tt>  or one of its clones.</p>
        <p>When tackling parallel programs and parallel compilation, it was soon
realized that this position was no longer tenable. Since it makes no
sense to ask whether a statement can be executed in parallel with itself,
one has to consider sets of operations, which may be so large as to
forbid an extensive representation, or even be infinite. The same is true
for dependence sets, for memory cells, for communication sets, and for
many other objects a parallel compiler has to consider. The representation
is to be <i>symbolic</i>, and all necessary algorithms have to be promoted
to symbolic versions.</p>
        <p>Such symbolic representations have to be efficient – the formula representing
a set has to be much smaller than the set itself – and effective – the
operations one needs, union, intersection, emptiness tests and many others –
have to be feasible and fast. As a parenthesis, note that progress in algorithm
design has blurred the distinction between polynomially-solvable and
NP-complete problems, and between decidable and undecidable questions. For
instance SAT, SMT, and ILP software tools solve efficiently many NP-complete
problems, and the Z3 tool is able to “solve” many instances of the
undecidable Hilbert's 10th problem.</p>
        <p>Since the times of Pip and of the Polylib, Compsys has been active in the
implementation of basic mathematical tools for program analysis and synthesis.
Pip is still developed by Paul Feautrier and Cédric Bastoul, while the
Polylib is now taken care of by the Inria Camus project, which introduced
Ehrhart polynomials. These tools are still in use world-wide and they also
have been reimplemented many times with (sometimes slight) improvements, e.g.,
as part of the Parma Polylib, of Sven Verdoolaege's Isl and Barvinok libraries,
or of the Jollylib of Reservoir Labs. Other groups also made a lot of efforts
towards the democratization of the use of polyhedral techniques, in particular
the Alchemy Inria project, with Cloog and the development of Graphite in GCC,
and Sadayappan's group in the USA, with the development of U. Bondhugula's
Pluto prototype compiler. The same effort is made through the PPCG prototype
compiler (for GPU) and Pencil (directives-based language on top of PPCG).</p>
        <p>After 2009, Compsys continued to focus on the introduction of concepts and
techniques to extend the polytope model, with a shift toward tools that may
prepare the future. For instance, PoCo and C2fsm are able to parse
general programs, not just SCoPs (static control programs), while the efficient
handling of Boolean affine formulas  <a href="./bibliography.html#compsys-2014-bid8">[23]</a>  is a prerequisite for
the construction of non-convex approximations. Euclidean lattices provide an
efficient abstraction for the representation of spatial phenomena, and the
construction of <i>critical lattices</i> as embedded in the tool Cl@k is a
first step towards memory optimization in stream languages and may be useful in
other situations. Our work on Chuba introduced a new element-wise array
reuse analysis and the possibility of handling approximations. Our work on the
analysis of while loops is both an extension of the polytope model itself
(i.e., beyond SCoPs) and of its applications, here links with program
termination and worst-case execution time (WCET) tools.</p>
        <p>A recent example of the same approach is the proposal by Paul Feautrier to use
polynomials for program analysis and
optimization <a href="./bibliography.html#compsys-2014-bid9">[5]</a> . The associated tools are based on
Handelman and Schweighofer theorems, the polynomial analogue of Farkas lemma.
While this is definitely work in progress, with many unsolved questions, it has
the potential of greatly enlarging the set of tractable programs.</p>
        <p>As a last remark, observe that a common motif of these development is the
transformation of finite algorithms into symbolic algorithms, able to
solve very large or even infinite instances. For instance, PIP is a symbolic
extension of the Simplex; our work on memory allocation is a symbolic
extension of the familiar register allocation problem; loop scheduling
extends DAG scheduling. Many other algorithms await their symbolic
transformation: a case in point is resource-constrained scheduling.</p>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid36.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid41.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
    </div>
  </body>
</html>
