<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE raweb PUBLIC "-//INRIA//DTD " "raweb2.dtd">
<raweb xml:lang="en" year="2011">
  <identification id="camus" isproject="false">
    <shortname>CAMUS</shortname>
    <projectName>Compilation pour les Architectures MUlti-coeurS</projectName>
    <theme-de-recherche>Architecture and Compiling</theme-de-recherche>
    <domaine-de-recherche>Algorithmics, Programming, Software and Architecture</domaine-de-recherche>
    <structure_exterieure type="Labs">
      <libelle>Laboratoire des sciences de l'image,de l'informatique et de la télédétection (L.S.I.I.T)</libelle>
    </structure_exterieure>
    <structure_exterieure type="Organism">
      <libelle>CNRS</libelle>
    </structure_exterieure>
    <structure_exterieure type="Organism">
      <libelle>Université de Strasbourg</libelle>
    </structure_exterieure>
    <UR name="Nancy"/>
    <keywords>
      <term>Compiling</term>
      <term>Embedded Systems</term>
      <term>Hardware Accelerators</term>
      <term>Proofs Of Programs</term>
      <term>Formal Methods</term>
      <term>Processors</term>
    </keywords>
    <moreinfo/>
  </identification>
  <team id="uid1">
    <person key="camus-2010-idm102060720576">
      <firstname>Philippe</firstname>
      <lastname>Clauss</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>Enseignant</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Team leader, Professor, Université de Strasbourg</moreinfo>
      <hdr>oui</hdr>
    </person>
    <person key="calvi-2006-idm468055693984">
      <firstname>Éric</firstname>
      <lastname>Violard</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>Enseignant</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Associate Professor, Université de Strasbourg</moreinfo>
      <hdr>oui</hdr>
    </person>
    <person key="camus-2010-idm102060713392">
      <firstname>Vincent</firstname>
      <lastname>Loechner</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>Enseignant</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Associate Professor, Université de Strasbourg</moreinfo>
    </person>
    <person key="camus-2010-idm102060710304">
      <firstname>Alain</firstname>
      <lastname>Ketterlin</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>Enseignant</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Associate Professor, Université de Strasbourg</moreinfo>
    </person>
    <person key="logical-2006-idm356512361424">
      <firstname>Julien</firstname>
      <lastname>Narboux</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>Enseignant</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Associate Professor, Université de Strasbourg</moreinfo>
    </person>
    <person key="camus-2010-idm102060704032">
      <firstname>Nicolas</firstname>
      <lastname>Magaud</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>Enseignant</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Associate Professor, Université de Strasbourg</moreinfo>
    </person>
    <person key="camus-2010-idm102060700896">
      <firstname>Benoît</firstname>
      <lastname>Pradelle</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>PhD</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Université de Strasbourg</moreinfo>
    </person>
    <person key="camus-2010-idm102060697840">
      <firstname>Alexandra</firstname>
      <lastname>Jimborean</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>PhD</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Université de Strasbourg</moreinfo>
    </person>
    <person key="camus-2011-idm533830767904">
      <firstname>Jean-François</firstname>
      <lastname>Dollinger</lastname>
      <affiliation>UnivFr</affiliation>
      <categoryPro>PhD</categoryPro>
      <research-centre>Nancy</research-centre>
      <moreinfo>Université de Strasbourg</moreinfo>
    </person>
  </team>
  <presentation id="uid2">
    <bodyTitle>Overall Objectives</bodyTitle>
    <subsection id="uid3" level="1">
      <bodyTitle>Overall Objectives</bodyTitle>
      <p>The CAMUS team is focusing on developping, adapting and extending automatic parallelizing and optimizing techniques, as well as proof and certification methods, for the efficient use of
      current and future multicore processors.</p>
      <p>The team's research activities are organized into five main issues that are closely related to reach the following objectives: performance, correction and productivity. These issues are:
      static parallelization and optimization of programs (where all statically detected parallelisms are expressed as well as all “hypothetical” parallelisms which would be eventually taken
      advantage of at runtime), profiling and execution behavior modeling (where expressive representation models of the program execution behavior will be used as engines for dynamic parallelizing
      processes), dynamic parallelization and optimization of programs (such transformation processes running inside a virtual machine), object-oriented programming and compiling for multicores
      (where object parallelism, expressed or detected, has to result in efficient runs), and finally program transformations proof (where the correction of many static and dynamic program
      transformations has to be ensured).</p>
    </subsection>
    <subsection id="uid4" level="1">
      <bodyTitle>Highlights</bodyTitle>
      <simplelist>
        <li id="uid5">
          <p noindent="true">The Associate Team 
          <i>Ancome</i>, regrouping Camus and their Argentinian partners from the LaFhis team of the University of Buenos Aires, has started officially its activities in January 2011.</p>
        </li>
        <li id="uid6">
          <p noindent="true">Philippe Clauss, Vincent Loechner and Diego Garbervetsky (Associate Team Ancome), published a chapter in the book 
          <i>Energy-Aware Memory Management for Embedded Systems</i>, CRC Press 2012, on the paramatric estimation of memory consumption of programs.</p>
        </li>
        <li id="uid7">
          <p noindent="true">Benoît Pradelle defended his PhD thesis December the 20th 2011 at the University of Strasbourg. He presented his results on dynamic selection of parallel code versions,
          automatic parallelization of binary codes and polyhedral dynamic and speculative parallelization. His jury was composed by Albert Cohen (reviewer), from INRIA, Sanjay Rajopadhye (reviewer),
          Colorado State University, USA, John Cavazos (examiner), University of Delaware, USA, Philippe Clauss, Alain Ketterlin and Vincent Loechner (advisors).</p>
        </li>
        <li id="uid8">
          <p noindent="true">Alexandra Jimborean received the best poster award at the international conference Code Generation and Optimization (CGO) that was held in Chamonix, France, in April
          2011.</p>
        </li>
      </simplelist>
    </subsection>
  </presentation>
  <fondements id="uid9">
    <bodyTitle>Scientific Foundations</bodyTitle>
    <subsection id="uid10" level="1">
      <bodyTitle>Research directions</bodyTitle>
      <p>The various objectives we are expecting to reach are directly related to the search of adequacy between the sofware and the new multicore processors evolution. They also correspond to the
      main research directions suggested by Hall, Padua and Pingali in 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid0" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Performance, correction and productivity must be the users' perceived
      effects. They will be the consequences of research works dealing with the following issues:</p>
      <simplelist>
        <li id="uid11">
          <p noindent="true">Issue 1: Static parallelization and optimization</p>
        </li>
        <li id="uid12">
          <p noindent="true">Issue 2: Profiling and execution behavior modeling</p>
        </li>
        <li id="uid13">
          <p noindent="true">Issue 3: Dynamic program parallelization and optimization, virtual machine</p>
        </li>
        <li id="uid14">
          <p noindent="true">Issue 4: Object-oriented programming and compiling for multicores</p>
        </li>
        <li id="uid15">
          <p noindent="true">Issue 5: Proof of program transformations for multicores</p>
        </li>
      </simplelist>
      <p>Efficient and correct applications development for multicore processors needs stepping in every application development phase, from the initial conception to the final run.</p>
      <p>Upstream, all potential parallelism of the application has to be exhibited. Here static analysis and transformation approaches (issue 1) must be processed, resulting in a 
      <i>multi-parallel</i>intermediate code advising the running virtual machine about all the parallelism that can be taken advantage of. However the compiler does not have much knowledge about the
      execution environment. It obviously knows the instruction set, it can be aware of the number of available cores, but it does not know the effective available resources at any time during the
      execution (memory, number of free cores, etc.).</p>
      <p>That is the reason why a “virtual machine” mechanism will have to adapt the application to the resources (issue 3). Moreover the compiler will be able to take advantage only of a part of the
      parallelism induced by the application. Indeed some program information (variables values, accessed memory adresses, etc.) being available only at runtime, another part of the available
      parallelism will have to be generated on-the-fly during the execution, here also, thanks to a dynamic mechanism.</p>
      <p>This on-the-fly parallelism extraction will be performed using speculative behavior models (issue 2), such models allowing to generate speculative parallel code (issue 3). Between our
      behavior modeling objectives, we can add the behavior monitoring, or profiling, of a program version. Indeed current and future architectures complexity avoids assuming an optimal behavior
      regarding a given program version. A monitoring process will allow to select on-the-fly the best parallelization.</p>
      <p>These different parallelizing steps are schematized on figure 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid16" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      <object id="uid16">
        <table>
          <tr>
            <td>
              <ressource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="IMG/figure_anglais.png" type="float" height="142.26378pt" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest" media="WEB"/>
            </td>
          </tr>
        </table>
        <caption>Automatic parallelizing steps for multicore architectures</caption>
      </object>
      <p>The more and more widespread usage of object-oriented approaches and languages emphasizes the need for specific multicore programming tools. The object and method formalism implies specific
      execution schemes that translate in the final binary by quite distant elementary schemes. Hence the execution behavior control is far more difficult. Analysis and optimization, either static or
      dynamic, must take into account from the outset this distortion between object-oriented specification and final binary code: how can object or method parallelization be translated (issue
      4).</p>
      <p>Our project lies on the conception of a production chain for efficient execution of an application on a multicore architecture. Each link of this chain has to be formally verified in order
      to ensure correction as well as efficiency. More precisely, it has to be ensured that the compiler produces a correct intermediate code, and that the virtual machine actually performs the
      parallel execution semantically equivalent to the source code: every transformation applied to the application, either statically by the compiler or dynamically by the virtual machine, must
      preserve the initial semantics. They must be proved formally (issue 5).</p>
      <p>In the following, those different issues are detailed while forming our global and long term vision of what has to be done.</p>
    </subsection>
    <subsection id="uid17" level="1">
      <bodyTitle>Static parallelization and optimization</bodyTitle>
      <participants>
        <person key="camus-2010-idm102060713392">
          <firstname>Vincent</firstname>
          <lastname>Loechner</lastname>
        </person>
        <person key="camus-2010-idm102060720576">
          <firstname>Philippe</firstname>
          <lastname>Clauss</lastname>
        </person>
        <person key="calvi-2006-idm468055693984">
          <firstname>Éric</firstname>
          <lastname>Violard</lastname>
        </person>
        <person key="camus-2010-idm102060697840">
          <firstname>Alexandra</firstname>
          <lastname>Jimborean</lastname>
        </person>
      </participants>
      <p>Static optimizations, from source code at compile time, benefit from two decades of research in automatic parallelization: many works address the parallelization of loop nests accessing
      multi-dimensional arrays, and these works are now mature enough to generate efficient parallel code 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid1" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Low-level optimizations, in the assembly code generated by the
      compiler, have also been extensively dealt for single-core and require few adaptations to support multicore architectures. Concerning multicore specific parallelization, we propose to explore
      two research directions to take full advantage of these architectures. They are described below.</p>
      <subsection id="uid18" level="2">
        <bodyTitle>State of the art</bodyTitle>
        <p>Upstream, an easy interprocedural dependence analysis allows to handle complete programs (but recursivity: recursive functions must be transformed into iterative functions). Concerning
        iterative control we will use the polyhedral model, a formalism developped these last two decades, which allows to represent the execution of a loop nest by scanning a polytope.</p>
        <p>When compiling an application, if it contains loop nests with affine bounds accessing scalars or arrays accessed using affine functions, the polyhedral model allows to:</p>
        <simplelist>
          <li id="uid19">
            <p noindent="true">compute the dependence graph, which describes the order in which the dependent instructions must be executed 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid2" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>;</p>
          </li>
          <li id="uid20">
            <p noindent="true">generate a schedule, which extracts some parallelism from the dependence graph 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid3" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid4" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>;</p>
          </li>
          <li id="uid21">
            <p noindent="true">generate an allocation, which assigns a processor (or a core) to a set of iterations of the loop nest to be scanned.</p>
          </li>
        </simplelist>
        <p>This last allocation step needs a thorough knowledge of the target architecture, as many crucial choices will result in performance hazards: for example, the volume and flow of
        inter-processor communications and synchronization; the data locality and the effects of the TLB (Translation Lookaside Buffer) and the various cache levels and distributions; or the register
        allocation optimizations. There are many techniques to control these parameters, and each architecture needs specific choices, of a valid schedule, of a parallel loop iterations distribution
        (bloc-, cyclic-, or tiled), of a loop-unrolling factor, as well as a memory data layout and a prefetch strategy (when available). They require powerfull mathematical tools, such as counting
        the number of integer points contained in a parametric polytope.</p>
        <p>Our own contributions in this area are significant. Concerning schedule and data placement, we proposed new advances in minimizing the number of communications for parallel architectures 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid5" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>and in cache access optimizations 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid6" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid7" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. We also proposed essential advances in parametric polytope
        manipulation 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid8" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid9" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, developped the first algorithm to count integer points in a
        parametric polytope as an Ehrhart polynomial 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid10" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, and proposed successive improvements of this algorithm 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid11" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid12" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. We implemented these results in the free software 
        <i>PolyLib</i>, utilized by many researchers around the world.</p>
      </subsection>
      <subsection id="uid22" level="2">
        <bodyTitle>Adapting parallelization to multicore architecture</bodyTitle>
        <p>The first research direction to be explored is multicore specific efficient optimizations. Indeed, multicore architectures need specific optimizations, or we will get underlinear
        accelerations, or even decelerations. Multicore architectures may have the following properties: specific memory hierarchy, with distributed low-level cache and (possibly semi-) shared high
        level caches; software-controlled memory hierarchies (memory hints, local stores or scratchpads for example); optimized access to contiguous memory addresses or to separate memory banks; SIMD
        or vectorial execution in groups of cores, and synchronous execution; higher register allocation pressure when several threads use the same hardware (as in GPGPUs for example); etc.</p>
        <p>A schedule and an allocation must be chosen wisely in order to obtain good performances. On NVIDIA GPGPUs, using the CUDA language, Baskaran et al. 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid13" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>obtained interesting results that have been implemented in their
        PLuTo compiler framework. However, they are based on many empirical and imprecise techniques, and require simulations to fine-tune the optimizations: they can be improved. Memory hierarchy
        efficient control is a cornerstone of tomorrow's multicore architectures performance. Compiler-optimizers have to evolve to meet this requirement.</p>
        <p>Simulation and (partial-) profiling may however remain necessary in some cases, when static analysis reaches its intrinsic limits: when the execution of a program depends on dynamic
        parameters, when it uses complex pointer arithmetic, or when it performs indirect array accesses for example (as is often the case in 
        <i>while</i>loops, out of the scope of the classical polyhedral model). In these cases, the compiler should rely on the profiler, and generate a code that interacts with the dynamic
        optimizer. This is the link with issues 2 and 3 of this research project.</p>
      </subsection>
      <subsection id="uid23" level="2">
        <bodyTitle>Expressing many potential parallelisms</bodyTitle>
        <p>The dynamic optimizer (issue 3) must be able to exploit various parallel codes to compare them and the best one to choose, possibly swapping from a code to another during execution. The
        compiler must therefore generate different potentially efficient versions of a code, depending on fixed parameters such as the schedule or the data layout, and dynamic parameters such as the
        tile size or the unrolling factor.</p>
        <p>The compiler then generates many variants of 
        <i>effective</i>parallelism, formally proved by the static analyzer. It may also generate variants of code that have not been formally validated, due to the analyzer limits, and that have to
        be checked during execution by the dynamic optimizer: 
        <i>hypothetical</i>parallelism. Hypothetical parallelism could be expressed as a piece of code, valid under certain conditions. Effective and hypothetical parallelisms are called 
        <i>potential parallelism</i>. The variants of potential parallelism will be expressed in an intermediate language that has to be discovered.</p>
        <p>Using compiler directives is an interesting way to define this intermediate language. Among the usual directives, we distinguish schedule directives for shared memory architectures (such
        as the OpenMP
        <footnote id="uid24" id-text="1"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.openmp.org" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>www.
          <allowbreak/>openmp.
          <allowbreak/>org</ref></footnote>
        <i>parallel</i>directive), and placement directives for distributed memory architectures (for example the HPF
        <footnote id="uid25" id-text="2"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hpff.rice.edu" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hpff.
          <allowbreak/>rice.
          <allowbreak/>edu</ref></footnote>
        <i>ALIGN</i>directive). These two types of directives are conjointly necessary to take full profit of multicore architectures. However, we have to study their complementarity and solve the
        interdependence or conflict that may arise between them. Moreover, new directives should allow to control data transfers between different levels of the memory hierarchy.</p>
        <p>We are convinced that the definition of such a language is required in the next advances in compilation for multicore architectures, and there does not exist such an ambitious project to
        our knowledge. The OpenCL project
        <footnote id="uid26" id-text="3"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.khronos.org/opencl" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>www.
          <allowbreak/>khronos.
          <allowbreak/>org/
          <allowbreak/>opencl</ref></footnote>, presented as an general-purpose and efficient multicore programming environment, is too low-level to be exploitable. We propose to define a new high level language based on
        compilation directives, that could be used by the skilled programmer or automatically generated by a compiler-optimizer (like OpenMP, recently integrated in the 
        <i>gcc</i>compiler suite).</p>
      </subsection>
    </subsection>
    <subsection id="uid27" level="1">
      <bodyTitle>Profiling and execution behavior modeling</bodyTitle>
      <participants>
        <person key="camus-2010-idm102060710304">
          <firstname>Alain</firstname>
          <lastname>Ketterlin</lastname>
        </person>
        <person key="camus-2010-idm102060720576">
          <firstname>Philippe</firstname>
          <lastname>Clauss</lastname>
        </person>
        <person key="camus-2010-idm102060700896">
          <firstname>Benoît</firstname>
          <lastname>Pradelle</lastname>
        </person>
      </participants>
      <p>The increasing complexity of programs and hardware architectures makes it ever harder to characterize beforehand a given program's run time behavior. The sophistication of current compilers
      and the variety of transformations they are able to apply cannot hide their intrinsic limitations. As new abstractions like transactional memories appear, the dynamic behavior of a program
      strongly conditions its observed performance. All these reasons explain why empirical studies of sequential and parallel program executions have been considered increasingly relevant. Such
      studies aim at characterizing various facets of one or several program runs, 
      <i>e.g.</i>, memory behavior, execution phases, etc. In some cases, such studies characterize more the compiler than the program itself. These works are of tremendous importance to highlight
      all aspects that escape static analysis, even though their results may have a narrow scope, due to the possible incompleteness of their input data sets.</p>
      <subsection id="uid28" level="2">
        <bodyTitle>Selective profiling and interaction with the compiler</bodyTitle>
        <p>In its simplest form, studying a given program's run time behavior consists in collecting and aggregating statistics, 
        <i>e.g.</i>, counting how many times routines or basic blocks are executed, or counting the number of cache misses during a certain portion of the execution. In some cases, data can be
        collected about more abstract events, like the garbage-collector frequency or the number and sizes of sent and received messages. Such measures are relatively easy to obtain, are frequently
        used to quantify the benefits of some optimization, and may suggest some way to improve performance. These techniques are now well-known, but mostly for sequential programs.</p>
        <p>These global studies have often been complemented by local, targeted techniques focused on some program portions, 
        <i>e.g.</i>, where static techniques remain inconclusive for some fixed duration. These usages of profiling are usually strongly related to the optimization they complement, and are set up
        either by the compiler or by the execution environment. Their results may be used immediately at run time, in which case they are considered a form of run time optimization 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid14" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. They can also be used offline to provide hints to a subsequent
        compilation cycle, in which case they constitute a form of profile-guided compilation, a strategy that is common in general purpose compilers.</p>
        <p>For instance, in the context where a set of possible parallelizations have been provided by the compiler (see issue 1), a profiling component can easily be made responsible for testing
        some relevant condition at run time (
        <i>e.g.</i>, that depends on input data) and for selecting the best between various versions of the code. Beyond such simple tasks, we expect that profiling will, at the beginning of the
        execution, have enough resources to conduct more elaborate analyzes. We believe that combining an “open” static analysis with an integrated profiling component is a promising approach, first
        because it may relieve the programmer of a large part of the tedious task of implementing the distribution of computations, and second to free the compiler of the obligation to choose between
        several optimizations in the absence of enough relevant data. The main open question here is to define precisely the respective roles of the compiler and the profiler, and also the amount and
        nature of information the former can transmit to the latter.</p>
      </subsection>
      <subsection id="uid29" level="2">
        <bodyTitle>Profiling and dynamic optimization</bodyTitle>
        <p>In the context of dynamic optimization, that is, when the compiler's abilities have been exhausted, a profiler can still do useful work, provided some additional capabilities 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid14" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. If it is able to instrument the code the way, 
        <i>e.g.</i>, a PIN-tool does  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid15" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, it has access to the whole program, including libraries (or, for
        example, the code of a low-level library called from a scripting language). This means that it has access to portions of the program that were not under the compiler's control. The profiler
        can then perform dynamic inter-procedural analyzes, for instance to compute dependencies to detect parallelism that wasn't apparent at compile time because of a function call in the body of a
        loop. More generally, if the profiler is able to reconstruct at run time some representation of the whole program, as in  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid16" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>for example, it is possible to let it search for any construct that
        can be optimized and/or parallelized in the context of the current execution. Several virtual machines, 
        <i>e.g.</i>, for Java or Microsoft CLR, have opened this way of optimizing programs, probably because virtual machines need to maintain an intermediate, structured representation of the
        running program.</p>
        <p>The possibility of running programs on architectures that include a large number of computing cores has given rise to new abstractions  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid17" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid18" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid19" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Transactional memories, for instance, aim at simplifying the
        management of conflicting concurrent accesses to a shared memory, a notoriously difficult problem  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid20" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. However, the performance of a transaction-based application
        heavily depends on its dynamic behavior, and too many conflicting accesses and rollbacks, severely affect performance. We bet that the need for multicore specific programming tools will lead
        to other abstractions based on speculative execution. Because of the very nature of speculation, all these abstractions will require run time evaluation, and maybe correction, to avoid
        pathological cases. The profiler has a central role here, because it can be made responsible for diagnosing inefficient use of speculative execution, and for taking corrective action, which
        means that it has to be integrated to the execution environment. We also think that the large scope and almost infinite potential uses of a profiling component may well suggest new parallel
        program abstractions, specially targeted at run time evaluation and adaptation.</p>
      </subsection>
      <subsection id="uid30" level="2">
        <bodyTitle>Run time program modeling</bodyTitle>
        <p>When profiling goes beyond simple aggregation of counts, it can, for example, sample a program's behavior and split its execution into phases. These phases may help target a subsequent
        evaluation on a new architecture  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid21" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. When profiling instruments the whole program to obtain a trace, 
        <i>e.g.</i>, of memory accesses, it is possible to use this trace for:</p>
        <simplelist>
          <li id="uid31">
            <p noindent="true">simulation, 
            <i>e.g.</i>, by varying the parameters of the memory hierarchy,</p>
          </li>
          <li id="uid32">
            <p noindent="true">for modeling, 
            <i>e.g.</i>, to reconstruct some specific model of the program  
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid16" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, or to extract dynamic dependencies that help identifying
            parallel sections  
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid22" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
          </li>
        </simplelist>
        <p>Handling such large execution traces, and especially compressing them, is a research topic by itself  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid23" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid24" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Our contribution to this topic 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid25" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>is unusual in that the result of compression is a sequence of loop
        nests where memory accesses and loop bounds are affine functions of the enclosing loop indices. Modeling a trace this way leads to slightly better average compression rates compared to other,
        less expressive techniques. But more importantly, it has the advantage to provide a result in symbolic form, and this result can be further analyzed with techniques usually restricted to the
        static analysis of source code. We plan to apply, in the short term, similar techniques to the modeling of dynamic dependencies, so as to be able to automatically extract parallelism from
        program traces.</p>
        <p>This kind of analysis is representative of a new kind of tools than could be named “parallelization assistants”  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid26" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid22" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Properties that can't be detected by the compiler but that appear
        to hold in one or several executions of a program can be submitted to the programmer, maybe along a suitable reformulation of its program using some class of abstraction, 
        <i>e.g.</i>, compiler directives. The goal is to provide help and guidance in adapting source code, in the same way a classical profiling tool helps pinpoint performance bottlenecks. Control
        and data dependencies are fundamental to such a tool. An execution trace provides an observed reality; for example a trace of memory addresses. If the observed dynamic dependencies provide a
        set of constraints, they also suggest a complete family of potential correct executions, be they parallel or sequential, and all these executions are equivalent to the reference execution.
        Being able to handle large traces, and representing them in some manageable way, means being able to highlight medium to large grain parallelism, which is especially interesting on multicore
        architectures and often difficult for compilers to discover, for example because of the use of pointers and the difficulty of eliminating potential aliasing. This can be seen as a machine
        learning problem, where the goal is to recover a hidden structure from a large sequence of events. This general problem has various incarnations, depending on how much the learner knows about
        the original program, on the kind of data obtained by profiling, on the class of structures sought, and on the objectives of the analysis. We are convinced that such studies will enrich our
        understanding of the behavior of programs, and of the programming concepts that are really useful. It will also lead to useful tools, and will open up new directions for dynamic
        optimization.</p>
      </subsection>
    </subsection>
    <subsection id="uid33" level="1">
      <bodyTitle>Dynamic parallelization and optimization, virtual machine</bodyTitle>
      <participants>
        <person key="camus-2010-idm102060720576">
          <firstname>Philippe</firstname>
          <lastname>Clauss</lastname>
        </person>
        <person key="camus-2010-idm102060710304">
          <firstname>Alain</firstname>
          <lastname>Ketterlin</lastname>
        </person>
        <person key="camus-2010-idm102060713392">
          <firstname>Vincent</firstname>
          <lastname>Loechner</lastname>
        </person>
        <person key="camus-2010-idm102060700896">
          <firstname>Benoît</firstname>
          <lastname>Pradelle</lastname>
        </person>
        <person key="camus-2010-idm102060697840">
          <firstname>Alexandra</firstname>
          <lastname>Jimborean</lastname>
        </person>
      </participants>
      <p>This link in the programming chain has become essential with the advent of the new multicore architectures. Still being considered as secondary with mono-core architectures, dynamic analysis
      and optimization are now one of the keys for controling those new mechanisms complexity. From now on, performed instructions are not only dedicated to the application functionalities, but also
      to its control and its transformation, and so in its own interest. Behaving like a computer virus, such a process should rather be qualified as a “vitamin”. It perfectly knows the current
      characteristics of the execution environment and owns some qualitative information thanks to a behavior modeling process (issue 2). It appends a significant part of optimizing ability compared
      to a static compiler, while observing live resources availability evolution.</p>
      <subsection id="uid34" level="2">
        <bodyTitle>State of the art</bodyTitle>
        <p><i>Dynamic</i>analysis and optimization, that is to say simultaneous to the program execution, have motivated a growing interest during the last decade, mainly because of the hardware
        architectures and applications growing complexity. Indeed, it has become more and more difficult to anticipate any program run simply from its source code, either because its control
        structures introduce some unknown objects before run (dynamic memory allocation, pointers, ...), or because the interaction between the target architecture and the program generates
        unpredictable behaviors. This is notably due to the appearance of more optimizing hardware units (prefetching units, speculative processing, code cache, branch prediction, etc.). With
        multicore architectures, this interest is growing even more. Works achieved in this area for mono-core processors have permitted to establish some classification of the so-called dynamic
        approaches, either based on the used methodologies or on the objectives.</p>
        <p>The first objective for any dynamic approach is to extract some live information at runtime relying on a profiling process. This essential step is the main objective of issue 2 (see
        sub-section 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid27" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>).</p>
        <p>Identifying some “hotspots” thanks to profiling is then used for performance improvement optimizations. Two main approaches can be distinguished:</p>
        <simplelist>
          <li id="uid35">
            <p noindent="true">the 
            <i>profile-guided</i>approach, where analysis and optimization of profile information are performed off-line, that is to say statically. A first run is only performed to extract
            information for driving a re-compilation. Related to this approach, 
            <i>iterative compilation</i>consists in running a code that has been transformed following different optimization possibilities (nature and sequencing of the applied optimizations), and
            then in re-compiling the transformed code guided by the collected performance information, and so on until obtaining a “best” program version. In order to promote a rapid convergence
            towards a better solution, some heuristics or some machine learning mechanisms are used 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid27" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid28" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid29" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. The main drawback of such approaches relates to the quality of
            the generated code which depends on the reference profiled execution, and more precisely on the used input data set, but also on the used hardware.</p>
          </li>
          <li id="uid36">
            <p noindent="true">the 
            <i>on-the-fly</i>approach consists in performing all steps at each run (profiling, analysis and transformation). The main constraint of this approach is that the time overhead has to be
            widely compensated by the benefits it generates. Several works propose such approaches dedicated to specific optimizations. We personally successfully implemented a dynamic data
            prefetching system for the Itanium processor 
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid14" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
          </li>
        </simplelist>
        <p>Although all these works provided some efficient dynamic mechanisms, their adaptation to multicore architectures yields difficult issues, and even challenges them. It is indeed necessary
        to control interactions between simultaneous tasks, imposing an additional complexity level which can be fateful for a dynamic system, while becoming too costly in time and space.</p>
        <p>Some dynamic parallelizing techniques have been proposed in the last years. They are mainly focusing on parallelizing loop-nests, as programs generally spend most of their execution time
        in iterative structures.</p>
        <p>The LRPD test 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid30" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>is certainly one of the foundation strategies. This method consists
        in speculatively parallelizing loops. Privatization and reduction transformations are applied to promote a successful application of the strategy. During execution, some tests are performed
        to verify the speculation validity. In case of invalid speculation, the targeted loop is re-executed sequentially. However, the application range is limited to loops accessing arrays;
        pointers cannot be handled. Moreover the method is not fully dynamic since an initial static analysis is needed.</p>
        <p>In 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid31" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, Cintra and Llanos present a speculative parallel execution
        mechanism for loops, where iteration chunks are executed in sliding windows of 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>n</mi></math></formula>threads. The loops are not transformed and the sequential schedule remains as a reference to define a total order on the speculative threads. In order to verify whether some
        dependencies are violated during the program run, all data structures qualified as speculative, that is to say those being accessed in read-write mode by the threads, are duplicated for each
        thread and tagged following those states: 
        <i>not accessed, modified, exposed loaded</i>or 
        <i>exposed loaded and later modified</i>. For example, a 
        <i>read-after-write</i>dependency has been violated if a thread owns a data tagged as 
        <i>exposed loaded</i>or 
        <i>exposed loaded and modified</i>, and if a predecessor thread, following the sequential total order, owns the same data but tagged as 
        <i>modified</i>or 
        <i>exposed loaded and modified</i>, while this data has not yet been committed in main memory. Such an approach can be memory-costly as each shared data structure is duplicated. It can be
        tricky to adjust verification frequencies to minimize time overhead. Some other methods based on the same principle of verifying speculation relatively to the sequential schedule have been
        proposed recently as in 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid32" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, where each iteration of a loop is decomposed into a prologue, a
        speculative body and an epilogue. The speculative bodies are performed in parallel and each body completion induces a verification. This approach seems to be only well suited for loops which
        bodies represent significant computation time.</p>
        <p>Another recent work is the development of SPICE 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid33" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>which is a speculative parallelizing system where an entire first
        run of a loop is initially observed. This observation serves in determining the values reached by some variables during the run. During a next run of the loop, several speculative threads are
        launched. They consider as initial values of some variables the values that have been observed at the previous run. If a thread reaches the starting value of another thread, it stops. Thus
        each thread performs a different portion of the loop. But if the loop behavior changes and if another thread starting value is never reached, the run goes on sequentially until
        completion.</p>
        <p>The main limits of these propositions are:</p>
        <simplelist>
          <li id="uid37">
            <p noindent="true">they do not alter the initial sequential schedule since always contiguous instruction blocks are speculatively parallelized;</p>
          </li>
          <li id="uid38">
            <p noindent="true">their underlying parallelism is out of control: the characteristics of the generated parallel schedule are completely unknown since they randomly depend on the program
            instructions, their dependencies and the target machine. If bad performance is encountered, no other parallelization solution can be proposed. Moreover, the effective instruction schedule
            occurring at program run can significantly vary from one run to another, hence leading to a confusing performance inconsistency.</p>
          </li>
        </simplelist>
        <p>A strategy that would uniquely be based on a transactional memory mechanism, with rollbacks in the case of data races, yields a totally uncontrolable parallelism where performance can not
        be ensured and not even strongly expected.</p>
        <p>While being based on efficient prediction mechanisms, a better control over parallelization will permit to provide solutions that are well suited to a varying execution context and to
        parallelize portions of code that can be parallelized only in some particular context. It is indeed crucial to maximize the potential parallelism of the applications to take advantage of the
        forthcoming processors comprising several tens of cores.</p>
      </subsection>
      <subsection id="uid39" level="2">
        <bodyTitle>General objective: building a virtual machine</bodyTitle>
        <p>As it has already been mentioned, dynamic parallelization and optimization can take place inside a virtual machine. All the research objectives that are presented in the following are
        related to its construction.</p>
        <p>Notice that the term of “virtual machine” is employed to group a set of dynamic analysis and optimization mechanisms taking as input a binary code, eventually enriched with specific
        instructions. We refer to a process virtual machine which main role is dynamic binary optimization from one instruction set to the same instruction set. The taxonomy given in 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid34" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>includes this kind of virtual machine.</p>
        <p>Notice that this virtual machine can run in parallel on the processor cores during the four initial phases (see figure 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid40" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>), but also simultaneously to the target application, either by sharing some
        cores with light processes, or by using cores that are useless for the target application. It will also support a transactional memory mechanism, if available. However the foreseen
        parallelizing strategies do not depend on such a mechanism since our speculative executions are supposed to be as reliable as possible thanks to efficient prediction models, and since they
        are supported by a specific and higher level rollback mechanism. Anyway if available, a transactional memory mechanism would allow to take advantage of “nearly perfect” prediction models.</p>
        <p>The virtual machine takes as input an intermediate code expressing several kinds of parallelism on several code extracts. Those kinds of parallelism are either effective, that is to say
        that the corresponding parallel execution is obviously semantically correct, or hypothetical, that is to say that there is still some uncertainty on the parallelism correctness. In this case,
        this uncertainty will have to be resolved at run time. This intermediate “multi-parallel” code is generated by the static parallelization described subsection 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid17" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. It also contains generic descriptions of parallelizing or optimizing
        transformations which parameters will have to be instanciated by the virtual machine, thanks to its knowledge about the target architecture and the program run-time behavior.</p>
        <object id="uid40">
          <table>
            <tr>
              <td>
                <ressource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="IMG/figure_vm_anglais.png" type="float" height="227.62204pt" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest" media="WEB"/>
              </td>
            </tr>
          </table>
          <caption>The virtual machine</caption>
        </object>
      </subsection>
      <subsection id="uid41" level="2">
        <bodyTitle>Adaptation of the intermediate code to the target architecture</bodyTitle>
        <p>The virtual machine first phase is to adapt this intermediate code to the target multicore architecture. It consists in answering the following questions:</p>
        <simplelist>
          <li id="uid42">
            <p noindent="true">What is the suitable kind of parallelism?</p>
          </li>
          <li id="uid43">
            <p noindent="true">What is the suitable parallel task granularity?</p>
          </li>
          <li id="uid44">
            <p noindent="true">What is the suitable number of parallel tasks?</p>
          </li>
          <li id="uid45">
            <p noindent="true">Can we take advantage of a specialized instruction set for some operations?</p>
          </li>
          <li id="uid46">
            <p noindent="true">What are the parameter values for some parallelization or optimization?</p>
          </li>
        </simplelist>
        <p>The multi-parallel intermediate code exhibits different parameters allowing to adapt some parallelizing and optimizing transformations to the target architecture. For example, a loop
        unrolling will be parametrized by the number of iterations to be unrolled. This number will depend, for example, on the number of available registers and the size of the instruction cache. A
        parallelizing transformation will depend on several possible parallel instruction schedules. One or several schedules will be selected, for example, depending on the kind of memory hierarchy
        and the cache sharing among cores.</p>
        <p>Concerning hypothetical parallelism, this first phase will reduce the number of these propositions to solutions that are well suited to the target architecture. This phase also instruments
        the intermediate code in order to install the dynamic mechanisms related to profiling and speculative parallel execution.</p>
      </subsection>
      <subsection id="uid47" level="2">
        <bodyTitle>High level parallelization and native code creation</bodyTitle>
        <p>From these target architecture related adaptations, a parallel intermediate code is generated. It contains instructions that are specific to the dynamic optimizing and parallelizing
        mechanisms, 
        <i>i.e.</i>, instrumentation instructions to feed the profiling process as well as calls to speculative execution management procedures. A translation into native code executable by the
        target processor follows. This translation also allows to keep trace of the code extracts that have to be modified during the run.</p>
      </subsection>
      <subsection id="uid48" level="2">
        <bodyTitle>Low level parallelization</bodyTitle>
        <p>The binary version of the code exhibits new parallelism and optimization sources that are specific to the instruction set and to the target architecture capabilities. Moreover, some
        dynamic optimizations are dedicated to specific instructions, or instruction blocks, as for example the memory reads which time performances can be dynamically improved by data prefetching 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid14" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Thus the binary code can be transformed and instrumented as
        well.</p>
      </subsection>
      <subsection id="uid49" level="2">
        <bodyTitle>Distribution, execution and profiling</bodyTitle>
        <p>The so built executable code is then distributed among the processor cores to be run. During the run, the instrumentation instructions feed the profiler with information for execution
        monitoring and for behavior models construction (see subsection 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid27" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>). An accurate knowledge of the binary code, thanks to the control of its
        generation, also permits at this step to dynamically control the insertion or deletion of some instrumentation instructions. Indeed it is important to manage execution monitoring through
        sampling based instrumentations in varying frequencies, following the changing behavior frequency (see in 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid14" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>and 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid35" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>a description of this kind of mechanism), as such instrumentations
        necessarily induce overheads that have to be minimized.</p>
      </subsection>
      <subsection id="uid50" level="2">
        <bodyTitle>Re-parallelization, thread mutation or rollback</bodyTitle>
        <p>Depending on the information collected from instrumentation, and depending on the built prediction models, the profiling phase causes a re-transformation of some code parts, thus causing
        the mutation of the concerned threads. Such re-transformation is done either on the binary code whether it consists in low level and small modifications, as for example the adjustement of a
        data prefetching distance, or on the intermediate code if it consists in a complete modification of the parallelizing strategy. For example, such a processing will follow the observation of a
        bad performance, or of a change in the computing resources availability, or will be caused by the completion of a dependency prediction model allowing the generation of a speculative
        parallelization. From such a speculative execution, a re-transformation can consist in rolling back to a sequential execution version when the considered hypothetical parallelism, and thus
        the associated prediction model, has been evaluated wrong.</p>
      </subsection>
    </subsection>
    <subsection id="uid51" level="1">
      <bodyTitle>Proof of program transformations for multicores</bodyTitle>
      <participants>
        <person key="calvi-2006-idm468055693984">
          <firstname>Éric</firstname>
          <lastname>Violard</lastname>
        </person>
        <person key="logical-2006-idm356512361424">
          <firstname>Julien</firstname>
          <lastname>Narboux</lastname>
        </person>
        <person key="camus-2010-idm102060704032">
          <firstname>Nicolas</firstname>
          <lastname>Magaud</lastname>
        </person>
        <person key="camus-2010-idm102060713392">
          <firstname>Vincent</firstname>
          <lastname>Loechner</lastname>
        </person>
        <person key="camus-2010-idm102060697840">
          <firstname>Alexandra</firstname>
          <lastname>Jimborean</lastname>
        </person>
      </participants>
      <subsection id="uid52" level="2">
        <bodyTitle>State of the art</bodyTitle>
        <subsection id="uid53" level="3">
          <bodyTitle>Certification of low-level codes.</bodyTitle>
          <p>Among the languages allowing to exploit the power of multicore architectures, some of them supply the programmer a library of functions that corresponds more or less to the features of
          the target architecture : for example, CUDA
          <footnote id="uid54" id-text="4"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.nvidia.com/object/cuda_what_is.html" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
            <allowbreak/>www.
            <allowbreak/>nvidia.
            <allowbreak/>com/
            <allowbreak/>object/
            <allowbreak/>cuda_what_is.
            <allowbreak/>html</ref></footnote>for the architectures of type GPGPU and more recently the standard OpenCL
          <footnote id="uid55" id-text="5"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.khronos.org/opencl" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
            <allowbreak/>www.
            <allowbreak/>khronos.
            <allowbreak/>org/
            <allowbreak/>opencl</ref></footnote>that offers a unifying programming interface allowing the use of most of the existing multicore architectures or a use of heterogeneous aggregate of such architectures. The main
          advantage of OpenCL is that it allows the programmer to write a code that is portable on a large set of architectures (in the same spirit as the MPI library for multi-processor
          architectures). However, at this low level, the programming model is very close to the executing model, the control of parallelism is explicit. Proof of program correctness has to take into
          account low-level mechanisms such as hardware interruptions or thread preemption, which is difficult.</p>
          <p>In 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid36" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, Feng 
          <i>et al.</i>propose a logic inspired from the Hoare logic in order to certify such low-level programs with hardware interrupts and preempted threads. The authors specify this logic by
          using the meta-logic implemented in the Coq proof assistant 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid37" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        </subsection>
        <subsection id="uid56" level="3">
          <bodyTitle>Certification of a compiler.</bodyTitle>
          <p>The problem here is to prove that transformations or optimizations preserve the operational behaviour of the compiled programs.</p>
          <p>Xavier Leroy in 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid38" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid39" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>formalizes the analyses and optimizations performed by a C
          compiler: a big part of this compiler is written in the specification language of Coq and the executable (Caml) code of this compiler is obtained by automatic extraction from the
          specification.</p>
          <p>Optimizing compilers are complex softwares, particularly in the case of multi-threaded programs. They apply some subtle code transformations. Therefore some errors in the compiler may
          occur and the compiler may produce incorrect executable codes. Work is to be done to remedy this problem. The technique of validation 
          <i>a posteriori</i>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid40" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid41" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>is an interesting alternative to full verification of a
          compiler.</p>
        </subsection>
        <subsection id="uid57" level="3">
          <bodyTitle>Semantics of directives.</bodyTitle>
          <p>As it was mentioned in subsection 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid23" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, the use of directives is an interesting approach to adapt languages to
          multicore architectures. It is a syntactic means to tackle the increasing need of enriching the operational semantics of programs.</p>
          <p>Ideally, these directives are only comments: they do not alter the correction of programs and they are a good means to improve their performance. They allow the separation of concerns: 
          <i>correction</i>and 
          <i>efficiency</i>.</p>
          <p>However, using directives in that sense and in the context of automatic parallelization, raises some questions: for example, assuming that directives are not mandatory, how to ensure
          that directives are really taken into account? How to know if a directive is better than another? What is the impact of a directive on performance?</p>
          <p>In his thesis 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid42" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, that was supervised by Éric Violard, Philippe Gerner addresses
          similar questionings and states a formal framework in which the semantics of compilation directives can be defined. In this framework, any directive is encoded into one equation which is
          added to an algebraic specification. The semantics of the directives can be precisely defined via an order relation (called relation of 
          <i>preference</i>) on the models of this specification.</p>
        </subsection>
        <subsection id="uid58" level="3">
          <bodyTitle>Definition of a parallel programming model.</bodyTitle>
          <p>Classically, the good definition of a programming model is based on a semantic domain and on the definition of a “toy” language associated with a proof system, which allows to prove the
          correctness of the programs written in that language. Examples of such “toy” languages are CSP for control parallelism and 
          <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>ℒ</mi></math></formula>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid43" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>for data parallelism. The proof systems associated with these two
          languages, are extensions of the Hoare logic.</p>
          <p>We have done some significant works on the definition of data parallelism 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid44" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. In particular, a crucial problem for the good definition of this
          programming model, is the semantics of the various syntactic constructs for data locality. We proposed a semantic domain which unifies two concepts: 
          <i>alignment</i>(in a data-parallel language like HPF) and 
          <i>shape</i>(in the data-parallel extensions of C).</p>
          <p>We defined a “toy” language, called PEI, that is made of a small number of syntactic constructs. One of them, called 
          <i>change of basis</i>, allows the programmer to exhibit parallelism in the same way as a placement or a scheduling directive 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid45" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        </subsection>
        <subsection id="uid59" level="3">
          <bodyTitle>Programming models for multicore architectures.</bodyTitle>
          <p>The multicore emergence questions the existing parallel programming models.</p>
          <p>For example, with the programming model supported by OpenMP, it is difficult to master both correctness and efficiency of programs. Indeed, this model does not allow programmers to take
          optimal advantage of the memory hierarchy and some OpenMP directives may induce unpredictable performances or incorrect results.</p>
          <p>Nowadays, some new programming models are experienced to help at designing both efficient and correct programs for multicores. Because memory is shared by the cores and its hierarchy has
          some distributed parts, some works aim at defining a hybrid model, between task parallelism and data parallelism. For example, languages like UPC (Unified Parallel C)
          <footnote id="uid60" id-text="6"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://upc.gwu.edu" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
            <allowbreak/>upc.
            <allowbreak/>gwu.
            <allowbreak/>edu</ref></footnote>or Chapel
          <footnote id="uid61" id-text="7"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://chapel.cs.washington.edu" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
            <allowbreak/>chapel.
            <allowbreak/>cs.
            <allowbreak/>washington.
            <allowbreak/>edu</ref></footnote>combine the advantages of several programming paradigms.</p>
          <p>In particular, the model of memory transactions (or transactional memory 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid46" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>) retains much attention since it offers the programmer a simple
          operational semantics including a mutual exclusion mechanism which simplifies program design. However, much work remains to define the precise operational meaning of transactions and the
          interaction with the other languages features 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid47" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Moreover, this model leaves the compiler a lot of work to reach
          a safe and efficient execution on the target architecture. In particular, it is necessary to control the atomicity of transactions 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid48" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>and to prove that code transformations preserve the operational
          semantics.</p>
        </subsection>
        <subsection id="uid62" level="3">
          <bodyTitle>Refinement of programs.</bodyTitle>
          <p>Refinement 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid49" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid50" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>is a classical approach for gradually building correct programs:
          it consists in transforming an initial specification by successive steps, by verifying that each transformation preserves the correctness of the previous specification. Its basic principle
          is to derive simultaneously a program and its own proof. It defines a formal framework in which some rules and strategies can be elaborated to transform specifications written by using the
          same formalism. Such a set of rules is called a 
          <i>refinement calculus</i>.</p>
          <p>Unity 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid51" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>and Gamma 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid52" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>are classical examples of such formalisms, but they are not
          especially designed for refining programs for multicore architectures. Each of these formalisms is associated with a computing model and thus each specification can be viewed as a program.
          Starting with an initial specification, a proof logic allows a user to derive a specification which is more suited to the target architecture.</p>
          <p>Refinement applies for the programming of a large range of problems and architectures. It allows to pass the limitations of the polyhedral model and of automatic parallelization. We
          designed a refinement calculus to build data parallel programs 
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid53" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        </subsection>
      </subsection>
      <subsection id="uid63" level="2">
        <bodyTitle>Main objective: formal proof of analyses and transformations</bodyTitle>
        <p>Our main objective consists in certifying the critical modules of our optimization tools (the compiler and the virtual machine). First we will prove the main loop transformation algorithms
        which constitute the core of our system.</p>
        <p>The optimization process can be separated into two stages: the transformations consisting in optimizing the sequential code and in exhibiting parallelism, and those consisting in
        optimizing the parallel code itself. The first category of optimizations can be proved within a sequential semantics. For the other optimizations, we need to work within a concurrent
        semantics. We expect the first stage of optimizations to produce data-race free code. For the second stage of optimizations, we will first assume that the input code is data-race free. We
        will prove those transformations using Appel's concurrent separation logic  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid54" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Proving transformations involving program which are not data-race
        free will constitute a longer term research goal.</p>
      </subsection>
      <subsection id="uid64" level="2">
        <bodyTitle>Proof of transformations in the polyhedral model</bodyTitle>
        <p>The main code transformations used in the compiler and the virtual machine are those carried out in the polyhedral model  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid55" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid56" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. We will use the Coq proof assistant to formalize proofs of
        analyses and transformations based on the polyhedral model. In  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid57" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, Cachera and Pichardie formalized nested loops in Coq and showed
        how to prove 
        <i>properties</i>of those loops. Our aim is slightly different as we plan to prove 
        <i>transformations</i>of nested loops in the polyhedral model. We will first prove the simplest unimodular transformations, and later we will focus on more complex transformations which are
        specific to multicore architectures. We will first study scheduling optimizations and then optimizations improving data locality.</p>
      </subsection>
      <subsection id="uid65" level="2">
        <bodyTitle>Validation under hypothesis</bodyTitle>
        <p>In order to prove the correction of a code transformation 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>T</mi></math></formula>it is possible to:</p>
        <simplelist>
          <li id="uid66">
            <p noindent="true">prove that 
            <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>T</mi></math></formula>is correct in general, 
            <i>i.e.</i>, prove that for all 
            <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>x</mi></math></formula>, 
            <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>T</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></math></formula>is equivalent to 
            <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>x</mi></math></formula>.</p>
          </li>
          <li id="uid67">
            <p noindent="true">prove 
            <i>a posteriori</i>that the applied transformation has been correct in the particular case of a code 
            <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>c</mi></math></formula>.</p>
          </li>
        </simplelist>
        <p>The second approach relies on the definition of a program called 
        <i>validator</i>which verifies if two pieces of program are equivalent. This program can be modeled as a function 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>V</mi></math></formula>such that, given two programs 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>1</mn></msub></math></formula>and 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>2</mn></msub></math></formula>, 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>V</mi><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>,</mo><msub><mi>c</mi><mn>2</mn></msub><mo>)</mo><mo>=</mo><mi>t</mi><mi>r</mi><mi>u</mi><mi>e</mi></mrow></math></formula>only if 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>1</mn></msub></math></formula>has the same semantics as 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>2</mn></msub></math></formula>. This approach has been used in the field of optimizations certification 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid58" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid59" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. If the validator itself contains a bug then the certification
        process is broken. But if the validator is proved formally (as it was achieved by Tristan and Leroy for the Compcert compiler  
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid40" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid41" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>) then we get a transformed program which can be trusted in the same
        way as if the transformation is proved formally.</p>
        <p>This second approach can be used only for the 
        <i>effective parallelism</i>, when the static analysis provides enough information to parallelize the code. For the 
        <i>hypothetical parallelism</i>, the necessary hypotheses have to be verified at run time.</p>
        <p>For instance, the absence of aliases in a piece of code is difficult to decide statically but can be more easily decided at run time.</p>
        <p>In this framework, we plan to build a 
        <i>validator under hypotheses</i>: a function 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msup><mi>V</mi><mo>'</mo></msup></math></formula>such that, given two programs 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>1</mn></msub></math></formula>and 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>2</mn></msub></math></formula>and an hypothesis 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>H</mi></math></formula>, if 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><msup><mi>V</mi><mo>'</mo></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>,</mo><msub><mi>c</mi><mn>2</mn></msub><mo>,</mo><mi>H</mi><mo>)</mo></mrow><mo>=</mo><mi>t</mi><mi>r</mi><mi>u</mi><mi>e</mi></mrow></math></formula>, then 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>H</mi></math></formula>implies that 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>1</mn></msub></math></formula>has the same semantics as 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><msub><mi>c</mi><mn>2</mn></msub></math></formula>. The validity of the hypothesis 
        <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>H</mi></math></formula>will be verified dynamically by the virtual machine. This verification process, which is part of the virtual machine, will have to be proved as correct as well.</p>
      </subsection>
      <subsection id="uid68" level="2">
        <bodyTitle>Rejecting incorrect parallelizations</bodyTitle>
        <p>The goal of the project is to exhibit potential parallelism. The source code can contain many sub-routines which could be parallelized under some hypothesis that the static analysis fails
        to decide. For those optimizations, the virtual machine will have to verify the hypotheses dynamically. Dynamically dealing with the potential parallelism can be complex and costly
        (profiling, speculative execution with rollbacks). To reduce the overhead of the virtual machine, we will have to provide efficient methods to rule out quickly incorrect parallelism. In this
        context, we will provide hypotheses which are easy to check dynamically and which can tell when a transformation cannot be applied, 
        <i>i.e.</i>, hypotheses which are sufficient conditions for the non-validity of an optimization.</p>
      </subsection>
    </subsection>
  </fondements>
  <domaine id="uid69">
    <bodyTitle>Application Domains</bodyTitle>
    <subsection id="uid70" level="1">
      <bodyTitle>Application Domains</bodyTitle>
      <p>Performance being our main objective, our developments' target applications are characterized by intensive computation phases. Such applications are numerous in the domains of scientific
      computations, optimization, data mining and multimedia.</p>
      <p>Applications involving intensive computations are necessarily high energy consumers. However this consumption can be significantly reduced thanks to optimization and parallelization.
      Although this issue is not our prior objective, we can expect some positive effects for the following reasons:</p>
      <simplelist>
        <li id="uid71">
          <p noindent="true">Program parallelization tries to distribute the workload equally among the cores. Thus an equivalent performance, or even a better performance, to a sequential higher
          frequency execution on one single core, can be obtained.</p>
        </li>
        <li id="uid72">
          <p noindent="true">Memory and memory accesses are high energy consumers. Lowering the memory consumption, lowering the number of memory accesses and maximizing the number of accesses in the
          low levels of the memory hierarchy (registers, cache memories) have a positive consequence on execution speed, but also on energy consumption.</p>
        </li>
      </simplelist>
    </subsection>
  </domaine>
  <logiciels id="uid73">
    <bodyTitle>Software</bodyTitle>
    <subsection id="uid74" level="1">
      <bodyTitle>PolyLib</bodyTitle>
      <p>PolyLib 
      <footnote id="uid75" id-text="8"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://icps.u-strasbg.fr/PolyLib" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
        <allowbreak/>icps.
        <allowbreak/>u-strasbg.
        <allowbreak/>fr/
        <allowbreak/>PolyLib</ref></footnote>is a C library of polyhedral functions, that can manipulate unions of rational polyhedra of any dimension, through the following operations: intersection, difference, union, convex
      hull, simplify, image and preimage. It was the first to provide an implementation of the computation of parametric vertices of a parametric polyhedron, and the computation of an Ehrhart
      polynomial (expressing the number of integer points contained in a parametric polytope) based on an interpolation method.</p>
      <p>It is used by an important community of researchers (in France and the rest of the world) in the area of compilation and optimization using the polyhedral model. Vincent Loechner is the
      maintainer of this software. It is distributed under GNU General Public License version 3 or later, and it has a Debian package maintained by Serge Guelton (Symbiose Projet, IRISA).</p>
    </subsection>
    <subsection id="uid76" level="1">
      <bodyTitle>ZPolyTrans</bodyTitle>
      <p>ZPolyTrans 
      <footnote id="uid77" id-text="9"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://ZPolyTrans.gforge.inria.fr" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
        <allowbreak/>ZPolyTrans.
        <allowbreak/>gforge.
        <allowbreak/>inria.
        <allowbreak/>fr</ref></footnote>is a C library and a set of executables, that permits to compute the integer transformation of a union of parametric 
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>ℤ</mi></math></formula>-polyhedra (the intersection between lattices and parametric polyhedra), as a union of parametric 
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>ℤ</mi></math></formula>-polyhedra. The number of integer points of the result can also be computed. It is build upon PolyLib and Barvinok library. This work is based on some theoretical results obtained by
      Rachid Seghir and Vincent Loechner, that will be published in ACM TACO in 2011 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid60" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      <p>It allows for example to compute the number of solutions of a Presburger formula by eliminating existancial integer variables, or to compute the number of different data accessed by some
      array accesses contained in an affine parametric loop nest.</p>
      <p>The authors of this software are Rachid Seghir (Univ. Batna, Algeria) and Vincent Loechner. It is distributed under GNU General Public License version 3 or later.</p>
    </subsection>
    <subsection id="uid78" level="1">
      <bodyTitle>NLR</bodyTitle>
      <p>We have developed a program implementing our loop-nest recognition algorithm, detailed in 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid25" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. This standalone, filter-like application takes as input a raw trace
      and builds a sequence of loop nests that, when executed, reproduce the trace. It is also able to predict forthcoming values at an arbitrary distance in the future. Its simple, text-based input
      format makes it applicable to all kinds of data. These data can take the form of simple numeric values, or have more elaborate structure, and can include symbols. The program is written is
      standard ANSI C. The code can also be used as a library.</p>
      <p>We have used this code to evaluate the compression potential of loop nest recognition on memory address traces, with very good results. We have also shown that the predictive power of our
      model is competitive with other models on average. The software is available upon request to anybody interested in trying to apply loop nest recognition. It has been distributed to a dozen of
      colleagues around the world.</p>
      <p>We plan on using this software as the base for a new tool we currently design, for the analysis of parallel traces.</p>
    </subsection>
    <subsection id="uid79" level="1">
      <bodyTitle>Dynamic version selector</bodyTitle>
      <p>We are developing a toolchain to automatically select between different versions of parallel loop nests, as described in subsection 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid88" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. It generates the profiling code and selection code from a loop nest source code
      and different schedules, expressed in the CLooG format.</p>
      <p>Benoît Pradelle (PhD) wrote this toolchain, based on python scripts. It is not yet distributed.</p>
    </subsection>
    <subsection id="uid80" level="1">
      <bodyTitle>Binary files decompiler</bodyTitle>
      <p>Our research on efficient memory profiling has lead us to develop a sophisticated decompiler. This tool analyzes x86-64 binary programs and libraries, and extracts various structured
      representations of the code. It works on a routine per routine basis, and first builds a loop hierarchy to characterize the overall structure of the algorithm. It then puts the code into Static
      Single Assignment (SSA) form to highlight the fine-grain data-flow between registers and memory. Building on these, it performs the following analyzes:</p>
      <simplelist>
        <li id="uid81">
          <p noindent="true">All memory addresses are expressed as symbolic expressions involving specific versions of register contents, as well as loop counters. Loop counter definitions are
          recovered by resolving linearly incremented registers and memory cells, i.e., registers that act as induction variables.</p>
        </li>
        <li id="uid82">
          <p noindent="true">Most conditional branches are also expressed symbolically (with registers, memory contents, and loop counters). This captures the control-flow of the program, but also
          helps in defining what amounts to loop “trip-counts”, even though our model is slightly more general, because it can represent any kind of iterative structure.</p>
        </li>
      </simplelist>
      <p>This tool embodies several passes that, as far as we know, do not exist in any existing similar tool. For instance, it is able to track data-flow through stack slots in most cases. It has
      been specially designed to extract a representation that can be useful in looking for parallel (or parallelizable) loops  
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid61" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. It is the basis of several of our studies.</p>
      <p>Because binary program decompilation is especially useful to reduce the cost of memory profiling, our current implementation is based on the Pin binary instrumenter. It uses Pin's API to
      analyze binary code, and directly interfaces with the upper layers we have developed (e.g., program skeletonization, or minimal profiling). However, we have been careful to clearly decouple the
      various layers, and to not use any specific mechanism in designing the binary analysis component. Therefore, we believe that it could be ported with minimal effort, by using a binary file
      format extractor and a suitable binary code parser. It is also designed to abstract away the detailed instruction set, and should be easy to port (even though we have no practical experience in
      doing so).</p>
      <p>We feel that such a tool could be useful to other researchers, because it makes binary code available under abstractions that have been traditionally available for source code only. If
      sufficient interest emerges, e.g., from the embedded systems community, or from researchers working on WCET, or from teams working on software security, we are willing to distribute and/or to
      help make it available under other environments.</p>
    </subsection>
    <subsection id="uid83" level="1">
      <bodyTitle>Dynamic dependency analyser</bodyTitle>
      <p>We have recently started developing a dynamic dependence analyzer. Such a tool consumes the trace of memory (or object) accesses, and uses the program structure to list all the data
      dependences appearing during execution. Data dependences in turn are central to the search for parallel sections of code, with the search for parallel loops being only a particular case of the
      general problem. Most current works of these questions are either specific to a particular analysis (e.g., computing dependence densities to select code portions for thread-level speculation),
      or restricted to particular forms of parallelism (e.g., typically to fully parallel loops). Our tool tries to generalize existing approaches, and focuses on the program structures to provide
      helpful feedback either to a user (as some kind of “smart profiler”), or to a compiler (for feedback-directed compilation). For example, the tool is able to produce a dependence schema for a
      complete loop nest (instead of just a loop). It also targets irregular parallelism, for example analyzing a loop execution to estimate the expected gain of parallelization strategies like
      inspector-executor.</p>
      <p>We have developed this tool in relation to our minimal profiling research project. However, the tool itself has been kept independent of our profiling infrastructure, getting data from it
      via a well-defined trace format. This intentional design decision has been motivated by our work on distinct execution environments: first on our usual x86-64 benchmark programs, and second on
      less regular, more often written in Java, real-world applications. The latter type of applications is likely the one that will most benefit from such tools, because their intrinsic execution
      environment does not offer enough structure to allow effective static analysis techniques. Parallelization efforts in this context will most likely rely on code annotations, or specific
      programming language constructs. Programmers will therefore need tools to help them choose between various constructs. Our tool has this ambition. We already have a working tool-chain for
      C/C++/Fortran programs (or any binary program). We are in the process of developing the necessary infrastructure to connect the dynamic dependence profiler to instrumented Java programs. Other
      managed execution environments could be targeted as well, e.g., Microsoft's .Net architecture, but we have no time and/or workforce to devote to such time-consuming engineering efforts.</p>
    </subsection>
    <subsection id="uid84" level="1">
      <bodyTitle>VMAD software and LLVM</bodyTitle>
      <p>For dynamic analysis and optimization of programs, we are developing a virtual machine called VMAD, and specific passes to the LLVM compiler suite, plus a modified Clang frontend. It is
      fully described in subsection 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid87" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      <p>We implemented for now a memory access predictor in loop nests, based on the computation of linear interpolation functions. The profiling is very fast compared to other existing tools, as it
      samples only the first few iterations of each loop in the nest, then it is deactivated to return to the original, faster version. Other tools like PIN or PEBIL do not support such
      activation/deactivation mechanism.</p>
      <p>New annotations for the final user, taken as input by LLVM, and new VMAD modules will be developed, as these tools have been designed to be very evolving.</p>
      <p>Alexandra Jimborean (PhD), Matthieu Herrmann (Master student) and Luis Mastrangelo (Master student) are the main contributors of this software. It is not yet distributed.</p>
    </subsection>
    <subsection id="uid85" level="1">
      <bodyTitle>Polyhedral prover</bodyTitle>
      <participants>
        <person key="camus-2010-idm102060704032">
          <firstname>Nicolas</firstname>
          <lastname>Magaud</lastname>
        </person>
        <person key="logical-2006-idm356512361424">
          <firstname>Julien</firstname>
          <lastname>Narboux</lastname>
        </person>
        <person key="calvi-2006-idm468055693984">
          <firstname>Éric</firstname>
          <lastname>Violard</lastname>
          <moreinfo>correspondant</moreinfo>
        </person>
      </participants>
      <p/>
      <p>We are currently developing a formal proof of program transformations based on the polyhedral model. We use the CompCert verified compiler 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid62" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>as a framework. This tool is written in the specification language of
      Coq. It is connected to the activity described in section 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid95" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
    </subsection>
  </logiciels>
  <resultats id="uid86">
    <bodyTitle>New Results</bodyTitle>
    <subsection id="uid87" level="1">
      <bodyTitle>VMAD and LLVM</bodyTitle>
      <p>The goal is to provide a set of annotations (pragmas) that the user can insert in the source code to perform low level analyses (profiling) or optimizations (dynamic parallelization for
      example).</p>
      <p>We are developing a virtual machine handling advanced dynamic analyses and transformations of programs. VMAD is organized as a sequence of basic operations, where external modules associated
      to specific strategies are dynamically loaded when required. The program binary files handled by VMAD are previously instrumented at compile time to include necessary data, instrumentation
      instructions and callbacks to the virtual machine. Dynamic information, such as memory locations of launched modules, are patched at startup in the binary file. The LLVM compiler has been
      extended to automatically instrument programs to meet the requirements both of VMAD and of the handled/chosen analysis and transformation strategies.</p>
      <p>VMAD uses sampling and multi-versioning to limit the instrumentations time overhead. At runtime, targeted codes are launched by successive chunks that can be either original, instrumented or
      optimized/parallelized versions. After each chunk execution, decisions can be taken relatively to the current optimization strategy. At this time, VMAD is handling advanced memory access
      profiling through linear interpolation of the addresses, dynamic dependency analysis and version selction. The last developments are focusing on speculative polyhedral parallelization.</p>
      <p>The profiling strategy interpolating the memory addresses accessed in a loop nest has been run on some of the SPEC2006 and Pointer Intensive benchmark suites, showing a very low time
      overhead, in most cases. More details are available in the research reports 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid63" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>and 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid64" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, and publications 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid65" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>and 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid66" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
    </subsection>
    <subsection id="uid88" level="1">
      <bodyTitle>Dynamic version selector</bodyTitle>
      <p>Adaptive version selection between different parallel versions of code is necessary when the execution context of a program is not known. The execution contexts includes all or some of these
      possibly variable parameters: the target architecture, the load of the computer at execution time, and the input data.</p>
      <p>We have developed a framework handling loops in the polyhedral model, that is able to take a runtime decision about which version to execute. It is based on :</p>
      <simplelist>
        <li id="uid89">
          <p noindent="true">the generation of different code versions of a loop nest;</p>
        </li>
        <li id="uid90">
          <p noindent="true">an install-time profiling to take into account the architecture parameters, that builds a parametric ranking table between the versions;</p>
        </li>
        <li id="uid91">
          <p noindent="true">a runtime selection, predicting the load balance and the execution time of each code version, before executing the best one.</p>
        </li>
      </simplelist>
      <p>We showed that different versions of a code are required on several polyhedral loop nest benchmarks, depending on both the target architecture and the input data. And we showed speedups
      compared to any statically chosen version in all execution contexts. More details are available in publication 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid67" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
    </subsection>
    <subsection id="uid92" level="1">
      <bodyTitle>Binary parallelization</bodyTitle>
      <p>Our work on parallelizing binary programs has continued in 2011, with several new results. The general principle is to analyze the binary code and extract a model of the most intense loops.
      The model has to include everything that is related to memory access, and also some part of the computations done in registers. Once a suitable model is extracted, it can be used to derive a
      new scheduling for each targeted loops, optimizing various criteria: this is where polyhedral techniques are used, providing algorithms to optimize locality, parallelism, or both at the same
      time. After a new scheduling is computed, the transformed code is generated by a polyhedron-scanning algorithm. Our approach relies on an intermediate representation whose emphasis is on memory
      accesses, hiding, i.e., 
      <i>outlining</i>all low-level details and retaining only what is needed by the parallelization component: we use raw C constructs, and macros to denote outlined code. Starting with the
      executable program, a first phase raises the code into our intermediate representation. The second phase uses a stock parallelizing component, producing a transformed C programs. The last phase
      lowers this intermediate representation into a new binary executable. The system then uses a run-time monitoring component (generated automatically at the same time as the parallel version)
      that redirects execution to the transformed loops whenever appropriate.</p>
      <p>This year's activity on this topic in our team has started by finalizing and presenting a paper at the IMPACT workshop 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid68" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, held during CGO'2011, in Chamonix (France). This workshop focuses on
      tools and techniques based on the polyhedral model. It has been interesting to hear the various reactions and remarks of researchers attending our presentation: the general position is that our
      work opens new perspectives on the use of the polyhedral model, and avoids to need to have a complete polyhedral tool-chain. Another major aspect is the fact that our 3-phase strategy clearly
      separates the polyhedral part of the whole process, in essence providing a basis for a polyhedral programming language that is slightly more general that what was considered before.</p>
      <p>The work on this topic has continued on two directions. The first was to effectively abstract the parallelizing phase. This has been done by demonstrating the use of two distinct
      parallelizers: the first is PLUTO, a polyhedral locality optimizer and parallelizer, and the second is CETUS, a “simple” parallelizer. The second new direction was directed by the complexity of
      typical “real-world” executable programs. It has consisted in developing new dependence analysis and parallelization techniques, handling more general classes of programs. This current is
      currently submitted for publication.</p>
      <p>These research results will be presented at the forthcoming 
      <i>HiPEAC</i>conference, to be held in Paris in January 2012. A full-length paper has been accepted for publication in 
      <i>ACM Transactions on Architecture and Code Optimization</i>some time in 2012.</p>
    </subsection>
    <subsection id="uid93" level="1">
      <bodyTitle>Modeling the dynamic behavior of executable programs</bodyTitle>
      <p>Modeling the dynamic behavior of a given program is useful for several reasons. First, it is a particular way of profiling the program, targeting non trivial characteristics of the
      execution. As such, it helps programmers understand the behavior of the program, and hopefully helps them optimizing it. Second, the results can be used in a compiler, using run-time
      information to drive static optimizations. This path has seen considerable development when it comes, for example, to sequence basic blocks so as to leverage branch predictors and/or optimize
      the usage of instruction caches. We ambition to take it one step further, using run-time information to help a compiler in the task of auto-parallelization. Third, modeling can be used on-line,
      during the execution of the program, to drive the use of dynamic optimizations.</p>
      <p>Our first achievement in 2011 has been the presentation of our paper at the International Symposium on Performance Analysis of Software and Systems 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid69" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. The paper describes an approach that e have called 
      <i>program skeletonization</i>. The basic idea is to perform a static analysis of the code under scrutiny, and locate a small number of register assignments that completely determine the set of
      memory addresses the program will access. By instrumenting these elementary value assignments and extracting the ensuing computations of addresses, the amount of instrumentation can be
      dramatically reduced, at the cost of offloading some computations to the profiler. On average, this provides a significant gain in the time needed to obtain a memory trace, and is independent
      on the particular application, e.g., cache simulation, data race detection, and so on.</p>
      <p>Our second main research direction on this topic has been the characterization of semi-regular memory accesses. Semi-regular accesses are caused by the traversal of a data structure linking
      successive memory cells in no particular memory order, i.e., a linked list or a tree. We have developed a modeling algorithm that is able to detect that a set of instructions perform irregular
      accesses that are actually highly correlated, differing only by an affine function of the enclosing loop indices. This has several implications in terms of potential optimizations. First it
      exhibits a kind of abstract iterator, that can later be handled, e.g., by inspector/executor techniques. Second, it reduces the number of potential dependencies that have to be tested.</p>
      <p>The third, most recent, research project that we have started this year is the analysis of traces of parallel programs, currently MPI programs. Parallel traces offer new research challenges,
      because they contain events that are only partially ordered. We have extended our loop nest recognition algorithm 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid25" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>to handle parallel traces. Our preliminary results show that this
      algorithm is highly effective in extracting communication patterns. This has a number of potential applications that we plan to study in the coming months.</p>
    </subsection>
    <subsection id="uid94" level="1">
      <bodyTitle>Dynamic dependence analysis</bodyTitle>
      <p>We have started a research project on dynamic dependence analysis. The principle is to observe an execution of a given program and collect dependence information. This form of profiling is
      similar to memory profiling, except that to goal is to directly produce data dependencies. During collection, data dependencies are abstracted into dependence graphs which, in turn, give enough
      information to decide whether a given code portion is parallel and, if the answer is positive, precisely constrain the set of applicable program transformations. Our implementation currently
      uses our own profiling infrastructure to obtain data from a running program, and models the sequence of run-time data dependencies in a unique framework. The system is of course sensitive to
      the fact that the input data is representative of typical inputs: the conclusion it draws cannot be applied without resorting to speculation. Currently, we restrict the system to a 
      <i>parallelization assistant</i>, whose result is a set of suggestion that the programmer is free to follow or ignore.</p>
      <p>A fundamental characteristic of a parallelization assistant is the class of parallel constructions that it is able to extract from run-time data. We have designed the profiling component and
      the analysis algorithm such as to be able to represent the dependencies with various abstractions, from simple boolean dependencies to full dependence polyhedra. However, even the simplest
      dependence model provides useful hints to parallelize a given program. In this case, our tool flags every loop in the program as either intrinsically sequential, or potentially parallel. To
      make this widely usable, we have decided to target common parallel programing constructions, namely OpenMP directives. In turns out that our design is flexible enough to let the system also
      target loops that become parallel after simple privatization transformations. The result of profiling is thus a set of complete OpenMP directives, making the loop parallel but also instructing
      the compiler to take special measure for local data that (falsely) renders loop iterations dependent.</p>
      <p>Because the general design of our dynamic dependence analysis system is generic and modular, we plan to develop and distribute software implementing our approach. This project, called
      Parwiz, has received support from INRIA under the form of an ADT (
      <i>Action de Développement Technologique</i>). The funding should let us hire an engineer for two years. Unfortunately, we have not been able to find a suitable candidate in 2011, and plan to
      continue the recruitment process in 2012. In the meantime, we have supervised en Argentinian student, José Cacherosky, during 4 months (from July to October 2011), as an intern with funding
      from the INRIA 
      <i>International Internships</i>program. The goal of the internship was to extend our framework (developed mainly to work from binary programs) to another execution environment, namely the 
      <i>Java Virtual Machine</i>. Most of the time has been spent on developing an instrumentation infrastructure, but José Cacherosky has also started the implementation of some of the parallelism
      detection algorithms. We plan to continue this work soon, and provide a tool that could work in several, very distinct environments. Finally, Fabrice Rastello, research scientist at the 
      <i>École Normale Supérieure de Lyon</i>(with the INRIA team COMPSYS), has expressed interest in collaborating with us on this research project.</p>
    </subsection>
    <subsection id="uid95" level="1">
      <bodyTitle>Dealing with arithmetic overflows in the polyhedral model</bodyTitle>
      <participants>
        <person key="camus-2010-idm102060704032">
          <firstname>Nicolas</firstname>
          <lastname>Magaud</lastname>
        </person>
        <person key="logical-2006-idm356512361424">
          <firstname>Julien</firstname>
          <lastname>Narboux</lastname>
        </person>
        <person key="calvi-2006-idm468055693984">
          <firstname>Éric</firstname>
          <lastname>Violard</lastname>
        </person>
      </participants>
      <p>Our goal in collaboration with Alexandre Pilkiewicz, PhD student, and François Pottier, senior researcher at INRIA, is to prove formally the correctness of a compiler based on the polyhedral
      model and to integrate it in the Compcert compiler.</p>
      <p>But as the polyhedral transformations apply to affine loop nests in a mathematical framework where each loop variable is considered to be a mathematical integer, and not a machine integer,
      we must therefore warrant that no arithmetic overflow occurs when the considered loop nests are executed.</p>
      <p>We proposed a solution to produce a compiler which does not ignore the problem of overflows. Our solution consists in generating a formula which captures the presence of overflows in the
      program, then asking to an external tool (i.e. the iscc calculator), for a sufficient condition about the parameters which implies the absence of overflows. Finally we check this condition
      dynamically. If the condition holds we can use the optimized version of the program. If it does not, in order to preserve the semantics of the program we keep the original version.</p>
      <p>Figure 
      <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#uid96" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>illustrates our solution for overcoming the problem of arithmetic overflows and
      for ensuring the correctness of polyhedral transformations. In addition to the polyhedral optimizer, our compiler uses an oracle and a validator.</p>
      <p>The oracle returns a boolean expression (
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>b</mi></math></formula>) which denotes a sufficient condition to ensure that both the original program (
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>o</mi><mi>r</mi><mi>g</mi></mrow></math></formula>) and the optimized program (
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>o</mi><mi>p</mi><mi>t</mi></mrow></math></formula>) do not produce any overflow. Our transformation then builds a program that we call the resulting program, of the shape 
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>If</mi><mspace width="0.277778em"/><mi>b</mi><mspace width="0.277778em"/><mi>then</mi><mspace width="0.277778em"/><mi>o</mi><mi>p</mi><mi>t</mi><mspace width="0.277778em"/><mi>else</mi><mspace width="0.277778em"/><mi>o</mi><mi>r</mi><mi>g</mi></mrow></math></formula>. It dynamically evaluates the boolean expression 
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>b</mi></math></formula>and executes 
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>o</mi><mi>r</mi><mi>g</mi></mrow></math></formula>, i.e. the original program, if the condition is not fulfilled or 
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>o</mi><mi>p</mi><mi>t</mi></mrow></math></formula>, i.e. the optimized program, if the condition is true. The resulting program is then transmitted to the validator.</p>
      <p>The validator is a function which takes the original program (
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>o</mi><mi>r</mi><mi>g</mi></mrow></math></formula>), the optimized program (
      <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>o</mi><mi>p</mi><mi>t</mi></mrow></math></formula>) and the resulting program, and returns a boolean: if it returns true, then the resulting program is equivalent to the original one and our compiler therefore produces the resulting
      program.</p>
      <p>We now have to formally prove the validator using the Coq proof assistant.</p>
      <object id="uid96">
        <table>
          <tr>
            <td>
              <ressource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="IMG/proof-solution.png" type="float" height="199.16928pt" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest" media="WEB"/>
            </td>
          </tr>
        </table>
        <caption>A solution for overcoming the problem of arithmetic overflows</caption>
      </object>
    </subsection>
  </resultats>
  <international id="uid97">
    <bodyTitle>Partnerships and Cooperations</bodyTitle>
    <subsection id="uid98" level="1">
      <bodyTitle>National Initiatives</bodyTitle>
      <p>Philippe Clauss, Alain Ketterlin and Vincent Loechner are involved in the proposition of an INRIA Large Wingspan Project (
      <i>Action d'Envergure Nationale</i>) entitled “Software for multicores and hardware accelerators” and regrouping several french teams doing researches in compilers, parallel computing and
      program optimization. Philippe Clauss shares the head of the project with Gilles Muller of the INRIA REGAL team. A new version of the project will be submitted to INRIA at the end of 2011.</p>
    </subsection>
    <subsection id="uid99" level="1">
      <bodyTitle>International Initiatives</bodyTitle>
      <subsection id="uid100" level="2">
        <bodyTitle>INRIA Associate Teams</bodyTitle>
        <subsection id="uid101" level="3">
          <bodyTitle>
            <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lafhis.dc.uba.ar/wiki/index.php/EA-Ancome" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">ANCOME</ref>
          </bodyTitle>
          <sanspuceslist>
            <li id="uid102">
              <p noindent="true">Title: Memory and applications memory behavior</p>
            </li>
            <li id="uid103">
              <p noindent="true">INRIA principal investigator: Philippe Clauss</p>
            </li>
            <li id="uid104">
              <p noindent="true">International Partner:</p>
              <sanspuceslist>
                <li id="uid105">
                  <p noindent="true">Institution: Universidad de Buenos Aires (Argentina)</p>
                </li>
                <li id="uid106">
                  <p noindent="true">Laboratory: Departamento de Computacion, Facultad de Ciencias Exactas y Naturales</p>
                </li>
              </sanspuceslist>
            </li>
            <li id="uid107">
              <p noindent="true">Duration: 2011 - 2013</p>
            </li>
            <li id="uid108">
              <p noindent="true">See also: 
              <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lafhis.dc.uba.ar/wiki/index.php/EA-Ancome" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
              <allowbreak/>lafhis.
              <allowbreak/>dc.
              <allowbreak/>uba.
              <allowbreak/>ar/
              <allowbreak/>wiki/
              <allowbreak/>index.
              <allowbreak/>php/
              <allowbreak/>EA-Ancome</ref></p>
            </li>
            <li id="uid109">
              <p noindent="true">This associate team focuses on developing original methods for the analysis of programs memory behavior, in particular in the context of applications using dynamic
              memory allocation. The proposed approaches consists of analyzing and modeling the runtime behavior, where extracted properties are then verified thanks to static analysis processes.
              Thus pure static approaches limits are overpassed. Further, the case of multi-threaded applications run on multi-core architectures is studied in order to elaborate and extend our
              analysis techniques and to extract properties specific to this context. The issues are mainly concerned with the conception of real-time applications using dynamic memory
              allocation.</p>
            </li>
          </sanspuceslist>
        </subsection>
      </subsection>
      <subsection id="uid110" level="2">
        <bodyTitle>INRIA International Partners</bodyTitle>
        <p>Rachid Seghir, researcher and teacher at the University of Batna, Algeria, works in close collaboration with Vincent Loechner. He is the co-author of the ZPolyTrans software and of a
        forthcoming paper in the journal ACM Transactions on Architecture and Code Optimization 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid60" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        <p>Benoît Meister, Managing Engineer at Reservoir Labs, New York, USA, has collaborated with Vincent Loechner and Rachid Seghir on a forthcoming publication 
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid60" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        <p>Jean Christophe Beyler, Senior HPC Engineer at Intel and in the International Exascale project, University of Versailles, France, is experimenting energy saving strategies using the VMAD
        framework of the CAMUS team.</p>
        <p>Sven Verdoolaege, researcher at the Leiden Institute of Advanced Computer Science, Leiden, The Netherlands, has collaborated with Philippe Clauss, Vincent Loechner and Diego Garbervetsky
        in the writing of a chapter of the book entitled 
        <i>Energy-Aware Memory Management for Embedded Multimedia Systems: A Computer-Aided Approach</i>
        <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid70" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
      <subsection id="uid111" level="2">
        <bodyTitle>Visits of International Scientists</bodyTitle>
        <subsection id="uid112" level="3">
          <bodyTitle>Visits</bodyTitle>
          <sanspuceslist>
            <li id="uid113">
              <p noindent="true">Sergio Yovine (from Jun 6 2011 until Jun 12 2011)</p>
              <sanspuceslist>
                <li id="uid114">
                  <p noindent="true">Institution: Universidad de Buenos Aires (Argentina), EA INRIA Ancome</p>
                </li>
              </sanspuceslist>
            </li>
          </sanspuceslist>
          <sanspuceslist>
            <li id="uid115">
              <p noindent="true">Diego Garbervetsky (from Apr 1 2011 until Apr 10 2011 and from Aug 1 2011 until Sept 2 2011)</p>
              <sanspuceslist>
                <li id="uid116">
                  <p noindent="true">Institution: Universidad de Buenos Aires (Argentina), EA INRIA Ancome</p>
                </li>
              </sanspuceslist>
            </li>
          </sanspuceslist>
        </subsection>
        <subsection id="uid117" level="3">
          <bodyTitle>Internships</bodyTitle>
          <sanspuceslist>
            <li id="uid118">
              <p noindent="true">Luis Mastrangelo (from Mar 2011 until Aug 2011)</p>
              <sanspuceslist>
                <li id="uid119">
                  <p noindent="true">Subject: A Virtual Machine for Automatic Program Parallelization</p>
                </li>
                <li id="uid120">
                  <p noindent="true">Institution: Universidad de Buenos Aires (Argentina)</p>
                </li>
              </sanspuceslist>
            </li>
          </sanspuceslist>
          <sanspuceslist>
            <li id="uid121">
              <p noindent="true">Bruno Cuervo Parrino (from May 2011 until Oct 2011)</p>
              <sanspuceslist>
                <li id="uid122">
                  <p noindent="true">Subject: Formalizing a new validation mechasnism under assumptions for speculative parallelism</p>
                </li>
                <li id="uid123">
                  <p noindent="true">Institution: Universidad de Buenos Aires (Argentina)</p>
                </li>
              </sanspuceslist>
            </li>
          </sanspuceslist>
          <sanspuceslist>
            <li id="uid124">
              <p noindent="true">Jose Cacherosky (from Jul 2011 until Dec 2011)</p>
              <sanspuceslist>
                <li id="uid125">
                  <p noindent="true">Subject: Dynamic dependence profiling for Java</p>
                </li>
                <li id="uid126">
                  <p noindent="true">Institution: Universidad de Buenos Aires (Argentina)</p>
                </li>
              </sanspuceslist>
            </li>
          </sanspuceslist>
        </subsection>
      </subsection>
      <subsection id="uid127" level="2">
        <bodyTitle>Participation In International Programs</bodyTitle>
        <p>The CAMUS team is associated to the CNRS-CONICET Associated International Laboratory France-Argentina 
        <i>INFINIS</i>
        <footnote id="uid128" id-text="10"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://dri-dae.cnrs-dir.fr/spip.php?article3009" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">https://
          <allowbreak/>dri-dae.
          <allowbreak/>cnrs-dir.
          <allowbreak/>fr/
          <allowbreak/>spip.
          <allowbreak/>php?article3009</ref></footnote>(INformatique Fondamentale, logIque, laNgages, vérIfication et Systèmes) inaugurated in December 2011.</p>
      </subsection>
    </subsection>
  </international>
  <diffusion id="uid129">
    <bodyTitle>Dissemination</bodyTitle>
    <subsection id="uid130" level="1">
      <bodyTitle>Animation of the scientific community</bodyTitle>
      <p>Vincent Loechner is one of the organizers of the 
      <i>Second International Workshop on Polyhedral Compilation Techniques, IMPACT 2012</i>
      <footnote id="uid131" id-text="11"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://impact.gforge.inria.fr/impact2012" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
        <allowbreak/>impact.
        <allowbreak/>gforge.
        <allowbreak/>inria.
        <allowbreak/>fr/
        <allowbreak/>impact2012</ref></footnote>, that will be held in January 2012 in Paris, in conjunction with the international conference HiPEAC. He also participates, with Philippe Clauss, to its program committee.</p>
      <p>Alexandra Jimborean presented her work about code tracking and cloning in the LLVM compiler at the 
      <i>First LLVM European User Group Meeting</i>
      <footnote id="uid132" id-text="12"><ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://llvm.org/devmtg/2011-09-16" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
        <allowbreak/>llvm.
        <allowbreak/>org/
        <allowbreak/>devmtg/
        <allowbreak/>2011-09-16</ref></footnote>in London, organized and sponsored by ARM Ltd., Sept. 16 2011.</p>
      <p>Philippe Clauss has reviewed papers for the international conference DATE 2012, for the international workshop IMPACT 2011 and the french journal TSI. He has also reviewed projects for the
      ANR, and the Ile-de-France and Aquitaine Regions.</p>
      <p>Philippe Clauss participated to the following PhD jurys in 2011:</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
            <b>Date</b>
          </td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">
            <b>Candidate</b>
          </td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">
            <b>Place</b>
          </td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">
            <b>Role</b>
          </td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Feb. 14</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Khamar SAJJAD</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Univ. Versailles</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Rewiever</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Jul. 4</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Konrad TRIFUNOVIC</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Univ. Paris-Sud</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Rewiever</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Sept. 30</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Antoniu POP</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">ENSM Paris</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Rewiever</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Nov. 10</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Khaled HAMIDOUCHE</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Univ. Paris-Sud</td>
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;" right-border="true" halign="left">Rewiever</td>
        </tr>
        <caption/>
      </table>
      <p>Julien Narboux participated to the PhD jury of Tuan Minh Pham (INRIA Sophia-Antipolis) in 2011 as an examiner.</p>
    </subsection>
    <subsection id="uid133" level="1">
      <bodyTitle>Teaching</bodyTitle>
      <p><formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mo>•</mo></math></formula>Philippe Clauss, Université de Strasbourg, France</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Intitulé du
          cours</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Nombre d'heures</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Niveau</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Architecture
          des ordinateurs</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">27</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
          Compilation</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">64</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Compilation
          avancée</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">30</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Système et
          programmation temps-réel</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">25</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">OS embarqués
          et réseaux industriels et de terrain</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">35</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
          Parallélisme</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">15</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">1 Encadrement
          TER</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">10</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">1 Encadrement
          stage Master</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">50</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">2
          Encadrements doctorat</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">200</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Doctorat</td>
        </tr>
        <caption/>
      </table>
      <p><formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mo>•</mo></math></formula>Vincent Loechner, Université de Strasbourg, France</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Intitulé du
          cours</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Nombre d'heures (éq.TD)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Niveau</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Structures de
          données et algorithmes</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">15</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Programmation
          système et réseau</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">52</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Fondements
          des systèmes d'exploitation</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">38</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L3</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Langage
          interprété</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">40</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Compilation
          avancée</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">8</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
          Parallélisme</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">15</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
          Parallélisme</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">30</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">école d'ingénieur</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Encadrement
          TER (1)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">10</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Encadrement
          stage Master (1)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">50</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Encadrement
          doctorat (1)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">100</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Doctorat</td>
        </tr>
        <caption/>
      </table>
      <p><formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mo>•</mo></math></formula>Alain Ketterlin, Université de Strasbourg, France</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Intitulé du
          cours</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Nombre d'heures</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Niveau</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Bases de
          données avancées</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">40</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Ingénierie de
          la preuve</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">18</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Programmation
          fonctionnelle</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">22</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Encadrement
          d'apprentis</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">20</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <caption/>
      </table>
      <p><formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mo>•</mo></math></formula>Julien Narboux, Université de Strasbourg, France</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Intitulé du
          cours</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Nombre d'heures (éq. TD)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Niveau</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Logique et
          Programmation Logique</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">61</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Logique</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">34</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">1a</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Modèles de
          Calcul</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">40</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Techniques de
          Programmation</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">45</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Ingénierie de
          la preuve</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">27</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Certification
          du Logiciel</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">36</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Constructions
          et Preuves en Géométrie</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">6</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">1 Encadrement
          Projet 150h</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">10</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Encadrement
          stage ENSIIE</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">30</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">1a</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Encadrement
          stage Master</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">50</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <caption/>
      </table>
      <p><formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mo>•</mo></math></formula>Éric Violard, Université de Strasbourg, France</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Intitulé du
          cours</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Nombre d'heures (éq. TD)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Niveau</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Programmation
          Fonctionnelle</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">61</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Programmation
          Système &amp; Réseau</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">36</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
          Compilation</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">42</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">
          Sémantique</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">45</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <caption/>
      </table>
      <p><formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mo>•</mo></math></formula>Nicolas Magaud, Université de Strasbourg, France</p>
      <table rend="inline">
        <tr style="border-top-style:solid;border-top-width:1px;border-bottom-style:solid; border-bottom-width:1px;" top-border="true" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">192 heures
          statutaires en L2 informatique, L3 math, Master Informatique Intitulé du cours</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Nombre d'heures (éq. TD)</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">Niveau</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Projet
          Professionnel Personalisé</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">20</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Structures de
          Données - Algorithmes</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">33</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Ingénierie de
          la preuve</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">12</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Preuve et
          Certification du Logiciel</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">36</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M2</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Algorithmique
          et Programmation</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">46</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">ENSIIE-Strasbourg 1A</td>
        </tr>
        <tr style="">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Algorithmique
          et Structures de données</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">30</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">L3 Math</td>
        </tr>
        <tr style="border-bottom-style:solid; border-bottom-width:1px;" bottom-border="true">
          <td style="text-align:left;border-right-style:solid;border-right-width:1px;border-left-style:solid;border-left-width:1px;" right-border="true" left-border="true" halign="left">Génie
          Logiciel</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">30</td>
          <td style="text-align:center;border-right-style:solid;border-right-width:1px;" right-border="true" halign="center">M1 Chemo-informatique</td>
        </tr>
        <caption/>
      </table>
      <p>PhD:</p>
      <sanspuceslist>
        <li id="uid134">
          <p noindent="true">PhD : Benoît Pradelle, 
          <i>Static and Dynamic Polyhedral Compilation Methods for the Execution in Multi-core Environments</i>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#camus-2011-bid71" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, Université de Strasbourg, December the 20th 2011, Philippe
          Clauss</p>
        </li>
        <li id="uid135">
          <p noindent="true">PhD in progress : Alexandra Jimborean, 
          <i>Advanced parallelization tools for multicore programming</i>, October 2009, Philippe Clauss and Vincent Loechner</p>
        </li>
        <li id="uid136">
          <p noindent="true">PhD in progress : Jean-François Dollinger, 
          <i>Dynamic optimizations for GPUs</i>, September 2011, Philippe Clauss and Vincent Loechner</p>
        </li>
      </sanspuceslist>
    </subsection>
  </diffusion>
  <biblio id="bibliography" html="bibliography" numero="10" titre="Bibliography">
    <biblStruct id="camus-2011-bid14" type="inproceedings" rend="refer" n="refercite:BEC07">
      <identifiant type="doi" value="10.1145/1274971.1275000"/>
      <analytic>
        <title level="a">Performance driven data cache prefetching in a dynamic software optimization system</title>
        <author>
          <persName>
            <foreName>Jean Christophe</foreName>
            <surname>Beyler</surname>
            <initial>J. C.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">ICS '07: Proceedings of the 21st annual international conference on Supercomputing</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">202–209</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1274971.1275000" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1274971.
          <allowbreak/>1275000</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid74" type="article" rend="refer" n="refercite:BKC09">
      <identifiant type="doi" value="10.1002/cpe.v21:14"/>
      <analytic>
        <title level="a">A meta-predictor framework for prefetching in object-based DSMs</title>
        <author>
          <persName>
            <foreName>Jean Christophe</foreName>
            <surname>Beyler</surname>
            <initial>J. C.</initial>
          </persName>
          <persName>
            <foreName>Michael</foreName>
            <surname>Klemm</surname>
            <initial>M.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
          <persName>
            <foreName>Michael</foreName>
            <surname>Philippsen</surname>
            <initial>M.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Concurr. Comput. : Pract. Exper.</title>
        <imprint>
          <biblScope type="volume">21</biblScope>
          <dateStruct>
            <month>September</month>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">1789–1803</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1002/cpe.v21:14" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1002/
          <allowbreak/>cpe.
          <allowbreak/>v21:14</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid10" type="inproceedings" rend="refer" n="refercite:CLA96">
      <identifiant type="doi" value="10.1145/237578.237617"/>
      <analytic>
        <title level="a">Counting solutions to linear and nonlinear constraints through Ehrhart polynomials: applications to analyze and transform scientific programs</title>
        <author>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">ICS '96: Proceedings of the 10th international conference on Supercomputing</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>1996</year>
          </dateStruct>
          <biblScope type="pages">278–285</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/237578.237617" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>237578.
          <allowbreak/>237617</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid76" type="article" rend="refer" n="refercite:clauss:2010:inria-00504617:1">
      <identifiant type="hal" value="inria-00504617"/>
      <analytic>
        <title level="a">Symbolic polynomial maximization over convex sets and its application to memory requirement estimation</title>
        <author>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
          <persName>
            <foreName>Federico Javier</foreName>
            <surname>Fernández</surname>
            <initial>F. J.</initial>
          </persName>
          <persName>
            <foreName>Diego</foreName>
            <surname>Garbervetsky</surname>
            <initial>D.</initial>
          </persName>
          <persName key="alchemy-2010-idm417187171104">
            <foreName>Sven</foreName>
            <surname>Verdoolaege</surname>
            <initial>S.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">IEEE Transactions on Very Large Scale Integration (VLSI) Systems</title>
        <imprint>
          <biblScope type="volume">17</biblScope>
          <biblScope type="number">8</biblScope>
          <dateStruct>
            <month>Aug</month>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">983-996</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00504617" type="hal" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00504617</ref>
        </imprint>
      </monogr>
      <affiliation>
        <country>AR</country>
        <country>BE</country>
      </affiliation>
    </biblStruct>
    <biblStruct id="camus-2011-bid9" type="article" rend="refer" n="refercite:CLL98">
      <identifiant type="doi" value="10.1023/A:1008069920230"/>
      <analytic>
        <title level="a">Parametric Analysis of Polyhedral Iteration Spaces</title>
        <author>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">J. VLSI Signal Process. Syst.</title>
        <imprint>
          <biblScope type="volume">19</biblScope>
          <biblScope type="number">2</biblScope>
          <dateStruct>
            <year>1998</year>
          </dateStruct>
          <biblScope type="pages">179–194</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1023/A:1008069920230" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1023/
          <allowbreak/>A:1008069920230</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid75" type="inbook" rend="refer" n="refercite:CLT04">
      <analytic>
        <author>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
          <persName>
            <foreName>Irina</foreName>
            <surname>Tchoupaeva</surname>
            <initial>I.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">A Symbolic Approach to Bernstein Expansion for Program Analysis and Optimization</title>
        <title level="s">LNCS</title>
        <imprint>
          <biblScope type="volume">2985</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2004</year>
          </dateStruct>
          <biblScope type="pages">120-133</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid25" type="inproceedings" rend="refer" n="refercite:ketterlin:2010:inria-00504597:1">
      <identifiant type="doi" value="10.1145/1356058.1356071"/>
      <analytic>
        <title level="a">Prediction and trace compression of data access addresses through nested loop recognition</title>
        <author>
          <persName key="camus-2010-idm102060710304">
            <foreName>Alain</foreName>
            <surname>Ketterlin</surname>
            <initial>A.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">6th annual IEEE/ACM international symposium on Code generation and optimization</title>
        <loc>États-Unis Boston</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">94-103</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1145/1356058.1356071" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1356058.
          <allowbreak/>1356071</ref>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00504597/en" type="hal" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00504597/
          <allowbreak/>en</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid7" type="article" rend="refer" n="refercite:LMC02">
      <analytic>
        <title level="a">Precise data locality optimization of nested loops</title>
        <author>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Benoît</foreName>
            <surname>Meister</surname>
            <initial>B.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Journal of Supercomputing</title>
        <imprint>
          <biblScope type="volume">21</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <month>January</month>
            <year>2002</year>
          </dateStruct>
          <biblScope type="pages">37–76</biblScope>
        </imprint>
      </monogr>
      <note type="bnote">Kluwer Academic Pub.</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid8" type="article" rend="refer" n="refercite:LOW97">
      <analytic>
        <title level="a">Parameterized Polyhedra and their Vertices</title>
        <author>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Doran K.</foreName>
            <surname>Wilde</surname>
            <initial>D. K.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">International Journal of Parallel Programming</title>
        <imprint>
          <biblScope type="volume">25</biblScope>
          <biblScope type="number">6</biblScope>
          <dateStruct>
            <month>December</month>
            <year>1997</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid11" type="article" rend="refer" n="refercite:VSB07">
      <identifiant type="doi" value="10.1007/s00453-006-1231-0"/>
      <analytic>
        <title level="a">Counting Integer Points in Parametric Polytopes Using Barvinok's Rational Functions</title>
        <author>
          <persName key="alchemy-2010-idm417187171104">
            <foreName>Sven</foreName>
            <surname>Verdoolaege</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Rachid</foreName>
            <surname>Seghir</surname>
            <initial>R.</initial>
          </persName>
          <persName>
            <foreName>Kristof</foreName>
            <surname>Beyls</surname>
            <initial>K.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Maurice</foreName>
            <surname>Bruynooghe</surname>
            <initial>M.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Algorithmica</title>
        <imprint>
          <biblScope type="volume">48</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">37–66</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1007/s00453-006-1231-0" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1007/
          <allowbreak/>s00453-006-1231-0</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid44" type="article" rend="refer" n="refercite:Violard04">
      <analytic>
        <title level="a">A Semantic Framework to Address Data Locality in Data Parallel Languages</title>
        <author>
          <persName key="calvi-2006-idm468055693984">
            <foreName>Éric</foreName>
            <surname>Violard</surname>
            <initial>É.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Parallel Computing</title>
        <imprint>
          <biblScope type="volume">30</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>2004</year>
          </dateStruct>
          <biblScope type="pages">139-161</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="5507" id="camus-2011-bid71" type="phdthesis" rend="year" n="cite:pradelle_phd">
      <monogr>
        <title level="m">Static and Dynamic Polyhedral Compilation Methods for the Execution in Multi-core Environments</title>
        <author>
          <persName key="camus-2010-idm102060700896">
            <foreName>Benoît</foreName>
            <surname>Pradelle</surname>
            <initial>B.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="school">Université de Strasbourg</orgName>
          </publisher>
          <dateStruct>
            <month>December</month>
            <year>2011</year>
          </dateStruct>
        </imprint>
      </monogr>
      <note type="typdoc">PhD thesis</note>
    </biblStruct>
    <biblStruct dedoublkey="2058" id="camus-2011-bid70" type="inbook" rend="year" n="cite:CLGV11">
      <analytic>
        <author>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
          <persName>
            <foreName>Diego</foreName>
            <surname>Garbervetsky</surname>
            <initial>D.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName key="alchemy-2010-idm417187171104">
            <foreName>Sven</foreName>
            <surname>Verdoolaege</surname>
            <initial>S.</initial>
          </persName>
        </author>
        <title level="a">Polyhedral Techniques for Parametric Memory Requirement Estimation</title>
      </analytic>
      <monogr>
        <title level="m">Energy-Aware Memory Management for Embedded Multimedia Systems: A Computer-Aided Approach</title>
        <editor role="editor">
          <persName>
            <foreName>Florin</foreName>
            <surname>Balasa</surname>
            <initial>F.</initial>
          </persName>
          <persName>
            <foreName>Dhiraj</foreName>
            <surname>Pradhan</surname>
            <initial>D.</initial>
          </persName>
        </editor>
        <imprint>
          <publisher>
            <orgName>Taylor &amp; Francis</orgName>
          </publisher>
          <dateStruct>
            <year>2011</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="0880" subtype="nonparu" id="camus-2011-bid60" type="article" rend="year" n="cite:seghir:2011:inria-00582388:1">
      <identifiant type="hal" value="inria-00582388"/>
      <analytic>
        <title level="a">Integer Affine Transformations of Parametric Z-polytopes and Applications to Loop Nest Optimization</title>
        <author>
          <persName>
            <foreName>Rachid</foreName>
            <surname>Seghir</surname>
            <initial>R.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Benoît</foreName>
            <surname>Meister</surname>
            <initial>B.</initial>
          </persName>
        </author>
      </analytic>
      <monogr id="rid00017" x-editorial-board="yes" x-international-audience="yes">
        <idno type="issn">1544-3566</idno>
        <title level="j">ACM Transactions on Architecture and Code Optimization</title>
        <imprint>
          <dateStruct>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00582388/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00582388/
          <allowbreak/>en</ref>
        </imprint>
      </monogr>
      <note type="bnote">to appear in 2011.</note>
      <affiliation>
        <country>DZ</country>
        <country>US</country>
      </affiliation>
    </biblStruct>
    <biblStruct dedoublkey="3379" id="camus-2011-bid73" type="inproceedings" rend="year" n="cite:genevaux:2011:inria-00618745:2">
      <identifiant type="hal" value="inria-00618745"/>
      <analytic>
        <title level="a">Formalization of Wu's simple method in Coq</title>
        <author>
          <persName>
            <foreName>Jean-David</foreName>
            <surname>Genevaux</surname>
            <initial>J.-D.</initial>
          </persName>
          <persName key="logical-2006-idm356512361424">
            <foreName>Julien</foreName>
            <surname>Narboux</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Pascal</foreName>
            <surname>Schreck</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName key="logical-2006-idm356512386880">
            <foreName>Jean-Pierre</foreName>
            <surname>Jouannaud</surname>
            <initial>J.-P.</initial>
          </persName>
          <persName>
            <foreName>Zhong</foreName>
            <surname>Shao</surname>
            <initial>Z.</initial>
          </persName>
        </editor>
        <title level="m">CPP 2011 First International Conference on Certified Programs and Proofs</title>
        <loc>Kenting, Taiwan, Province Of China</loc>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <publisher>
            <orgName>Springer-Verlag</orgName>
          </publisher>
          <dateStruct>
            <month>December</month>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00618745/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00618745/
          <allowbreak/>en</ref>
        </imprint>
        <meeting id="cid196878">
          <title>International Conference on Certified Programs and Proofs</title>
          <num>1</num>
          <abbr type="sigle">CPP</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="4997" id="camus-2011-bid65" type="inproceedings" rend="year" n="cite:jimborean:2011:inria-00544501:1">
      <identifiant type="hal" value="inria-00544501"/>
      <analytic>
        <title level="a">VMAD: a Virtual Machine for Advanced Dynamic Analysis of Programs</title>
        <author>
          <persName key="camus-2010-idm102060697840">
            <foreName>Alexandra</foreName>
            <surname>Jimborean</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Matthieu</foreName>
            <surname>Herrmann</surname>
            <initial>M.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">IEEE International Symposium on Performance Analysis of Systems and Software, ISPASS</title>
        <loc>Austin, United States</loc>
        <imprint>
          <publisher>
            <orgName>IEEE</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00544501/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00544501/
          <allowbreak/>en</ref>
        </imprint>
        <meeting id="cid317510">
          <title>International Symposium on Performance Analysis of Systems and Software</title>
          <num>2011</num>
          <abbr type="sigle">ISPASS</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="3486" id="camus-2011-bid66" type="inproceedings" rend="year" n="cite:jimborean:2011:inria-00572785:1">
      <identifiant type="hal" value="inria-00572785"/>
      <analytic>
        <title level="a">Handling Multi-Versioning in LLVM: Code Tracking and Cloning</title>
        <author>
          <persName key="camus-2010-idm102060697840">
            <foreName>Alexandra</foreName>
            <surname>Jimborean</surname>
            <initial>A.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">WIR 2011: Workshop on Intermediate Representations, in conjunction with CGO 2011</title>
        <loc>Chamonix, France</loc>
        <imprint>
          <publisher>
            <orgName type="organisation">Florent Bouchez, Sebastian Hack, Eelco Visser</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00572785/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00572785/
          <allowbreak/>en</ref>
        </imprint>
        <meeting id="cid580295">
          <title>Workshop on Intermediate Representations</title>
          <num>2011</num>
          <abbr type="sigle">WIR</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="3185" id="camus-2011-bid69" type="inproceedings" rend="year" n="cite:ketterlin:2011:inria-00544497:1">
      <identifiant type="hal" value="inria-00544497"/>
      <analytic>
        <title level="a">Efficient Memory Tracing by Program Skeletonization</title>
        <author>
          <persName key="camus-2010-idm102060710304">
            <foreName>Alain</foreName>
            <surname>Ketterlin</surname>
            <initial>A.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">IEEE International Symposium on Performance Analysis of Systems and Software, ISPASS</title>
        <loc>Austin, United States</loc>
        <imprint>
          <publisher>
            <orgName>IEEE</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00544497/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00544497/
          <allowbreak/>en</ref>
        </imprint>
        <meeting id="cid317510">
          <title>International Symposium on Performance Analysis of Systems and Software</title>
          <num>2011</num>
          <abbr type="sigle">ISPASS</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="2326" id="camus-2011-bid72" type="inproceedings" rend="year" n="cite:pham:2011:inria-00584918:1">
      <identifiant type="hal" value="inria-00584918"/>
      <identifiant type="doi" value="10.1007/978-3-642-21898-9_32"/>
      <analytic>
        <title level="a">A Coq-based Library for Interactive and Automated Theorem Proving in Plane Geometry</title>
        <author>
          <persName key="marelle-2008-idm227915015280">
            <foreName>Tuan Minh</foreName>
            <surname>Pham</surname>
            <initial>T. M.</initial>
          </persName>
          <persName key="marelle-2006-idm415677256560">
            <foreName>Yves</foreName>
            <surname>Bertot</surname>
            <initial>Y.</initial>
          </persName>
          <persName key="logical-2006-idm356512361424">
            <foreName>Julien</foreName>
            <surname>Narboux</surname>
            <initial>J.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">The 11th International Conference on Computational Science and Its Applications (ICCSA 2011)</title>
        <loc>Santander, Spain</loc>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">6785</biblScope>
          <publisher>
            <orgName>Springer-Verlag</orgName>
          </publisher>
          <dateStruct>
            <year>2011</year>
          </dateStruct>
          <biblScope type="pages">368-383</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00584918/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00584918/
          <allowbreak/>en</ref>
        </imprint>
        <meeting id="cid509805">
          <title>International Conference on Computational Science and Its Applications</title>
          <num>11</num>
          <abbr type="sigle">ICCSA</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="2356" id="camus-2011-bid67" type="inproceedings" rend="year" n="cite:PRADELLE:2011:INRIA-00564311:1">
      <identifiant type="hal" value="inria-00564311"/>
      <analytic>
        <title level="a">Adaptive Runtime Selection of Parallel Schedules in the Polytope Model</title>
        <author>
          <persName key="camus-2010-idm102060700896">
            <foreName>Benoît</foreName>
            <surname>Pradelle</surname>
            <initial>B.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">High Performance Computing Symposium</title>
        <loc>Boston, États-Unis</loc>
        <imprint>
          <publisher>
            <orgName>ACM/SIGSIM</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00564311/en/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00564311/
          <allowbreak/>en/
          <allowbreak/></ref>
        </imprint>
        <meeting id="cid560110">
          <title>High Performance Computing Symposium</title>
          <num>19</num>
          <abbr type="sigle">HPCS</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct dedoublkey="4855" id="camus-2011-bid68" type="inproceedings" rend="year" n="cite:pradelle:2011:inria-00572797:1">
      <identifiant type="hal" value="inria-00572797"/>
      <analytic>
        <title level="a">Transparent Parallelization of Binary Code</title>
        <author>
          <persName key="camus-2010-idm102060700896">
            <foreName>Benoît</foreName>
            <surname>Pradelle</surname>
            <initial>B.</initial>
          </persName>
          <persName key="camus-2010-idm102060710304">
            <foreName>Alain</foreName>
            <surname>Ketterlin</surname>
            <initial>A.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">First International Workshop on Polyhedral Compilation Techniques, IMPACT 2011, in conjunction with CGO 2011</title>
        <loc>Chamonix, France</loc>
        <imprint>
          <publisher>
            <orgName type="organisation">Christophe Alias, Cédric Bastoul</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2011</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00572797/en" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00572797/
          <allowbreak/>en</ref>
        </imprint>
        <meeting id="cid596150">
          <title>International Workshop on Polyhedral Compilation Techniques</title>
          <num>1</num>
          <abbr type="sigle">IMPACT</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid27" type="inproceedings" rend="foot" n="footcite:ABC06b">
      <identifiant type="doi" value="10.1109/CGO.2006.37"/>
      <analytic>
        <title level="a">Using Machine Learning to Focus Iterative Optimization</title>
        <author>
          <persName>
            <foreName>F.</foreName>
            <surname>Agakov</surname>
            <initial>F.</initial>
          </persName>
          <persName>
            <foreName>E.</foreName>
            <surname>Bonilla</surname>
            <initial>E.</initial>
          </persName>
          <persName>
            <foreName>J.</foreName>
            <surname>Cavazos</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>B.</foreName>
            <surname>Franke</surname>
            <initial>B.</initial>
          </persName>
          <persName key="alchemy-2006-idm153718777440">
            <foreName>G.</foreName>
            <surname>Fursin</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>M. F. P.</foreName>
            <surname>O'Boyle</surname>
            <initial>M. F. P.</initial>
          </persName>
          <persName>
            <foreName>J.</foreName>
            <surname>Thomson</surname>
            <initial>J.</initial>
          </persName>
          <persName key="demar-2008-idm8889449936">
            <foreName>M.</foreName>
            <surname>Toussaint</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>C. K. I.</foreName>
            <surname>Williams</surname>
            <initial>C. K. I.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">CGO '06: Proceedings of the International Symposium on Code Generation and Optimization</title>
        <loc>Washington, DC, USA</loc>
        <imprint>
          <publisher>
            <orgName>IEEE Computer Society</orgName>
          </publisher>
          <dateStruct>
            <year>2006</year>
          </dateStruct>
          <biblScope type="pages">295–305</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/CGO.2006.37" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1109/
          <allowbreak/>CGO.
          <allowbreak/>2006.
          <allowbreak/>37</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid49" type="phdthesis" rend="foot" n="footcite:Backb">
      <monogr>
        <title level="m">On the Correctness of Refinement Steps in Program Development</title>
        <author>
          <persName>
            <foreName>R.J.R.</foreName>
            <surname>Back</surname>
            <initial>R.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="school">University of Helsinki</orgName>
          </publisher>
          <dateStruct>
            <year>1978</year>
          </dateStruct>
        </imprint>
      </monogr>
      <note type="typdoc">Ph. D. Thesis</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid52" type="article" rend="foot" n="footcite:Banatre">
      <analytic>
        <title level="a">The 
        <span class="smallcap" align="left">Gamma</span>Model and its Discipline of Programming</title>
        <author>
          <persName>
            <foreName>J.-P.</foreName>
            <surname>Banâtre</surname>
            <initial>J.-P.</initial>
          </persName>
          <persName key="pop_art-2006-idm40974895136">
            <foreName>D.</foreName>
            <surname>Le Métayer</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Science of Computer Programming</title>
        <imprint>
          <biblScope type="volume">15</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>1990</year>
          </dateStruct>
          <biblScope type="pages">55-79</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid37" type="manual" rend="foot" n="footcite:COQ">
      <monogr>
        <title level="m">The Coq Proof Assistant Reference Manual : Version 6.1</title>
        <author>
          <persName key="logical-2006-idm356512393168">
            <foreName>Bruno</foreName>
            <surname>Barras</surname>
            <initial>B.</initial>
          </persName>
          <persName>
            <foreName>Samuel</foreName>
            <surname>Boutin</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Cristina</foreName>
            <surname>Cornes</surname>
            <initial>C.</initial>
          </persName>
          <persName>
            <foreName>Judicael</foreName>
            <surname>Courant</surname>
            <initial>J.</initial>
          </persName>
          <persName key="proval-2006-idm410174303696">
            <foreName>Jean-Christophe</foreName>
            <surname>Filliatre</surname>
            <initial>J.-C.</initial>
          </persName>
          <persName>
            <foreName>Eduardo</foreName>
            <surname>Gimenez</surname>
            <initial>E.</initial>
          </persName>
          <persName key="logical-2006-idm356512390528">
            <foreName>Hugo</foreName>
            <surname>Herbelin</surname>
            <initial>H.</initial>
          </persName>
          <persName key="signes-2006-idm424409761136">
            <foreName>Gerard</foreName>
            <surname>Huet</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>Cesar</foreName>
            <surname>Munoz</surname>
            <initial>C.</initial>
          </persName>
          <persName>
            <foreName>Chetan</foreName>
            <surname>Murthy</surname>
            <initial>C.</initial>
          </persName>
          <persName>
            <foreName>Catherine</foreName>
            <surname>Parent</surname>
            <initial>C.</initial>
          </persName>
          <persName key="proval-2008-idm220575009344">
            <foreName>Christine</foreName>
            <surname>Paulin-Mohring</surname>
            <initial>C.</initial>
          </persName>
          <persName>
            <foreName>Amokrane</foreName>
            <surname>Saibi</surname>
            <initial>A.</initial>
          </persName>
          <persName key="logical-2006-idm356512399712">
            <foreName>Benjamin</foreName>
            <surname>Werner</surname>
            <initial>B.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <year>1997</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid13" type="inproceedings" rend="foot" n="footcite:BBK08">
      <identifiant type="doi" value="10.1145/1375527.1375562"/>
      <analytic>
        <title level="a">A compiler framework for optimization of affine loop nests for GPGPUs</title>
        <author>
          <persName>
            <foreName>Muthu Manikandan</foreName>
            <surname>Baskaran</surname>
            <initial>M. M.</initial>
          </persName>
          <persName key="alchemy-2008-idm517599801984">
            <foreName>Uday</foreName>
            <surname>Bondhugula</surname>
            <initial>U.</initial>
          </persName>
          <persName>
            <foreName>Sriram</foreName>
            <surname>Krishnamoorthy</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>J.</foreName>
            <surname>Ramanujam</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Atanas</foreName>
            <surname>Rountev</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>P.</foreName>
            <surname>Sadayappan</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">ICS '08: Proceedings of the 22nd annual international conference on Supercomputing</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">225–234</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1375527.1375562" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1375527.
          <allowbreak/>1375562</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid1" type="inproceedings" rend="foot" n="footcite:Bas04">
      <identifiant type="hal" value="ccsd-00017260"/>
      <analytic>
        <title level="a">Code Generation in the Polyhedral Model Is Easier Than You Think</title>
        <author>
          <persName key="alchemy-2006-idm153718774128">
            <foreName>Cédric</foreName>
            <surname>Bastoul</surname>
            <initial>C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PACT'13 IEEE International Conference on Parallel Architecture and Compilation Techniques</title>
        <loc>Juan-les-Pins, France</loc>
        <imprint>
          <dateStruct>
            <year>2004</year>
          </dateStruct>
          <biblScope type="pages">7–16</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.ccsd.cnrs.fr/ccsd-00017260" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>ccsd.
          <allowbreak/>cnrs.
          <allowbreak/>fr/
          <allowbreak/>ccsd-00017260</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid38" type="inproceedings" rend="foot" n="footcite:BertotGL04">
      <analytic>
        <title level="a">A Structured Approach to Proving Compiler Optimizations Based on Dataflow Analysis</title>
        <author>
          <persName key="marelle-2006-idm415677256560">
            <foreName>Yves</foreName>
            <surname>Bertot</surname>
            <initial>Y.</initial>
          </persName>
          <persName key="everest-2006-idm306718606528">
            <foreName>Benjamin</foreName>
            <surname>Grégoire</surname>
            <initial>B.</initial>
          </persName>
          <persName key="gallium-2006-idm16698282864">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">TYPES 2004</title>
        <imprint>
          <dateStruct>
            <year>2004</year>
          </dateStruct>
          <biblScope type="pages">66-81</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid43" type="inproceedings" rend="foot" n="footcite:bouge94proof">
      <analytic>
        <title level="a">A Proof System for a Simple Data-Parallel Programming Language</title>
        <author>
          <persName key="paris-2006-idm124332467968">
            <foreName>L.</foreName>
            <surname>Bougé</surname>
            <initial>L.</initial>
          </persName>
          <persName>
            <foreName>Y.</foreName>
            <surname>Le Guyadec</surname>
            <initial>Y.</initial>
          </persName>
          <persName>
            <foreName>G.</foreName>
            <surname>Utard</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>B.</foreName>
            <surname>Virot</surname>
            <initial>B.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">IFIP WG 10.3, Applications in Parallel and Distributed Computing</title>
        <loc>Caracas (Venezuela)</loc>
        <imprint>
          <publisher>
            <orgName>North-Holland</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>1994</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid19" type="inproceedings" rend="foot" n="footcite:bridges-etal-2007-micro">
      <identifiant type="doi" value="10.1109/MICRO.2007.35"/>
      <analytic>
        <title level="a">Revisiting the Sequential Programming Model for Multi-Core</title>
        <author>
          <persName>
            <foreName>Matthew</foreName>
            <surname>Bridges</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>Neil</foreName>
            <surname>Vachharajani</surname>
            <initial>N.</initial>
          </persName>
          <persName key="everest-2006-idm306718573648">
            <foreName>Yun</foreName>
            <surname>Zhang</surname>
            <initial>Y.</initial>
          </persName>
          <persName>
            <foreName>Thomas</foreName>
            <surname>Jablin</surname>
            <initial>T.</initial>
          </persName>
          <persName>
            <foreName>David I.</foreName>
            <surname>August</surname>
            <initial>D. I.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">MICRO '07: Proceedings of the 40th Annual IEEE/ACM International Symposium on Microarchitecture</title>
        <loc>Washington, DC, USA</loc>
        <imprint>
          <publisher>
            <orgName>IEEE Computer Society</orgName>
          </publisher>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">69–84</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/MICRO.2007.35" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1109/
          <allowbreak/>MICRO.
          <allowbreak/>2007.
          <allowbreak/>35</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid23" type="article" rend="foot" n="footcite:burtscher-etal-2005-vpc4">
      <analytic>
        <title level="a">The VPC Trace-Compression Algorithms</title>
        <author>
          <persName>
            <foreName>Martin</foreName>
            <surname>Burtscher</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>Ilya</foreName>
            <surname>Ganusov</surname>
            <initial>I.</initial>
          </persName>
          <persName>
            <foreName>Sandra J.</foreName>
            <surname>Jackson</surname>
            <initial>S. J.</initial>
          </persName>
          <persName>
            <foreName>Jian</foreName>
            <surname>Ke</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Paruj</foreName>
            <surname>Ratanaworabhan</surname>
            <initial>P.</initial>
          </persName>
          <persName>
            <foreName>Nana B.</foreName>
            <surname>Sam</surname>
            <initial>N. B.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">IEEE Trans. Comput.</title>
        <imprint>
          <biblScope type="volume">54</biblScope>
          <biblScope type="number">11</biblScope>
          <dateStruct>
            <year>2005</year>
          </dateStruct>
          <biblScope type="pages">1329–1344</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid57" type="inproceedings" rend="foot" n="footcite:Pichardie">
      <analytic>
        <title level="a">Embedding of Systems of Affine Recurrence Equations in Coq</title>
        <author>
          <persName key="lande-2006-idm546825721296">
            <foreName>David</foreName>
            <surname>Cachera</surname>
            <initial>D.</initial>
          </persName>
          <persName key="everest-2006-idm306718565488">
            <foreName>David</foreName>
            <surname>Pichardie</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Proc. of 16th International Conference on Theorem Proving in Higher Order Logics (TPHOLs'03)</title>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="number">2758</biblScope>
          <publisher>
            <orgName>Springer-Verlag</orgName>
          </publisher>
          <dateStruct>
            <year>2003</year>
          </dateStruct>
          <biblScope type="pages">155–170</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid51" type="book" rend="foot" n="footcite:ChandyUnity">
      <monogr>
        <title level="m">Parallel Program Design: 
        <i>A Foundation</i></title>
        <author>
          <persName>
            <foreName>K.M.</foreName>
            <surname>Chandy</surname>
            <initial>K.</initial>
          </persName>
          <persName>
            <foreName>J.</foreName>
            <surname>Misra</surname>
            <initial>J.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName>Addison Wesley</orgName>
          </publisher>
          <dateStruct>
            <year>1988</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid31" type="article" rend="foot" n="footcite:CIL05">
      <identifiant type="doi" value="10.1109/tpds.2005.69"/>
      <analytic>
        <title level="a">Design Space Exploration of a Software Speculative Parallelization Scheme</title>
        <author>
          <persName>
            <foreName>Marcelo</foreName>
            <surname>Cintra</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>Diego R.</foreName>
            <surname>Llanos</surname>
            <initial>D. R.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">IEEE Trans. Parallel Distrib. Syst.</title>
        <imprint>
          <biblScope type="volume">16</biblScope>
          <biblScope type="number">6</biblScope>
          <dateStruct>
            <year>2005</year>
          </dateStruct>
          <biblScope type="pages">562–576</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/tpds.2005.69" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1109/
          <allowbreak/>tpds.
          <allowbreak/>2005.
          <allowbreak/>69</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid2" type="article" rend="foot" n="footcite:Fea91">
      <analytic>
        <title level="a">Dataflow analysis of scalar and array references</title>
        <author>
          <persName key="compsys-2006-idm484020224784">
            <foreName>Paul</foreName>
            <surname>Feautrier</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">International Journal of Parallel Programming</title>
        <imprint>
          <biblScope type="volume">20</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>1991</year>
          </dateStruct>
          <biblScope type="pages">23–53</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid3" type="article" rend="foot" n="footcite:Fea92a">
      <analytic>
        <title level="a">Some efficient solutions to the affine scheduling problem, Part 1 : one dimensional time</title>
        <author>
          <persName key="compsys-2006-idm484020224784">
            <foreName>Paul</foreName>
            <surname>Feautrier</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">International Journal of Parallel Programming</title>
        <imprint>
          <biblScope type="volume">21</biblScope>
          <biblScope type="number">5</biblScope>
          <dateStruct>
            <year>1992</year>
          </dateStruct>
          <biblScope type="pages">313–348</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid4" type="article" rend="foot" n="footcite:Fea92b">
      <analytic>
        <title level="a">Some efficient solutions to the affine scheduling problem, Part 2 : multidimensional time</title>
        <author>
          <persName key="compsys-2006-idm484020224784">
            <foreName>Paul</foreName>
            <surname>Feautrier</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">International Journal of Parallel Programming</title>
        <imprint>
          <biblScope type="volume">21</biblScope>
          <biblScope type="number">6</biblScope>
          <dateStruct>
            <year>1992</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid56" type="inproceedings" rend="foot" n="footcite:Feautrier96automaticparallelization">
      <analytic>
        <title level="a">Automatic Parallelization in the Polytope Model</title>
        <author>
          <persName key="compsys-2006-idm484020224784">
            <foreName>Paul</foreName>
            <surname>Feautrier</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">The Data Parallel Programming Model: Foundations, HPF Realization, and Scientific Applications</title>
        <imprint>
          <publisher>
            <orgName>Springer-Verlag</orgName>
          </publisher>
          <dateStruct>
            <year>1996</year>
          </dateStruct>
          <biblScope type="pages">79–103</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid36" type="article" rend="foot" n="footcite:lowlevel08">
      <identifiant type="doi" value="10.1145/1379022.1375603"/>
      <analytic>
        <title level="a">Certifying low-level programs with hardware interrupts and preemptive threads</title>
        <author>
          <persName>
            <foreName>Xinyu</foreName>
            <surname>Feng</surname>
            <initial>X.</initial>
          </persName>
          <persName>
            <foreName>Zhong</foreName>
            <surname>Shao</surname>
            <initial>Z.</initial>
          </persName>
          <persName>
            <foreName>Yuan</foreName>
            <surname>Dong</surname>
            <initial>Y.</initial>
          </persName>
          <persName key="smis-2009-idm306842376240">
            <foreName>Yu</foreName>
            <surname>Guo</surname>
            <initial>Y.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">SIGPLAN Not.</title>
        <imprint>
          <biblScope type="volume">43</biblScope>
          <biblScope type="number">6</biblScope>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">170–182</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1145/1379022.1375603" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1379022.
          <allowbreak/>1375603</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid48" type="inproceedings" rend="foot" n="footcite:atomicity08">
      <identifiant type="doi" value="10.1145/1375581.1375618"/>
      <analytic>
        <title level="a">Velodrome: a sound and complete dynamic atomicity checker for multithreaded programs</title>
        <author>
          <persName>
            <foreName>Cormac</foreName>
            <surname>Flanagan</surname>
            <initial>C.</initial>
          </persName>
          <persName>
            <foreName>Stephen N.</foreName>
            <surname>Freund</surname>
            <initial>S. N.</initial>
          </persName>
          <persName>
            <foreName>Jaeheon</foreName>
            <surname>Yi</surname>
            <initial>J.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">293–303</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1145/1375581.1375618" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1375581.
          <allowbreak/>1375618</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid42" type="phdthesis" rend="foot" n="footcite:Gerner">
      <monogr>
        <title level="m">La sémantique des directives au compilateur : application au parallélisme de données</title>
        <author>
          <persName>
            <foreName>Philippe</foreName>
            <surname>Gerner</surname>
            <initial>P.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="school">Université Louis Pasteur</orgName>
          </publisher>
          <dateStruct>
            <year>2002</year>
          </dateStruct>
        </imprint>
      </monogr>
      <note type="typdoc">Ph. D. Thesis</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid45" type="inproceedings" rend="foot" n="footcite:gerner01theoretical">
      <analytic>
        <title level="a">A Theoretical Framework of Data Parallelism and Its Operational Semantics</title>
        <author>
          <persName>
            <foreName>Philippe</foreName>
            <surname>Gerner</surname>
            <initial>P.</initial>
          </persName>
          <persName key="calvi-2006-idm468055693984">
            <foreName>Éric</foreName>
            <surname>Violard</surname>
            <initial>É.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Euro-Par 2000</title>
        <title level="s">LNCS</title>
        <imprint>
          <biblScope type="volume">1900</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2001</year>
          </dateStruct>
          <biblScope type="pages">668–677</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid50" type="article" rend="foot" n="footcite:Gribomont">
      <identifiant type="doi" value="10.1016/0167-6423(90)90020-E"/>
      <analytic>
        <title level="a">Stepwise refinement and concurrency: the finite-state case</title>
        <author>
          <persName>
            <foreName>E. P.</foreName>
            <surname>Gribomont</surname>
            <initial>E. P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Sci. Comput. Program.</title>
        <imprint>
          <biblScope type="volume">14</biblScope>
          <biblScope type="number">2-3</biblScope>
          <dateStruct>
            <year>1990</year>
          </dateStruct>
          <biblScope type="pages">185–228</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1016/0167-6423(90)90020-E" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1016/
          <allowbreak/>0167-6423(90)90020-E</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid0" type="article" rend="foot" n="footcite:HPP09">
      <identifiant type="doi" value="10.1145/1461928.1461946"/>
      <analytic>
        <title level="a">Compiler research: the next 50 years</title>
        <author>
          <persName>
            <foreName>Mary</foreName>
            <surname>Hall</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>David</foreName>
            <surname>Padua</surname>
            <initial>D.</initial>
          </persName>
          <persName>
            <foreName>Keshav</foreName>
            <surname>Pingali</surname>
            <initial>K.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Commun. ACM</title>
        <imprint>
          <biblScope type="volume">52</biblScope>
          <biblScope type="number">2</biblScope>
          <dateStruct>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">60–67</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1461928.1461946" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1461928.
          <allowbreak/>1461946</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid54" type="inproceedings" rend="foot" n="footcite:HoborAN08">
      <analytic>
        <title level="a">Oracle Semantics for Concurrent Separation Logic</title>
        <author>
          <persName>
            <foreName>Aquinas</foreName>
            <surname>Hobor</surname>
            <initial>A.</initial>
          </persName>
          <persName key="moscova-2006-idm117579648528">
            <foreName>Andrew W.</foreName>
            <surname>Appel</surname>
            <initial>A. W.</initial>
          </persName>
          <persName>
            <foreName>Francesco Zappa</foreName>
            <surname>Nardelli</surname>
            <initial>F. Z.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">ESOP</title>
        <imprint>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">353-367</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid61" type="inproceedings" rend="foot" n="footcite:ketterlin:2010:inria-00502813:1">
      <identifiant type="hal" value="inria-00502813"/>
      <analytic>
        <title level="a">Recovering the Memory Behavior of Executable Programs</title>
        <author>
          <persName key="camus-2010-idm102060710304">
            <foreName>Alain</foreName>
            <surname>Ketterlin</surname>
            <initial>A.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">10th IEEE Working Conference on Source Code Analysis and Manipulation, SCAM</title>
        <loc>Roumanie Timisoara</loc>
        <imprint>
          <publisher>
            <orgName>IEEE Computer Society Press</orgName>
          </publisher>
          <dateStruct>
            <month>Sep</month>
            <year>2010</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00502813" type="hal" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00502813</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid18" type="inproceedings" rend="foot" n="footcite:kulkarni-etal-2007-pldi">
      <identifiant type="doi" value="10.1145/1250734.1250759"/>
      <analytic>
        <title level="a">Optimistic parallelism requires abstractions</title>
        <author>
          <persName>
            <foreName>Milind</foreName>
            <surname>Kulkarni</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>Keshav</foreName>
            <surname>Pingali</surname>
            <initial>K.</initial>
          </persName>
          <persName>
            <foreName>Bruce</foreName>
            <surname>Walter</surname>
            <initial>B.</initial>
          </persName>
          <persName>
            <foreName>Ganesh</foreName>
            <surname>Ramanarayanan</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>Kavita</foreName>
            <surname>Bala</surname>
            <initial>K.</initial>
          </persName>
          <persName>
            <foreName>L. Paul</foreName>
            <surname>Chew</surname>
            <initial>L. P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PLDI '07: Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">211–222</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1250734.1250759" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1250734.
          <allowbreak/>1250759</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid46" type="article" rend="foot" n="footcite:LAK08">
      <analytic>
        <title level="a">Transactional memory</title>
        <author>
          <persName>
            <foreName>James</foreName>
            <surname>Larus</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Christos</foreName>
            <surname>Kozyrakis</surname>
            <initial>C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Commun. ACM</title>
        <imprint>
          <biblScope type="volume">51</biblScope>
          <biblScope type="number">7</biblScope>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">80–88</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid20" type="article" rend="foot" n="footcite:lee-2006-computer">
      <identifiant type="doi" value="10.1109/MC.2006.180"/>
      <analytic>
        <title level="a">The Problem with Threads</title>
        <author>
          <persName>
            <foreName>Edward A.</foreName>
            <surname>Lee</surname>
            <initial>E. A.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Computer</title>
        <imprint>
          <biblScope type="volume">39</biblScope>
          <biblScope type="number">5</biblScope>
          <dateStruct>
            <year>2006</year>
          </dateStruct>
          <biblScope type="pages">33–42</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/MC.2006.180" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1109/
          <allowbreak/>MC.
          <allowbreak/>2006.
          <allowbreak/>180</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid55" type="article" rend="foot" n="footcite:Lengauer">
      <analytic>
        <title level="a">Loop Parallelization in the Polytope Model</title>
        <author>
          <persName>
            <foreName>C.</foreName>
            <surname>Lengauer</surname>
            <initial>C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Parallel Processing Letters</title>
        <imprint>
          <biblScope type="volume">4</biblScope>
          <biblScope type="number">3</biblScope>
          <dateStruct>
            <year>1994</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid39" type="article" rend="foot" n="footcite:Leroy09">
      <analytic>
        <title level="a">Formal verification of a realistic compiler</title>
        <author>
          <persName key="gallium-2006-idm16698282864">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Communications of the ACM</title>
        <imprint>
          <dateStruct>
            <month>July</month>
            <year>2009</year>
          </dateStruct>
        </imprint>
      </monogr>
      <note type="bnote">To appear</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid62" type="misc" rend="foot" n="footcite:CompCert">
      <monogr>
        <title level="m">The Compcert verified compiler, software and commented proof</title>
        <author>
          <persName key="gallium-2006-idm16698282864">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <month>January</month>
            <year>2010</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://compcert.inria.fr" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>compcert.
          <allowbreak/>inria.
          <allowbreak/>fr</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid26" type="inproceedings" rend="foot" n="footcite:liao-etal-1999-ppopp">
      <identifiant type="doi" value="10.1145/301104.301108"/>
      <analytic>
        <title level="a">SUIF Explorer: an interactive and interprocedural parallelizer</title>
        <author>
          <persName>
            <foreName>Shih-Wei</foreName>
            <surname>Liao</surname>
            <initial>S.-W.</initial>
          </persName>
          <persName>
            <foreName>Amer</foreName>
            <surname>Diwan</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Robert P.</foreName>
            <surname>Bosch</surname>
            <initial>R. P.</initial>
          </persName>
          <persName>
            <foreName>Anwar</foreName>
            <surname>Ghuloum</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Monica S.</foreName>
            <surname>Lam</surname>
            <initial>M. S.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PPoPP '99: Proceedings of the seventh ACM SIGPLAN symposium on Principles and practice of parallel programming</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>1999</year>
          </dateStruct>
          <biblScope type="pages">37–48</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/301104.301108" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>301104.
          <allowbreak/>301108</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid6" type="inproceedings" rend="foot" n="footcite:LMC01">
      <analytic>
        <title level="a">Data Sequence Locality: a Generalization of Temporal Locality</title>
        <author>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Benoît</foreName>
            <surname>Meister</surname>
            <initial>B.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Euro-Par 2001</title>
        <loc>Manchester, UK</loc>
        <imprint>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2001</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid5" type="article" rend="foot" n="footcite:LM00">
      <analytic>
        <title level="a">Communication Optimization for Affine Recurrence Equations using Broadcast and Locality</title>
        <author>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Catherine</foreName>
            <surname>Mongenet</surname>
            <initial>C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">International Journal of Parallel Programming</title>
        <imprint>
          <biblScope type="volume">28</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>2000</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid15" type="inproceedings" rend="foot" n="footcite:LCP05">
      <identifiant type="doi" value="10.1145/1065010.1065034"/>
      <analytic>
        <title level="a">Pin: building customized program analysis tools with dynamic instrumentation</title>
        <author>
          <persName>
            <foreName>Chi-Keung</foreName>
            <surname>Luk</surname>
            <initial>C.-K.</initial>
          </persName>
          <persName>
            <foreName>Robert</foreName>
            <surname>Cohn</surname>
            <initial>R.</initial>
          </persName>
          <persName>
            <foreName>Robert</foreName>
            <surname>Muth</surname>
            <initial>R.</initial>
          </persName>
          <persName>
            <foreName>Harish</foreName>
            <surname>Patil</surname>
            <initial>H.</initial>
          </persName>
          <persName>
            <foreName>Artur</foreName>
            <surname>Klauser</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Geoff</foreName>
            <surname>Lowney</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>Steven</foreName>
            <surname>Wallace</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Vijay Janapa</foreName>
            <surname>Reddi</surname>
            <initial>V. J.</initial>
          </persName>
          <persName>
            <foreName>Kim</foreName>
            <surname>Hazelwood</surname>
            <initial>K.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PLDI '05: Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2005</year>
          </dateStruct>
          <biblScope type="pages">190–200</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1065010.1065034" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1065010.
          <allowbreak/>1065034</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid47" type="inproceedings" rend="foot" n="footcite:transaction08">
      <identifiant type="doi" value="10.1145/1328438.1328448"/>
      <analytic>
        <title level="a">High-level small-step operational semantics for transactions</title>
        <author>
          <persName>
            <foreName>Katherine F.</foreName>
            <surname>Moore</surname>
            <initial>K. F.</initial>
          </persName>
          <persName>
            <foreName>Dan</foreName>
            <surname>Grossman</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">POPL '08: Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">51–62</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1145/1328438.1328448" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1328438.
          <allowbreak/>1328448</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid24" type="inproceedings" rend="foot" n="footcite:moseley-etal-2007-cf">
      <analytic>
        <title level="a">Identifying potential parallelism via loop-centric profiling</title>
        <author>
          <persName>
            <foreName>T.</foreName>
            <surname>Moseley</surname>
            <initial>T.</initial>
          </persName>
          <persName>
            <foreName>D. A.</foreName>
            <surname>Connors</surname>
            <initial>D. A.</initial>
          </persName>
          <persName>
            <foreName>D.</foreName>
            <surname>Grunwald</surname>
            <initial>D.</initial>
          </persName>
          <persName>
            <foreName>R.</foreName>
            <surname>Peri</surname>
            <initial>R.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">CF '07: Proceedings of the 4th international conference on Computing frontiers</title>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">143–152</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid59" type="article" rend="foot" n="footcite:Necula04">
      <identifiant type="doi" value="10.1145/358438.349314"/>
      <analytic>
        <title level="a">Translation validation for an optimizing compiler</title>
        <author>
          <persName>
            <foreName>George C.</foreName>
            <surname>Necula</surname>
            <initial>G. C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">SIGPLAN Not.</title>
        <imprint>
          <biblScope type="volume">35</biblScope>
          <biblScope type="number">5</biblScope>
          <dateStruct>
            <year>2000</year>
          </dateStruct>
          <biblScope type="pages">83–94</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/358438.349314" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>358438.
          <allowbreak/>349314</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid58" type="article" rend="foot" n="footcite:Pnueli98thecode">
      <analytic>
        <title level="a">The Code Validation Tool (CVT) - Automatic verification of code generated from synchronous languages</title>
        <author>
          <persName>
            <foreName>A.</foreName>
            <surname>Pnueli</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>O.</foreName>
            <surname>Shtrichman</surname>
            <initial>O.</initial>
          </persName>
          <persName>
            <foreName>M.</foreName>
            <surname>Siegel</surname>
            <initial>M.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Software Tools for Technology Transfer</title>
        <imprint>
          <biblScope type="volume">2</biblScope>
          <dateStruct>
            <year>1998</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid29" type="inproceedings" rend="foot" n="footcite:PBC08">
      <identifiant type="doi" value="10.1145/1375581.1375594"/>
      <analytic>
        <title level="a">Iterative optimization in the polyhedral model: part II, multidimensional time</title>
        <author>
          <persName key="alchemy-2006-idm153718737136">
            <foreName>Louis-Noël</foreName>
            <surname>Pouchet</surname>
            <initial>L.-N.</initial>
          </persName>
          <persName key="alchemy-2006-idm153718774128">
            <foreName>Cédric</foreName>
            <surname>Bastoul</surname>
            <initial>C.</initial>
          </persName>
          <persName key="alchemy-2006-idm153718782752">
            <foreName>Albert</foreName>
            <surname>Cohen</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>J.</foreName>
            <surname>Cavazos</surname>
            <initial>J.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">90–100</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1375581.1375594" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1375581.
          <allowbreak/>1375594</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid28" type="inproceedings" rend="foot" n="footcite:PBC07">
      <identifiant type="doi" value="10.1109/CGO.2007.21"/>
      <analytic>
        <title level="a">Iterative Optimization in the Polyhedral Model: part I, One-Dimensional Time</title>
        <author>
          <persName key="alchemy-2006-idm153718737136">
            <foreName>Louis-Noël</foreName>
            <surname>Pouchet</surname>
            <initial>L.-N.</initial>
          </persName>
          <persName key="alchemy-2006-idm153718774128">
            <foreName>Cédric</foreName>
            <surname>Bastoul</surname>
            <initial>C.</initial>
          </persName>
          <persName key="alchemy-2006-idm153718782752">
            <foreName>Albert</foreName>
            <surname>Cohen</surname>
            <initial>A.</initial>
          </persName>
          <persName key="alchemy-2006-idm153718731792">
            <foreName>Nicolas</foreName>
            <surname>Vasilache</surname>
            <initial>N.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">CGO '07: Proceedings of the International Symposium on Code Generation and Optimization</title>
        <loc>Washington, DC, USA</loc>
        <imprint>
          <publisher>
            <orgName>IEEE Computer Society</orgName>
          </publisher>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">144–156</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/CGO.2007.21" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1109/
          <allowbreak/>CGO.
          <allowbreak/>2007.
          <allowbreak/>21</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid22" type="inproceedings" rend="foot" n="footcite:price-etal-2008-pact">
      <identifiant type="doi" value="10.1145/1454115.1454129"/>
      <analytic>
        <title level="a">Visualizing potential parallelism in sequential programs</title>
        <author>
          <persName>
            <foreName>Graham D.</foreName>
            <surname>Price</surname>
            <initial>G. D.</initial>
          </persName>
          <persName>
            <foreName>John</foreName>
            <surname>Giacomoni</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Manish</foreName>
            <surname>Vachharajani</surname>
            <initial>M.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PACT '08: Proceedings of the 17th international conference on Parallel architectures and compilation techniques</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">82–90</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1454115.1454129" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1454115.
          <allowbreak/>1454129</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid33" type="inproceedings" rend="foot" n="footcite:RVR08">
      <identifiant type="doi" value="10.1145/1356058.1356082"/>
      <analytic>
        <title level="a">Spice: speculative parallel iteration chunk execution</title>
        <author>
          <persName>
            <foreName>Easwaran</foreName>
            <surname>Raman</surname>
            <initial>E.</initial>
          </persName>
          <persName>
            <foreName>Neil</foreName>
            <surname>Vachharajani</surname>
            <initial>N.</initial>
          </persName>
          <persName>
            <foreName>Ram</foreName>
            <surname>Rangan</surname>
            <initial>R.</initial>
          </persName>
          <persName>
            <foreName>David I.</foreName>
            <surname>August</surname>
            <initial>D. I.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">CGO '08: Proceedings of the sixth annual IEEE/ACM international symposium on Code generation and optimization</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">175–184</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1356058.1356082" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1356058.
          <allowbreak/>1356082</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid30" type="article" rend="foot" n="footcite:RAP99">
      <identifiant type="doi" value="10.1109/71.752782"/>
      <analytic>
        <title level="a">The LRPD Test: Speculative Run-Time Parallelization of Loops with Privatization and Reduction Parallelization</title>
        <author>
          <persName>
            <foreName>Lawrence</foreName>
            <surname>Rauchwerger</surname>
            <initial>L.</initial>
          </persName>
          <persName>
            <foreName>David</foreName>
            <surname>Padua</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">IEEE Trans. Parallel Distrib. Syst.</title>
        <imprint>
          <biblScope type="volume">10</biblScope>
          <biblScope type="number">2</biblScope>
          <dateStruct>
            <year>1999</year>
          </dateStruct>
          <biblScope type="pages">160–180</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/71.752782" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1109/
          <allowbreak/>71.
          <allowbreak/>752782</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid12" type="phdthesis" rend="foot" n="footcite:Seg06">
      <monogr>
        <title level="m">Méthodes de dénombrement de points entiers de polyèdres et applications à l'optimisation de programmes</title>
        <author>
          <persName>
            <foreName>Rachid</foreName>
            <surname>Seghir</surname>
            <initial>R.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="school">Université de Strasbourg</orgName>
          </publisher>
          <dateStruct>
            <month>December</month>
            <year>2006</year>
          </dateStruct>
        </imprint>
      </monogr>
      <note type="typdoc">Ph. D. Thesis</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid21" type="inproceedings" rend="foot" n="footcite:sherwoord-etal-2002-asplos">
      <identifiant type="doi" value="10.1145/605397.605403"/>
      <analytic>
        <title level="a">Automatically characterizing large scale program behavior</title>
        <author>
          <persName>
            <foreName>Timothy</foreName>
            <surname>Sherwood</surname>
            <initial>T.</initial>
          </persName>
          <persName>
            <foreName>Erez</foreName>
            <surname>Perelman</surname>
            <initial>E.</initial>
          </persName>
          <persName>
            <foreName>Greg</foreName>
            <surname>Hamerly</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>Brad</foreName>
            <surname>Calder</surname>
            <initial>B.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">ASPLOS-X: Proceedings of the 10th international conference on Architectural support for programming languages and operating systems</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2002</year>
          </dateStruct>
          <biblScope type="pages">45–57</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/605397.605403" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>605397.
          <allowbreak/>605403</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid34" type="book" rend="foot" n="footcite:SMN05">
      <monogr>
        <title level="m">Virtual Machines: Versatile Platforms for Systems and Processes (The Morgan Kaufmann Series in Computer Architecture and Design)</title>
        <author>
          <persName>
            <foreName>Jim</foreName>
            <surname>Smith</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Ravi</foreName>
            <surname>Nair</surname>
            <initial>R.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName>Morgan Kaufmann Publishers Inc.
            <address><addrLine>San Francisco, CA, USA</addrLine></address></orgName>
          </publisher>
          <dateStruct>
            <year>2005</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid32" type="inproceedings" rend="foot" n="footcite:TFN08">
      <analytic>
        <title level="a">Copy or Discard Execution Model For Speculative Parallelization On Multicores</title>
        <author>
          <persName>
            <foreName>C</foreName>
            <surname>Tian</surname>
            <initial>C.</initial>
          </persName>
          <persName>
            <foreName>M</foreName>
            <surname>Feng</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>V</foreName>
            <surname>Nagarajan</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>R</foreName>
            <surname>Gupta</surname>
            <initial>R.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">IEEE/ACM 41st International Symposium on Microarchitecture, MICRO 41</title>
        <imprint>
          <dateStruct>
            <month>November</month>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">330-341</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid40" type="article" rend="foot" n="footcite:validateur08">
      <identifiant type="doi" value="10.1145/1328897.1328444"/>
      <analytic>
        <title level="a">Formal verification of translation validators: a case study on instruction scheduling optimizations</title>
        <author>
          <persName key="gallium-2006-idm16698238720">
            <foreName>Jean-Baptiste</foreName>
            <surname>Tristan</surname>
            <initial>J.-B.</initial>
          </persName>
          <persName key="gallium-2006-idm16698282864">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">SIGPLAN Not.</title>
        <imprint>
          <biblScope type="volume">43</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">17–27</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1145/1328897.1328444" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>dx.
          <allowbreak/>doi.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1328897.
          <allowbreak/>1328444</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid41" type="inproceedings" rend="foot" n="footcite:validateur09">
      <analytic>
        <title level="a">Verified Validation of Lazy Code Motion</title>
        <author>
          <persName key="gallium-2006-idm16698238720">
            <foreName>Jean-Baptiste</foreName>
            <surname>Tristan</surname>
            <initial>J.-B.</initial>
          </persName>
          <persName key="gallium-2006-idm16698282864">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Programming Language Design and Implementation 2009</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <year>2009</year>
          </dateStruct>
        </imprint>
      </monogr>
      <note type="bnote">To appear</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid53" type="inproceedings" rend="foot" n="footcite:rafPEI">
      <analytic>
        <title level="a">Refinement of Data Parallel Programs in PEI</title>
        <author>
          <persName key="calvi-2006-idm468055693984">
            <foreName>Éric</foreName>
            <surname>Violard</surname>
            <initial>É.</initial>
          </persName>
          <persName key="algorille-2007-idm186081043872">
            <foreName>Stéphane</foreName>
            <surname>Genaud</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Guy-René</foreName>
            <surname>Perrin</surname>
            <initial>G.-R.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Proceedings of the IFIP TC 2 WG 2.1 international workshop on Algorithmic languages and calculi</title>
        <loc>London, UK, UK</loc>
        <imprint>
          <publisher>
            <orgName>Chapman &amp; Hall, Ltd.</orgName>
          </publisher>
          <dateStruct>
            <year>1997</year>
          </dateStruct>
          <biblScope type="pages">107–131</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid17" type="inproceedings" rend="foot" n="footcite:welc-etal-2005-oopsla">
      <identifiant type="doi" value="10.1145/1094811.1094845"/>
      <analytic>
        <title level="a">Safe futures for Java</title>
        <author>
          <persName>
            <foreName>Adam</foreName>
            <surname>Welc</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Suresh</foreName>
            <surname>Jagannathan</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Antony</foreName>
            <surname>Hosking</surname>
            <initial>A.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">OOPSLA '05: Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2005</year>
          </dateStruct>
          <biblScope type="pages">439–453</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1094811.1094845" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1094811.
          <allowbreak/>1094845</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid35" type="inproceedings" rend="foot" n="footcite:WUM09">
      <analytic>
        <title level="a">Evaluating Sampling Based Hotspot Detection</title>
        <author>
          <persName>
            <foreName>Qiang</foreName>
            <surname>Wu</surname>
            <initial>Q.</initial>
          </persName>
          <persName>
            <foreName>Oskar</foreName>
            <surname>Mencer</surname>
            <initial>O.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">International Conference on Architecture of Computing Systems, ARCS</title>
        <imprint>
          <dateStruct>
            <month>March</month>
            <year>2009</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid16" type="inproceedings" rend="foot" n="footcite:xin-etal-2008-pldi">
      <identifiant type="doi" value="10.1145/1375581.1375611"/>
      <analytic>
        <title level="a">Efficient program execution indexing</title>
        <author>
          <persName>
            <foreName>Bin</foreName>
            <surname>Xin</surname>
            <initial>B.</initial>
          </persName>
          <persName>
            <foreName>William N.</foreName>
            <surname>Sumner</surname>
            <initial>W. N.</initial>
          </persName>
          <persName key="greenlab-2008-idm422271685440">
            <foreName>Xiangyu</foreName>
            <surname>Zhang</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation</title>
        <loc>New York, NY, USA</loc>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">238–248</biblScope>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://doi.acm.org/10.1145/1375581.1375611" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>doi.
          <allowbreak/>acm.
          <allowbreak/>org/
          <allowbreak/>10.
          <allowbreak/>1145/
          <allowbreak/>1375581.
          <allowbreak/>1375611</ref>
        </imprint>
      </monogr>
    </biblStruct>
    <biblStruct id="camus-2011-bid63" type="techreport" rend="foot" n="footcite:JIMBOREAN:2010:INRIA-00534745:1">
      <identifiant type="hal" value="inria-00534745"/>
      <monogr>
        <title level="m">A Static-Dynamic Collaborative Framework for Nested Loops Instrumentation and Profiling</title>
        <author>
          <persName key="camus-2010-idm102060697840">
            <foreName>Alexandra</foreName>
            <surname>Jimborean</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Matthieu</foreName>
            <surname>Herrmann</surname>
            <initial>M.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="institution">Université de Strasbourg</orgName>
          </publisher>
          <dateStruct>
            <month>05</month>
            <year>2010</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00534745/en/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00534745/
          <allowbreak/>en/
          <allowbreak/></ref>
        </imprint>
      </monogr>
      <note type="typdoc">Research Report</note>
    </biblStruct>
    <biblStruct id="camus-2011-bid64" type="techreport" rend="foot" n="footcite:JIMBOREAN:2010:INRIA-00534748:1">
      <identifiant type="hal" value="inria-00534748"/>
      <monogr>
        <title level="m">VMAD: a Virtual Machine for Advanced Dynamic Analysis of Programs</title>
        <author>
          <persName key="camus-2010-idm102060697840">
            <foreName>Alexandra</foreName>
            <surname>Jimborean</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Matthieu</foreName>
            <surname>Herrmann</surname>
            <initial>M.</initial>
          </persName>
          <persName key="camus-2010-idm102060713392">
            <foreName>Vincent</foreName>
            <surname>Loechner</surname>
            <initial>V.</initial>
          </persName>
          <persName key="camus-2010-idm102060720576">
            <foreName>Philippe</foreName>
            <surname>Clauss</surname>
            <initial>P.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="institution">Université de Strasbourg</orgName>
          </publisher>
          <dateStruct>
            <month>09</month>
            <year>2010</year>
          </dateStruct>
          <ref xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://hal.inria.fr/inria-00534748/en/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://
          <allowbreak/>hal.
          <allowbreak/>inria.
          <allowbreak/>fr/
          <allowbreak/>inria-00534748/
          <allowbreak/>en/
          <allowbreak/></ref>
        </imprint>
      </monogr>
      <note type="typdoc">Research Report</note>
    </biblStruct>
  </biblio>
</raweb>
