<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Parallel In-place Model Transformations with LinTra</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Loli Burguen˜ o</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Javier Troya</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Manuel Wimmer</string-name>
          <email>wimmerg@big.tuwien.ac.at</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Antonio Vallecillo</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universidad de Ma ́laga, Atenea Research Group</institution>
          ,
          <addr-line>Ma ́laga</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Vienna University of Technology, Business Informatics Group</institution>
          ,
          <addr-line>Vienna</addr-line>
          ,
          <country country="AT">Austria</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>As software systems have grown large and complex in the last few years, the problems with which Model-Driven Development has to cope have increased at the same pace. In particular, the need to improve the performance and scalability of model transformations has become a critical issue. In previous work we introduced LinTra, a model transformation platform for the parallel execution of out-place model transformations. Nevertheless, in-place model transformations are required in several contexts and domains as well. In this paper we discuss the fundamentals of in-place model transformations in the light of their parallel execution and provide LinTra with an in-place execution mode.</p>
      </abstract>
      <kwd-group>
        <kwd>In-place Model Transformations</kwd>
        <kwd>Performance</kwd>
        <kwd>Scalability</kwd>
        <kwd>Linda</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Model transformations (MT) are gaining acceptance as model-driven techniques are
becoming commonplace [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. While models capture the views on systems for particular
purposes and at given levels of abstraction, model transformations are in charge of the
manipulation, analysis, synthesis, and refinement of the models [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        So far the community has mainly focused on the correct implementation of a model
transformation, according to its specification [
        <xref ref-type="bibr" rid="ref3 ref4 ref5 ref6 ref7 ref8">3–8</xref>
        ], although there is an emergent need
to consider other (non-functional) aspects such as performance, scalability, usability,
maintainability and so forth [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. In particular, the study of the performance of model
transformations is gaining interest as very large models living on the cloud have to be
transformed as well. Consequently, new approaches to parallelize model
transformations are starting to appear [
        <xref ref-type="bibr" rid="ref10 ref11 ref12">10–13</xref>
        ]. Following this path, in a previous work we
introduced LinTra [
        <xref ref-type="bibr" rid="ref11">11, 14</xref>
        ], a model transformation engine, together with its implementation
in Java called jLinTra. LinTra encapsulates all the concurrent mechanisms needed for
the parallel execution of model transformations, and in particular users do not need to
worry about threads and their synchronization. The engine is based on Linda [15], a
mature coordination language for parallel processes.
      </p>
      <p>So far, LinTra only permitted out-place model transformations. In this kind of
transformations, input and output models often conform to different metamodels and output
models are created from scratch. However, there are many situations in which we need
to evolve models, instead of creating them anew. For instance, when migrating and
modernizing software using model-driven engineering (MDE) approaches [16, 17], (i)
software is reverse-engineered to obtain a model representation of the system, (ii)
modernization patterns are applied on the model level, and (iii) the modernized model is
translated back into code. Modernization at model level is typically achieved using
inplace model transformations, where the initial model is evolved until the final target
model is obtained. Models which are reverse-engineered from large systems may be
huge, thus high-performing in-place transformation engines are needed. For this
reason, in this paper we extend our LinTra language with an in-place semantics.</p>
      <p>This paper is structured as follows. Section 2 shortly introduces LinTra and our
reference non-recursive in-place semantics. Section 3 shows how LinTra realizes its
in-place semantics, while Section 4 illustrates the benefits of parallel in-place
transformations. Finally, Section 5 discusses related work before we conclude the paper in
Section 6 with an outlook on future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>
        Previous Work on LinTra. LinTra [
        <xref ref-type="bibr" rid="ref11">11, 14</xref>
        ] is a parallel model transformation engine
that encapsulates all the concurrent mechanisms, so that users do not need to worry
about threads and their synchronization. It uses the Blackboard paradigm [18] to store
the input and output models, as well as the required data to keep track of the MT
execution that coordinates the agents that are involved in the transformation process. One of
the keys of LinTra is the model and metamodel representation, where we assume that
entities in the model are independent from each other. Thus, every entity is assigned
an identifier, which is used to reference objects and to represent relationships between
them. Relationships between entities are represented by storing in the source entity the
identifier(s) of its target entity(ies).
      </p>
      <p>In out-place model transformations, there might be dependencies between rules
because the element(s) created in a rule are needed to initialize some properties of the
elements created by other rules. In LinTra, traceability is implemented implicitly using
a bidirectional function that receives as a parameter the entity identifier of the input
model and returns the identifier of the output entity, regardless whether the output
entities have already been created or not. This means that LinTra does not store information
about the traces explicitly; thus, the performance is not affected by the access to
memory and the search for trace information.</p>
      <p>In order to carry out the transformation process in parallel, LinTra uses the
MasterSlave design pattern [18]. The master’s job is to launch slaves and coordinate their
work. Each slave is in charge of applying the transformation to submodels of the input
model (i.e., partitions) as if each partition is a complete and independent model. Since
in LinTra’s out-place mode the complete input model is always available, in case the
slaves have data dependencies with elements that are not in the submodels they were
assigned, they only have to query the Blackboard to retrieve them.</p>
      <p>Non-recursive In-place Transformations. In-place transformations specify how
the input model evolves to obtain the output one, i.e., how the input model has to
change. There are two kinds of in-place model transformation strategies, non-recursive
and recursive, depending on whether recursive matching takes place or not. By
recursive matching we understand that the matches of rules are not solely computed based
on the initial input model but on the current model state which probably has been
modified by previous application of rules. This is the typical strategy followed in graph or
rewriting systems, where a set of rules modifies the state of a configuration of objects
(representing the model) one-by-one. Thus, after the application of each rule, the state
of the system is changed, and subsequent rules will be applied on the system on this new
state. Therefore, the transformation navigates the target model, which is continuously
updated by every executed rule.</p>
      <p>Regarding non-recursive matching, it shares some characteristics with out-place
transformations. In this strategy, there is one input model which is used to directly
compute the output model without considering intermediate steps. This is the reason why
we chose to follow a non-recursive approach for the LinTra in-place mode. Our
decision was also inspired by the ATL refining mode [19, 20], used to implement in-place
transformations. ATL supports both out-place and in-place modes. In both execution
modes, source models are read-only and target models are write-only. This is an
important detail that significantly affects the way in which ATL works in refining mode.
Indeed, ATL in-place mode does not execute transformations as these are executed in
graph or rewriting systems, as explained in detail in [21]. Thus, we follow as well
nonrecursive matching in LinTra where rules always read (i.e., navigate) the state of the
source model, which remains unchanged during all the transformation execution.</p>
    </sec>
    <sec id="sec-3">
      <title>3 In-place Model Transformations with LinTra</title>
      <p>LinTra follows a non-recursive approach for executing in-place transformations, as the
ATL refining mode does. In this section we discuss some semantic issues that might
occur in rule-based in-place model transformations in general as they are indeed highly
relevant for the parallel execution of in-place transformations.
3.1</p>
      <sec id="sec-3-1">
        <title>Atomic Transformation Actions</title>
        <p>When executing a non-recursive in-place transformation, the first decision concerns the
elements for which the transformation does not specify what to do. We could either
decide to exclude them from the target model or to include them as they are. In jLinTra
we decided for the second option, which implies that if we want to exclude objects in
the target model, the transformation will have to explicitly remove them. Thus, after the
input model is loaded, and once the transformation phase starts, an initialization phase
is needed where the identity transformation is applied so that the target area contains a
copy of the input model.</p>
        <p>After the model is copied, in the following we explain the three operations that may
be applied to it: deletion of elements, creation of new elements, and modification of
existing elements.</p>
        <p>Elements Deletion. When an element is deleted, the outgoing relationships from
such element to others are deleted too, since such information is stored as attributes in
the deleted element. However, the situation is different when the deleted element has
incoming relationships. In such case, the information about relationships to the deleted
element is stored in the attributes of other elements. In this case, we can distinguish
two different semantics. Either all the incoming relationships are deleted, for which
the engine needs to traverse the whole model searching for relationships pointing to the
deleted element, or they are not deleted, causing dangling references and, consequently,
an inconsistent model. In the former option, we need to keep track of all the deleted
elements, so that the traversal is realized only once as the last step of the transformation.
The latter option is useful in order to make the user aware that he/she is removing
an element by mistake. LinTra permits both behaviors, since it is aimed at offering a
flexible implementation.</p>
        <p>Elements Creation. If the developer wants to create a new element, he/she has to
create the instance and set its attributes and relationships. In case of bidirectional
relationships, there are two alternatives: (i) the opposite reference is created automatically,
or (ii) the creation of the opposite relationship must be explicitly specified by the
developer. We permit both behaviors.</p>
        <p>Elements Updates. Updating an attribute or an ongoing unidirectional relationship
of an element is trivial, since the transformation only has to change the corresponding
attribute of the updated element. However, there are again two choices when updating a
relationship which is bidirectional, since the previous target element of the relationship
would still have a relationship to the updated element unless something is done. Thus,
(i) the relationship from the previous target element should be automatically removed
and a new relationship from the new pointed element to the updated element should be
automatically created, or (ii) the developer has to specify explicitly in the transformation
that the corresponding relationships are removed and created respectively. Again, we
permit both alternative behaviors.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Confluence conflicts</title>
        <p>Confluence conflicts typically occur when two rules are applied to the same part of the
model and they treat it differently [22]. Thus, the resulting model may vary depending
on the order in which those rules are applied. The application of a rule can conflict with
the application of another rule in four different ways. Let us explain them for the ATL
refining mode which acts as blueprint for the LinTra in-place transformation strategy.
For the explanations, let us imagine a transformation for reverse engineering Java code.</p>
        <p>Update/Update. Imagine that a rule sets the public variables to private and
capitalizes the name of the ones that are private. This case is not a problem for the confluence
of non-recursive in-place transformations since only the source model provided by the
user is read—the changes done by the rule that changes the visibility are not visible to
the rule that capitalizes the names of the variables. On the contrary, if a rule sets the
visibility of the variables to private and another rule sets them to public, the
transformation may not be confluent. A possible way to prevent this situation is to force the
precondition of the rules to be exclusive, which leads to non-overlapping matches. This
was the solution adopted by ATL concerning the declarative part. Nevertheless, it is
easy to fool ATL by using the imperative part, which is executed after the declarative
part of the rule.</p>
        <p>Delete/Update. Suppose that a rule sets the visibility of the variables to private
and another rule removes all the variables. The situation is similar to the second case
we presented for the conflict Update/Update. The two rules are a conflicting pair, thus
the language should prevent this situation from happening or should establish the
behaviour of the transformation. Again, it is possible to produce this case in ATL by using
the imperative part to set the visibility and writing a declarative rule that removes the
variables. Both rules are executed so that the visibility is changed and the variables are
removed. As a result, the variables are not present in the resulting model. Apparently,
the objects are removed in a later execution phase, after having done all the updates and
creations specified in the declarative and imperative parts.</p>
        <p>Produce/Forbid. Imagine that a rule adds a variable to a class and another rule
removes all the empty classes (classes with no variables) from the model. The first rule
is producing an additional structure that is forbidden by the precondition of the second
rule. Once again, the order in which the rules are executed influences the result. This
time, if we try to implement this transformation with ATL using the imperative part of
a rule to add the variables and a declarative rule to remove the empty classes, both rules
are applied but the transformation does not fulfil the purpose for which it was written
(since only the source model is read). As a result, the classes are removed but the newly
created variables remain in the model without any container.</p>
        <p>Delete/Use. This conflict appears when a rule deletes elements that produce a match
with another rule. Thus, it is the opposite case to Produce/Forbid. Depending on the
order in which the rules are executed, the transformation is able to execute a higher or
lower number of rules.</p>
        <p>We have illustrated the conflicts that may appear between rules and how ATL tries
to solve them using non-overlapping matches, how they can be avoided or produced,
and which is the final result of the execution. Enforcing to have non-overlapping rules
is not the only solution; another possibility is to statically detect the conflicting rules
using the critical pair analysis approach [23], and subsequently, to deal with the conflicts
making use of layers which is also implicitly done in ATL by using different phases in
the transformation execution.</p>
        <p>As jLinTra is realized as an internal transformation language embedded in Java, we
have opted for not imposing any restriction. Thus, our solution is completely flexible
with respect to rule executions. The idea is that high-level model transformation
languages (such as ATL [24], ETL [25], or QVTO [26]) are compiled to an extended set
of the primitives [27] that automatically compile to jLinTra. In these primitives the rule
scheduling is already given (the layers and the rules that belong to each layer).
Therefore, in case that the critical pair analysis is needed, it can be done statically during the
compilation process from the high-level model transformation language to the LinTra
primitives.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Evaluation</title>
      <p>To evaluate our approach we performed an experimental study concerning a
transformation which, in reverse engineered Java applications, removes all the comments, changes
the attributes from public to private and creates the getters and setters.
4.1</p>
      <sec id="sec-4-1">
        <title>Research Questions</title>
        <p>The study was performed to quantitatively assess the quality of our approach by
measuring the runtime performance of the transformations. We aimed to answer the following
research questions (RQs):
1. RQ1—Parallel vs. sequential in-place transformations: Is the parallel execution of
in-place transformations faster in terms of execution times compared to using the
state-of-the-art sequential execution engines? And if there is a positive impact, what
is the speedup with respect to the used number of cores for the parallel
transformation executions?
2. RQ2—Parallel in-place vs. parallel out-place transformations: Is the parallel
execution of in-place transformations faster in terms of execution time compared to
using their equivalent out-place transformations?
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Experiment Setup</title>
        <p>To evaluate our approach, we use an experiment in which Java models are obtained
from Java code using MoDISCO [17]. The Java metamodel has a total of 125 classes
from which 15 are abstract, 166 relationships among them and 5 enumeration types.
As source model we have selected the complete Eclipse project, containing 4; 357; 774
entities. In order to assess how the transformation scales up with this kind of input,
we generated 11 smaller sample source models (with subsets of the Eclipse project)
ranging from 100; 000 elements to the complete model.</p>
        <p>We apply an extended version of the Public2Private transformation – the original
one is available in the ATL Zoo3 – that changes the visibility of every public variable to
private and creates the corresponding getter and setter methods. In addition, the
transformation also removes all the comments contained in the code. All artifacts can be
downloaded from our website4.</p>
        <p>Let us show the effects of this transformation with an example. Listing 1.1 shows
the Java code that declares a class called MyClass, a public attribute name and the
class’s constructor. The code contains some comments too. After applying the
transformation, the Java code that the model represents should look like the fragment presented
in Listing 1.2.</p>
        <p>Listing 1.1. Code to be refactored</p>
      </sec>
      <sec id="sec-4-3">
        <title>1 p u b l i c c l a s s MyClass f</title>
        <p>2 //Declaration of variable called name
3 p u b l i c String name ; /* This variable contains the name */
4 p u b l i c MyClass ( ) f /* Description @param ... */ . . . g
5 g</p>
        <p>Listing 1.2. Refactored code
1 p u b l i c c l a s s MyClass f
2 p r i v a t e String name ;
3 p u b l i c String getName ( ) f return name ; g
4 p u b l i c void setName ( String name ) f t h i s . name = name ; g
5 p u b l i c MyClass ( ) f . . . g
6 g</p>
        <sec id="sec-4-3-1">
          <title>3 http://www.eclipse.org/atl/atlTransformations/ 4 http://atenea.lcc.uma.es/index.php/Main_Page/Resources/LinTra</title>
          <p>An excerpt of the code corresponding to the rules in jLinTra is shown in Listing 1.3.
As stated in Section 2, every slave is in charge of transforming a chunk of the model.
For efficiency reasons the changes are made permanent once the whole chunk has been
transformed. In order to keep the temporary changes the structures deletedElems,
modifiedElems and createdElems (lines 2, 8 and 9) are needed.</p>
          <p>Listing 1.3. jLinTra transformation
1 i f ( ie i n s t a n c e o f Comment ) f
2 deletedElems . add ( ie ) ; //Delete Comment
3 g e l s e i f ( ie i n s t a n c e o f FieldDeclaration ) f
4 String modId = ( ( FieldDeclaration ) ie ) . getModifier ( ) ;
5 Modifier mod = ( Modifier ) srcArea . read ( modId ) ;
6 String visibility = mod . getVisibility ( ) ;
7 i f ( visibility . equals ( PUBLIC ) ) f
8 mod . setVisibility ( PRIVATE ) ; modifiedElems . add ( mod ) ; // Modify visibility
9 . . . createdElems . add ( . . . ) ; // Create getters and setters }
10 g</p>
          <p>We have run all our experiments on a machine whose operating system is Ubuntu
12.04 64 bits with 11.7 Gb of RAM and 2 processors with 4 hyperthreaded cores (8
threads) of 2.67GHz each. We discuss the results obtained for the different
transformations after executing each one 10 times for every input model and having discarded the
first 5 executions as the VM has a warm-up phase where the results might not be
optimal. The Eclipse version is Luna. The Java version is 8, where the JVM memory has
been increased with the parameter -Xmx11000m in order to be able to allocate larger
models in memory.
4.3</p>
        </sec>
      </sec>
      <sec id="sec-4-4">
        <title>Performance Experiments</title>
        <p>The in-place transformation described before has been implemented and executed in
jLinTra and in ATL, for which we have used the EMFTVM5. We have also developed
an out-place transformation version in jLinTra in order to compare its performance
with the proposed in-place version. Table 1 shows in its left-most column the number
of entities of the source models of the transformation. The second, third, and fourth
columns correspond to the execution times (in seconds) obtained for ATL and jLinTra
(using the in-place and out-place modes), respectively. Note that we have only taken into
account the time of the execution of the transformation, meaning that we do not consider
the time used for loading the models into memory, nor the time used to serialize them
to the disk. The fifth column presents the speedup of jLinTra with respect to ATL. We
can see that the speedup is not constant: it grows with the size of the model, reaching
a value of 955:23 for the complete model, meaning that value that jLinTra is 955:23
times faster than ATL for this concrete case. Finally, column six shows the speedup of
the in-place and out-place modes of LinTra, where we can see that the in-place model
transformation is on average 1:81 times faster than its out-place version.</p>
        <p>We already mentioned in Section 3 that an initialization phase where the input
model is copied to the target area is needed. However, if we moved that process to
the loading phase so that both the source and target areas were loaded at the same time,
we would only pay a minimum price (an overhead of 5% in the loading phase) and the</p>
        <sec id="sec-4-4-1">
          <title>5 https://wiki.eclipse.org/ATL/EMFTVM</title>
          <p>performance in the transformation phase would be improved reaching a speedup of 3:89
w.r.t. the out-place mode and speedup of 1; 195 w.r.t. ATL.</p>
          <p>Regarding the gain of in-place MTs in LinTra w.r.t. the number of cores involved in
the transformation, the speedups of using only one core w.r.t. using four, eight, twelve
and sixteen are 1:19, 1:62, 1:97, 3:24, respectively.</p>
          <p>We also planned to execute and compare this transformation with the original ATL
virtual machine. However, although it supports the refining mode it does not support the
imperative block, which is applied in the particular transformation used in this study.</p>
          <p>Regarding the out-place transformation developed in LinTra, it explicitly specifies
that all elements that are not modified must be copied, together with their properties.
The out-place transformation counts on 3; 302 lines of Java code (we generated the code
for the identity transformation using Xtend 6 and adapted the corresponding code to fit
the needs of the Public2Private transformation), while the in-place transformation has
only 194 lines.</p>
          <p>For answering the two RQs stated above, we can first conclude that the parallel
execution of in-place transformations reduces the execution time compared to using
sequential execution and that the execution time can be further improved by adding more
cores. Second, for typical in-place transformation problems, in-place transformation
implementations are more efficiently executed than their equivalent out-place
transformations using parallelization in both executions.
4.4</p>
        </sec>
      </sec>
      <sec id="sec-4-5">
        <title>Threats to Validity</title>
        <p>In this section, we elaborate on several factors that may jeopardize the validity of our
results.</p>
        <p>Internal validity – Are there factors which might affect the results of this
experiment? The performance measures we have obtained directly relate to the experiment
we have used for the evaluation. Therefore, if we had used different experiments other
than the Public2Private transformation then the speedups between the executions of the
different implementations would have probably been different. Besides, we have
generated 11 smaller sample source models. Should we have generated different models,
6 https://eclipse.org/xtend/
the results in Table 1 would also be different. As another threat, we have decided to
use the executions after the 5th one in order to avoid the possible influence of the VM
warming-up phase. However, if after the 5th execution the VM has not finished
warming up, our results are then influenced. Finally, we are quite confident that we have
correctly written the equivalent transformation in ATL due to our expertise with such
language. Nevertheless, there may exist tiny differences which may have an influence
on the execution times.</p>
        <p>External validity – To what extent is it possible to generalize the findings? As a proof
of concept of our approach, we have compared the execution times of our approach
with the ATL implementation executed with the EMFTVM engine. We have chosen
ATL for the comparison study because we have enriched LinTra with the same in-place
semantics that ATL has. Therefore, since our study only compares LinTra and ATL, our
results cannot be generalized for all non-recursive engines.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>In this paper, we focus on in-place model transformations running in batch mode.
However, to deal with large models, orthogonal techniques may be applied as well.
Especially, two scenarios have been discussed in the past in the context of speeding-up
model transformation executions. First, if an output model already exists from a
previous transformation run for a given input model, only the changes in the input model are
propagated to the output model. Second, if only a part of the output model is needed by
a consumer, only this part is produced while other elements are produced just-in-time.
For the former scenario, incremental transformations [28–30] have been introduced,
while for the latter lazy transformations [31] have been proposed.</p>
      <p>
        An important line of research for executing transformations in parallel is the work
on critical pair analysis [22] from the field of graph transformations as discussed in
Section 3. This work has been originally targeted to transformation formalisms that do
have some freedom for choosing in which order to apply the rules. Rules that are not
in an explicit ordering are considered to be executed in parallel if no conflict is
statically computed. However, most existing execution engines follow a pseudo-parallel
execution of the rules, but there are already some approaches emerging which consider
the execution of graph transformations in a recursive way on top of multi-core
platforms [
        <xref ref-type="bibr" rid="ref12">12, 13, 32</xref>
        ]. A closer comparison concerning the commonalities and differences
of recursive and non-recursive in-place semantics concerning parallelism is considered
as subject for future work.
      </p>
      <p>
        The performance of model transformations is considered as an integral research
challenge in MDE [33]. For instance, Amstel et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] considered the runtime
performance of transformations written in ATL and in QVT. In [34], several implementation
variants using ATL, e.g., using either imperative constructs or declarative constructs,
of the same transformation scenario have been considered and their different runtime
performance has been compared. However, these works only consider the traditional
execution engines following a sequential rule application approach. One line of work
we are aware of dealing with the parallel execution of ATL transformations is [35],
where Clasen et al. outlined several research challenges when transforming models in
the cloud. A follow-up work is presented in Tisi et al. [36] where a parallel
transformation engine for ATL is presented. However, they only consider out-place
transformations while we tackled the parallel execution of in-place transformations.
6
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion and Future Work</title>
      <p>We have presented an extension for LinTra that allows the parallel execution of
inplace model transformations. We have shown with experiments that the performance
is improved w.r.t. other in-place MT engines and that in cases where in-place
transformations can be achieved also by means of out-place transformations, the in-place
transformations provide better performance and usability.</p>
      <p>There are several lines of future work. First, we plan to provide a new in-place
execution mode that supports recursive matchings. Second, we plan to extend our set of
primitives so that in-place transformations written in any MT language may be
compiled to and executed with LinTra.</p>
      <p>Acknowledgments This work is funded by the Spanish Research Projects
TIN201123795 and TIN2014-52034-R, by the European Commission under ICT Policy Support
Programme (grant no. 317859), and by the Christian Doppler Forschungsgesellschaft
and the BMWFW, Austria.
13. Krause, C., Tichy, M., Giese, H.: Implementing Graph Transformations in the Bulk
Synchronous Parallel Model. In: Proc. of FASE. (2014) 325–339
14. Burguen˜o, L.: Concurrent Model Transformations based on Linda. In: Doctoral Symposium
@ MODELS. (2013) 9–16
15. Gelernter, D., Carriero, N.: Coordination Languages and Their Significance. Commun. ACM
35(2) (1992) 97–107
16. Bergmayr, A., Brunelie`re, H., Canovas Izquierdo, J., Gorronogoitia, J., Kousiouris, G.,
Kyriazis, D., Langer, P., Menychtas, A., Orue-Echevarria, L., Pezuela, C., Wimmer, M.:
Migrating Legacy Software to the Cloud with ARTIST. In: Proc. of CSMR. (2013) 465–468
17. Brunelie`re, H., Cabot, J., Dupe, G., Madiot, F.: MoDisco: A model driven reverse
engineering framework. Information and Software Technology 56(8) (2014) 1012–1032
18. Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., Stal, M.: Pattern-Oriented
Software Architecture: A System of Patterns. Wiley (1996)
19. Tisi, M., Mart´ınez, S., Jouault, F., Cabot, J.: Refining Models with Rule-based Model
Transformations. Research Report RR-7582 (2011)
20. Wagelaar, D., Tisi, M., Cabot, J., Jouault, F.: Towards a General Composition Semantics for</p>
      <p>Rule-Based Model Transformation. In: Proc. of MODELS. (2011) 623–637
21. Troya, J., Vallecillo, A.: A Rewriting Logic Semantics for ATL. JOT 10 (2011) 5:1–29
22. Heckel, R., Ku¨ster, J.M., Taentzer, G.: Confluence of Typed Attributed Graph
Transformation Systems. In: Proc. of ICGT. (2002) 161–176
23. Mens, T., Taentzer, G., Runge, O.: Detecting Structural Refactoring Conflicts Using Critical</p>
      <p>Pair Analysis. Electr. Notes Theor. Comput. Sci. 127(3) (2005) 113–128
24. Jouault, F., Allilaire, F., Be´zivin, J., Kurtev, I.: ATL: A model transformation tool. Science
of Computer Programming 72(1-2) (2008) 31–39
25. Kolovos, D.S., Paige, R.F., Polack, F.A.C.: The Epsilon Transformation Language. In: Proc.</p>
      <p>of ICMT. (2008) 46–60
26. OMG: MOF QVT Final Adopted Specification. Object Management Group. (2005)
27. Burguen˜o, L., Syriani, E., Wimmer, M., Gray, J., Vallecillo, A.: LinTraP: Primitive Operators
for the Execution of Model Transformations with LinTra. In: Proc. of BigMDE Workshop
@ STAF. (2014) 23–30
28. Jouault, F., Tisi, M.: Towards Incremental Execution of ATL Transformations. In: Proc. of</p>
      <p>ICMT. (2010) 123–137
29. Razavi, A., Kontogiannis, K.: Partial evaluation of model transformations. In: Proc. of ICSE.</p>
      <p>(2012) 562–572
30. Sza´rnyas, G., Izso´, B., Ra´th, I., Harmath, D., Bergmann, G., Varro´, D.: IncQuery-D: A
Distributed Incremental Model Query Framework in the Cloud. In: Proc. of MODELS.
(2014) 653–669
31. Tisi, M., Perez, S.M., Jouault, F., Cabot, J.: Lazy Execution of Model-to-Model
Transformations. In: Proc. of MODELS. (2011) 32–46
32. Bergmann, G., Ra´th, I., Varro´, D.: Parallelization of Graph Transformation Based on
Incremental Pattern Matching. ECEASST 18 (2009) 1–15
33. Kolovos, D.S., Rose, L.M., Matragkas, N., Paige, R.F., Guerra, E., Cuadrado, J.S., De Lara,
J., Ra´th, I., Varro´, D., Tisi, M., Cabot, J.: A Research Roadmap Towards Achieving
Scalability in Model Driven Engineering. In: Proc. of BigMDE Workshop @ STAF. (2013) 2:1–2:10
34. Wimmer, M., Mart´ınez, S., Jouault, F., Cabot, J.: A Catalogue of Refactorings for
Model-to</p>
      <p>Model Transformations. JOT 11(2) (2012) 2:1–40
35. Clasen, C., Didonet Del Fabro, M., Tisi, M.: Transforming Very Large Models in the Cloud:
a Research Roadmap. In: Proc. of CloudMDE Workshop @ ECMFA. (2012)
36. Tisi, M., Perez, S.M., Choura, H.: Parallel Execution of ATL Transformation Rules. In:
MODELS. (2013) 656–672</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Brambilla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cabot</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wimmer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Model-Driven Software</surname>
          </string-name>
          Engineering in Practice. Morgan &amp; Claypool Publishers (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Lucio</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Amrani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dingel</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lambers</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Salay</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Selim</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Syriani</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wimmer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Model transformation intents and their properties</article-title>
          .
          <source>SoSyM</source>
          (
          <year>2014</year>
          )
          <fpage>1</fpage>
          -
          <lpage>38</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Tractable Model Transformation Testing</article-title>
          .
          <source>In: Proc. of ECMFA</source>
          . (
          <year>2011</year>
          )
          <fpage>221</fpage>
          -
          <lpage>235</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Amrani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , Lu´cio, L.,
          <string-name>
            <surname>Selim</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Combemale</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dingel</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vangheluwe</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Traon</surname>
            ,
            <given-names>Y.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cordy</surname>
            ,
            <given-names>J.R.:</given-names>
          </string-name>
          <article-title>A Tridimensional Approach for Studying the Formal Verification of Model Transformations</article-title>
          .
          <source>In: Proc. of VOLT Workshop @ ICST</source>
          . (
          <year>2012</year>
          )
          <fpage>921</fpage>
          -
          <lpage>928</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , Burguen˜o,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Wimmer</surname>
          </string-name>
          , M., Hamann, L.:
          <article-title>Formal Specification and Testing of Model Transformations</article-title>
          .
          <source>In: Proc. of SFM</source>
          . (
          <year>2012</year>
          )
          <fpage>399</fpage>
          -
          <lpage>437</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6. Sa´nchez Cuadrado, J.,
          <string-name>
            <surname>Guerra</surname>
          </string-name>
          , E.,
          <string-name>
            <surname>de Lara</surname>
          </string-name>
          , J.:
          <article-title>Uncovering errors in ATL model transformations using static analysis and constraint solving</article-title>
          .
          <source>In: Proc. of ISSRE</source>
          . (
          <year>2014</year>
          )
          <fpage>34</fpage>
          -
          <lpage>44</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Wimmer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , Burguen˜o,
          <string-name>
            <surname>L.</surname>
          </string-name>
          :
          <article-title>Testing M2T/T2M Transformations</article-title>
          .
          <source>In: Proc. of MODELS</source>
          . (
          <year>2013</year>
          )
          <fpage>203</fpage>
          -
          <lpage>219</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Burgueno</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Troya</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wimmer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Static Fault Localization in Model Transformations</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>41</volume>
          (
          <issue>5</issue>
          ) (
          <year>2015</year>
          )
          <fpage>490</fpage>
          -
          <lpage>506</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. van Amstel,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Bosems</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Kurtev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            ,
            <surname>Pires</surname>
          </string-name>
          ,
          <string-name>
            <surname>L.F.</surname>
          </string-name>
          :
          <article-title>Performance in Model Transformations: Experiments with ATL and QVT</article-title>
          .
          <source>In: Proc. of ICMT</source>
          . (
          <year>2011</year>
          )
          <fpage>198</fpage>
          -
          <lpage>212</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Tisi</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Perez</surname>
            ,
            <given-names>S.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Choura</surname>
          </string-name>
          , H.:
          <article-title>Parallel Execution of ATL Transformation Rules</article-title>
          .
          <source>In: Proc. of MODELS</source>
          . (
          <year>2013</year>
          )
          <fpage>656</fpage>
          -
          <lpage>672</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. Burguen˜o,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Troya</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Wimmer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Vallecillo</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          :
          <article-title>On the Concurrent Execution of Model Transformations with Linda</article-title>
          .
          <source>In: Proc. of BigMDE Workshop @ STAF</source>
          . (
          <year>2013</year>
          ) 3:
          <fpage>1</fpage>
          -
          <lpage>3</lpage>
          :
          <fpage>10</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Imre</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mezei</surname>
          </string-name>
          , G.:
          <article-title>Parallel Graph Transformations on Multicore Systems</article-title>
          .
          <source>In: Proc. of MSEPT</source>
          . (
          <year>2012</year>
          )
          <fpage>86</fpage>
          -
          <lpage>89</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>