<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">An Approach to Parallelizing Fortran Programs using Rewriting Rules Technique</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Anatoliy</forename><surname>Doroshenko</surname></persName>
							<email>doroshenkoanatoliy2@gmail.com</email>
							<affiliation key="aff0">
								<orgName type="department" key="dep1">Institute of Software Systems</orgName>
								<orgName type="department" key="dep2">National Academy of Sciences of Ukraine</orgName>
								<address>
									<addrLine>Glushkov prosp. 40</addrLine>
									<postCode>03187</postCode>
									<settlement>Kyiv</settlement>
									<country key="UA">Ukraine</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Kostiantyn</forename><surname>Zhereb</surname></persName>
							<email>zhereb@gmail.com</email>
							<affiliation key="aff0">
								<orgName type="department" key="dep1">Institute of Software Systems</orgName>
								<orgName type="department" key="dep2">National Academy of Sciences of Ukraine</orgName>
								<address>
									<addrLine>Glushkov prosp. 40</addrLine>
									<postCode>03187</postCode>
									<settlement>Kyiv</settlement>
									<country key="UA">Ukraine</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">An Approach to Parallelizing Fortran Programs using Rewriting Rules Technique</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">8EB86812022D07F090084271DF1E500E</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T01:37+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>rewriting rules technique</term>
					<term>algebraic program models</term>
					<term>multicore processors</term>
					<term>Fortran</term>
					<term>OpenMP High Performance Computing</term>
					<term>Model</term>
					<term>Methodology</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>We present an ongoing research in the area of transforming existing sequential Fortran programs into their parallel equivalents. Our approach is to use rewriting rules technique in order to automate the transformation process. Sequential source code is transformed into parallel code for shared-memory systems, such as multicore processors. Parallelizing and optimizing transformations are formally described as rewriting rules which facilitates their reuse. Using high-level algebraic models allows describing program transformations in a more concise manner. Performance measurements demonstrate high efficiency of obtained parallel programs.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>Despite being one of the first programming languages, Fortran is still widely used, in particular for solving scientific and engineering computation-intensive problems. Its popularity is due to its relative simplicity and lack of complex facilities (e.g. pointers), closeness to mathematical description of problem and efficiency of generated binary code. Another reason for continued use of Fortran is that in more than 50 years of its existence a vast repository of programs, libraries and routines for solving different scientific problems has been created. Algorithms implemented in such programs are still valuable, however there is a need to adapt this legacy code to new parallel computational platforms. Furthermore, due to size and complexity of existing code, manual adaptation is not a practical option: there is a need for automated tools to facilitate conversion of legacy code to modern parallel platforms <ref type="bibr" target="#b4">[5]</ref>.</p><p>In this paper we describe an ongoing research on parallelizing Fortran programs using rewriting rules technique. Sequential source code is transformed into parallel code for shared-memory parallel platform (such as multicore processors) using automated transformations. Parallelizing and optimizing transformations are formally described as rewriting rules which facilitates their reuse. Such approach is aimed at two main goals: to improve runtime efficiency of programs and to increase developer's productivity. We illustrate our approach on two sample programs: a simple Gauss elimination algorithm and an applied problem of calculating electron density from the field of quantum chemistry.</p><p>There has been an extensive research in the area of parallelizing existing sequential code, in particular for multicore architectures. Some approaches require manual code modification and provide facilities that help a developer express parallelism. Such approaches include parallel libraries <ref type="bibr" target="#b12">[13]</ref>, parallel extensions to existing languages <ref type="bibr" target="#b13">[14]</ref> and new parallel languages <ref type="bibr" target="#b15">[16]</ref>. Another research direction is interactive parallelization <ref type="bibr" target="#b10">[11]</ref>, when a developer manually selects the loops to be parallelized, and the tool applies transformation automatically (our approach also belongs to this category). Finally there are numerous approaches to automated parallelization, mostly implemented as parallelizing compilers <ref type="bibr" target="#b0">[1]</ref>. Such systems use the static analysis of the source code to detect possible areas of parallelism and generate parallel binary code. Some papers also use the dynamic analysis to detect parallelism based on concrete input data <ref type="bibr" target="#b14">[15]</ref>, or machine learning approaches to select most appropriate transformations <ref type="bibr" target="#b16">[17]</ref>, or auto-tuning to discover optimal parameters of transformations <ref type="bibr" target="#b5">[6]</ref>. The key differences of our approach is the use of the source-tosource transformations, allowing the developers to examine transformed program code, and the description of the transformations in terms of the formal models and rewriting rules, making easier for developers to add new parallelizing transformations or to modify existing ones.</p><p>This paper continues our research on automation of process of designing and development of efficient parallel programs, started in <ref type="bibr" target="#b2">[3]</ref>, <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b8">[9]</ref>. Our previous papers <ref type="bibr" target="#b2">[3]</ref>, <ref type="bibr" target="#b8">[9]</ref> applied a similar approach to the development of parallel programs written in C# language for Microsoft .NET framework, while this paper concentrates on parallelizing Fortran programs. We have already described our first experiences with Fortran programs in <ref type="bibr" target="#b7">[8]</ref>. However, as we moved from simple examples to realworld legacy code, we were forced to revise our approach, as described in this paper (see section 2). Also this paper places more significance on choosing place of application of existing program transformation, rather than developing new transformations.</p><p>Below we describe our approach in more detail, provide examples of parallelizing transformations and illustrate them with parallelization and evaluation of two programs: small example program (Gauss elimination) and applied quantum chemistry problem (electron density).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Our Approach: Algebraic Models and Rewriting Rules</head><p>As in our previous works <ref type="bibr" target="#b2">[3]</ref>, <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b8">[9]</ref>, we use formal facilities, namely rewriting rules technique and high-level algebraic models of programs, to automate parallelizing existing sequential code. Legacy source code of sequential program written in Fortran is transformed into parallel version targeting shared-memory parallel platform (multicore processors). As a part of transformation process, we create high-level algebraic models of legacy source code based on Glushkov algebra <ref type="bibr" target="#b1">[2]</ref>. As described in <ref type="bibr" target="#b2">[3]</ref>, the models are created in two steps. First we use target language parser (Fortran in this paper) to build low-level syntax model, and then rewriting rules of special form (patterns) to extract language-independent algebraic operators from language constructs. Using high-level algebraic models allows describing program transformations in more concise manner. The additional benefit of such models when applied to legacy code is that they aid in understanding of algorithms by hiding the (frequently obsolete) implementation details. To this end, using multiple levels of algebraic models can be useful -e.g. the highest level describes just general structure of algorithm, while lower levels supply implementation details (the example of such models is described in section 3).</p><p>After high-level program model is created, we use parallelizing transformations to implement a parallel version of the program on a given platform. Transformations are represented as rewriting rules and therefore can be applied in automated manner. (Selection of loops that could be transformed is performed manually.) The declarative nature of rewriting rules technique simplifies adding new transformations. Also transformations work with high-level model elements (on any level of abstraction), which means they are language-independent.</p><p>Usage of high-level algebraic models also allows proving correctness of the developed transformations <ref type="bibr" target="#b2">[3]</ref>. Based on program models, we have developed the algebra-dynamic models of program execution for multicore architecture using discrete dynamic (transitional) systems <ref type="bibr" target="#b1">[2]</ref>. For these models, we have (manually) proved that each of proposed code transformations is correct under certain conditions, i.e. that initial and transformed programs are equivalent.</p><p>To automate program transformations we use the rewriting rules system Termware <ref type="bibr" target="#b6">[7]</ref>. Termware is used to describe transformations of terms, i.e. expressions of form   Here source is a source term (a pattern for match), condition is a condition of rule application, destination is a transformed term, action is additional action that is performed when rule fires. Each of 4 components of a rule can contain variables (denoted as $var), so that rules are more generally applicable. Components condition and action are optional. They can execute any procedural code, in particular use the additional data on the program.</p><p>Termware supports a number of evaluation strategies, including TopDown (used in this paper), BottomUp and a possibility to implement additional strategies. Termware system itself doesn't check that transformation process terminates, however the rules used in this paper are designed in such way that each model element is processed at most once, therefore the transformation process is guaranteed to terminate.</p><p>In addition to rewriting system, our tools include parsers and generators for target languages that perform transformation between source code and low-level (syntax) program model, which is represented as Termware term. We have previously developed such tools for C# language [3], <ref type="bibr" target="#b8">[9]</ref>; in this paper we have developed a Fortran parser and generator based on GCC Fortran Compiler.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Parallelization for Shared-memory Systems Using OpenMP</head><p>In this section we describe the process of parallelizing sequential Fortran programs for parallel systems with shared memory, such as multicore processors. We parallelize source code of Fortran programs by replacing suitable loops with parallel loop constructs. To create multithreaded Fortran program we use OpenMP framework <ref type="bibr" target="#b13">[14]</ref>. OpenMP PARALLEL DO directives are used to parallelize loops. For simple loops, just addition of such directive can produce quite efficient parallel code. In this case there is additional advantage of keeping transformed parallel code similar to existing sequential code. In more complex cases (when there is data dependency between iterations) there is a need of more significant transformations, such as using OpenMP library subroutines for advanced thread management. In such cases, the transformed source code contains significant changes. However, usage of high-level algebraic models allows describing these changes in concise and understandable form.</p><p>We will describe the details of our approach using as an example a Fortran program implementing Gauss elimination algorithm for solving systems of linear algebraic equations. The Fortran source code was transformed into a low-level syntax model using developed parser, then into a high-level algebraic model using Termware patterns. When working with legacy code, we found it useful to apply several levels of patterns. First we used generic linear algebra patterns, such as vector and matrix operations. The obtained algebraic model was language-independent, but still quite detailed. Then we applied patterns specific to the problem in question. In this way we obtained schematic representation of algorithm useful for its understanding and deciding where parallelizing transformations should be applied.</p><p>The high-level model of relevant fragment of program has the following form:</p><formula xml:id="formula_0">DoCnt(K,1,N-1,</formula><p>FindMaxElement, CheckDetZero, SwapMaxRowColumn, CalculateRow(K), UpdateElements )</p><p>We will parallelize only two of the operators present in program, namely FindMaxElement and UpdateElements. Other operators have less computational complexity, therefore their parallelization is less effective.</p><p>Out of two operators, the simplest is UpdateElements, responsible for calculating new values for elements of submatrix: UpdateElements = DoCnt(I,K+1,N, Assign(S,A(I,K)), DoCnt(J,K,N+1, Update(A(I,J),S)))</p><p>Here, DoCnt denotes common DO loop with counter. The iterations of the outer loop are independent, so this fragment is easily parallelized. We use the following rewriting rule: DoCnt($var,$start,$end,$body,_MARK_Parallel)-&gt; ParallelDoCnt($var,$start,$end,$body)</p><p>The loop to be transformed is marked with _MARK_Parallel symbol to enable rule application. ParallelDoCnt operator is high-level model element responsible for parallel loop. In particular, for OpenMP platform it is transformed into OmpParallelDo operator that describes OpenMP directive represented in Fortran as a pair of special comments: !$OMP PARALLEL DO … !$OMP END PARALLEL DO.</p><p>Notice that for C language the same operator is represented as a single pragma statement: #pragma omp parallel for. Therefore, using multiple levels of patterns allows us to provide operators that are common for given platforms, use these generic operators in most rewriting rules and then specialize them only when transforming program model back into source code.</p><p>While UpdateElements operator can be parallelized by simple application of OpenMP directive, the other operator FindMaxElement is more complex. It also has the form of loop, but iterations of the loop update the same set of variables (value of the maximum element in submatrix and its indices). This is the case of reduction, when some local values are calculated on each iteration and then merged into one global value. OpenMP supports such cases with REDUCTION clause, however only a set of predefined reduction operators are supported: while finding just maximum value can be accomplished using OpenMP directives, finding maximum value and indices where it occurs is not directly supported.</p><p>Therefore we need to provide transformations that parallelize the loop in general case of reduction. We represent FindMaxElement as following combination: Both already described parallelizing transformations are aimed at high-level structure of algorithm. However, as we observed in <ref type="bibr" target="#b2">[3]</ref>, low-level implementation details, in particular memory access, can have profound impact on overall performance.</p><p>In the Gaussian elimination program we have observed the same effect. We noticed that for certain sizes of input matrix (N=256*M) there was a sudden increase of execution time. We attribute this increase to the peculiarities of memory access: namely, caching adjacent matrix elements. For such matrix size, the adjacent matrix elements were put into the same cache items, therefore increasing the number of cache misses and greatly reducing overall performance. To overcome this peculiarity, we declare the matrix size as N+1 instead of N. The extra elements are not used in calculations, but they change location of elements and improve efficiency of memory access. The transformation is implemented with the following rules: The rule 1 adds new parameter, MN, denoting declared matrix size. The rule 2 specifies for which values of matrix size the transformation should be applied. The rule 3 modifies matrix declaration to use new size MN instead of N. Rules 4-6 propagate new parameter to all procedures, procedure parameters and procedure calls.</p><p>Notice that rules 4-6 are applied multiple times in a single program: for each procedure definition (rules 4-5) and for each procedure call (rule 6). One of the advantages of rewriting rules technique is that single rule can describe changes in multiple places, reducing effort to make the changes and preventing mistakes possible when applying such changes manually. Notice also that rules 1-6 work on lower level of abstraction compared with previously described rules. The ability to describe transformations on different model levels is another advantage of proposed approach and it allows describing different types of transformations with the same tools.  As can be seen from the diagram, all transformations result in some performance increase, although their effect differs. For small matrix sizes, both PAR1 and PAR2 show some noticeable speedup, while MEM is not very effective and is very close to PAR2. However, for larger matrix sizes (N&gt;1024), the situation changes. PAR1 and PAR2 become less efficient, close to SEQ. However, MEM becomes much more efficient and demonstrates speedup of more than 10x. Therefore both high-level transformations of algorithms and taking care of low-level implementation details is necessary to obtain efficient parallel programs. Measurement results also demonstrate complex dependency of execution time on real parallel systems, as compared to ideal theoretical models that suggest simple O(N 3 ) dependency.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Performance Evaluation: Test Program and Real-world Example</head><p>After developing our tools on sample problem (Gauss elimination) we have tried them on real-world program in area of quantum chemistry. The program calculates electron and spin density in atoms of polycyclic aromatic hydrocarbons on N*N grid <ref type="bibr" target="#b11">[12]</ref>. The size of the program is 1680 lines of Fortran code. Source code is not well structured -actual calculations are mixed with I/O operations, debug code and some hardcoded data. Also it contains mix of features from different versions of languagefrom Fortran 77 to Fortran 95. Therefore usage of high-level algebraic models helped us to understand this legacy code and apply parallelizing transformations in most efficient way.</p><p>We were able to reuse parallelizing transformations developed for Gauss elimination program also in electron density program. Only the first, most simple loop transformation was applied. However, the challenge was to select the most suitable loop for this transformation, as the program contained 54 loops and trying all of them was not a feasible option. We have used a profiler tool, Intel VTune Amplifier <ref type="bibr" target="#b9">[10]</ref>, to find hotspots in source code. Then we applied rewriting rules technique to detect all loops enclosing such code fragments. Thus the number of candidate loops was significantly reduced from 54 to 6. Out of these 6 loop, we applied transformation to second outermost loop (as the outermost loop contained too few iterations, and parallelizing inner loops was less efficient because of repeated cost of creating and synchronizing threads each time inner loop was executed).</p><p>We have compared execution time of initial sequential program (SEQ) and parallelized program (PAR) for grid dimensions N from 200 to 800 (see fig. <ref type="figure" target="#fig_4">2</ref>). Applying transformations has resulted in quite significant speedup -from 3.3X to 3.6X (depending on problem size) on 4-core system.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Conclusion</head><p>In this paper we have described our approach for parallelizing Fortran programs by applying formalized program transformations to existing sequential Fortran code. Using rewriting rules technique automates application of transformations and prevents mistakes that can appear when applying changes to source code manually. High-level algebraic models simplify understanding of legacy programs and their transformations, and enable transformation on different levels of abstraction. We have applied our approach both to simple program implementing Gauss elimination algorithm and real-world quantum chemistry problem (calculating electron density). Performance measurements demonstrate significant speedup for both programs.</p><p>Further research directions include development of the same approach for transforming legacy Fortran applications to target distributed-memory systems and GPUs. Our future plans also include extension to Grid and cloud-based platforms. Also we are planning to improve support for large and complex Fortran programs, in particular automate selection of most suitable place of application for transformations.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>FindMaxElement=FindMaxElLoc1</head><label></label><figDesc>*…*FindMaxElLocTN*FindMaxEl Reduct On each thread we execute local version of operator (FindMaxElLoc1,…, FindMaxElementLocTN), and then execute reduction operator FindMaxElReduct that combines local values into one global value.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>1 .</head><label>1</label><figDesc>[Declaration(N,Integer,$val):$next] -&gt;[Declaration(N,Integer,$val): [Declaration(MN,Integer,$val+MShift($val)): $next]] 2. MShift($val) [$val%32==0]-&gt;1 !-&gt;0 3. Declaration(A,Array(Double,[N,N+1])) -&gt; Declaration(A,Array(Double,[MN,MN+1])) 4. Procedure($name,[N:[A:$next]])-&gt; Procedure($name,[N:[MN:[A:$next]]]) 5. [Parameter(N,Integer,In):$next] -&gt; [Parameter(N,Integer,In):[Parameter(MN,Integer,In): $next]] 6. Call($name,[N:[A:$next]]) -&gt; Call($name,[N:[MN:[A:$next]]])</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head></head><label></label><figDesc>To evaluate effects of developed transformations, we have measured the performance of different versions of initial program of Gauss elimination. We have compared performance of 4 versions: initial sequential program (SEQ), parallel program with UpdateElements operator parallelized (PAR1), parallel program with both UpdateElements and FindMaxElement operators parallelized (PAR2), and program with both operators parallelized and memory optimization applied (MEM). The measurements were performed on 4-core parallel system, for matrix sizes from 256 to 2048. Obtained speedup (compared with SEQ program) is shown on fig. 1.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 1 .</head><label>1</label><figDesc>Fig. 1. Speedup of transformed programs (Gauss elimination).</figDesc><graphic coords="6,212.16,554.16,182.88,110.64" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Fig. 2 .</head><label>2</label><figDesc>Fig. 2. Comparison of initial and transformed program (electron density).</figDesc><graphic coords="7,212.16,524.88,182.88,110.16" type="bitmap" /></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Optimizing Compilers for Modern Architectures: A Dependence-Based Approach</title>
		<author>
			<persName><forename type="first">R</forename><surname>Allen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Kennedy</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Morgan Kaufmann</publisher>
			<pubPlace>San Francisco</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">I</forename><surname>Andon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Doroshenko</surname></persName>
		</author>
		<author>
			<persName><surname>Yu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">O</forename><surname>Tseitlin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><forename type="middle">A</forename><surname>Yatsenko</surname></persName>
		</author>
		<title level="m">Algebra-algorithmic models and methods of parallel programming</title>
				<meeting><address><addrLine>Kiev</addrLine></address></meeting>
		<imprint>
			<publisher>Academperiodika</publisher>
			<date type="published" when="2007">2007</date>
		</imprint>
	</monogr>
	<note>in Russian</note>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Programming high-performance parallel computations: formal models and graphics processing units</title>
		<author>
			<persName><forename type="first">P</forename><surname>Andon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Doroshenko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Zhereb</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Cybernetics and Systems Analysis</title>
		<imprint>
			<biblScope unit="volume">47</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="659" to="668" />
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">A view of the parallel computing landscape</title>
		<author>
			<persName><forename type="first">K</forename><surname>Asanovic</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">52</biblScope>
			<biblScope unit="page" from="56" to="67" />
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">The impact of multicore on math software</title>
		<author>
			<persName><forename type="first">A</forename><surname>Buttari</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">PARA 2006</title>
				<editor>
			<persName><forename type="first">B</forename><surname>Kagstrom</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">E</forename><surname>Elmroth</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Dongarra</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Wasniewski</surname></persName>
		</editor>
		<meeting><address><addrLine>Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">4699</biblScope>
			<biblScope unit="page" from="1" to="10" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Stencil computation optimization and auto-tuning on state-of-the-art multicore architectures</title>
		<author>
			<persName><forename type="first">K</forename><surname>Datta</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ACM/IEEE Conference on Supercomputing (SC &apos;08)</title>
				<meeting><address><addrLine>Piscataway</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Press</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="1" to="12" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">A Rewriting Framework for Rule-Based Programming Dynamic Applications</title>
		<author>
			<persName><forename type="first">A</forename><surname>Doroshenko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Shevchenko</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Fundamenta Informaticae</title>
		<imprint>
			<biblScope unit="volume">72</biblScope>
			<biblScope unit="issue">1-3</biblScope>
			<biblScope unit="page" from="95" to="108" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Creating Efficient Parallel Programs in Fortran Using Rewriting Rules Technique</title>
		<author>
			<persName><forename type="first">A</forename><surname>Doroshenko</surname></persName>
		</author>
		<author>
			<persName><surname>Yu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">A</forename><surname>Zhereb</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Yu</forename><forename type="middle">M</forename><surname>Tyrchak</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">O</forename><surname>Khatniuk</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on High-Performance Computations (HPC-UA&apos;2011)</title>
				<meeting><address><addrLine>Kyiv</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2011">October 12-14, 2011</date>
			<biblScope unit="page" from="76" to="83" />
		</imprint>
	</monogr>
	<note>in Russian</note>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Formal Facilities for Designing Efficient GPU Programs</title>
		<author>
			<persName><forename type="first">A</forename><surname>Doroshenko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Zhereb</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Yatsenko</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Concurrency Specification and Programming (CS&amp;P&apos;2010)</title>
				<imprint>
			<publisher>Bornicke</publisher>
			<date type="published" when="2010">Sep. 27-29, 2010</date>
			<biblScope unit="page" from="142" to="153" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<ptr target="http://software.intel.com/en-us/articles/intel-parallel-studio/" />
		<title level="m">Intel Parallel Studio</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Development and Implementation of an Interactive Parallelization Assistance Tool for OpenMP: iPat/OMP</title>
		<author>
			<persName><forename type="first">M</forename><surname>Ishihara</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Honda</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Sato</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEICE Transactions on Information and Systems E89-D</title>
		<imprint>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="399" to="407" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Quantum chemical study of polyaromatic hydrocarbons in high multiplicity states</title>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">D</forename><surname>Khavryutchenko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><forename type="middle">A</forename><surname>Tarasenko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">V</forename><surname>Strelko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><forename type="middle">V</forename><surname>Khavryuchenko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">V</forename><surname>Lisnyak</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International Journal of Modern Physics B</title>
		<imprint>
			<biblScope unit="volume">21</biblScope>
			<biblScope unit="page" from="4507" to="4515" />
			<date type="published" when="2007">2007</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">The design of a task parallel library</title>
		<author>
			<persName><forename type="first">D</forename><surname>Leijen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Schulte</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Burckhardt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">24th ACM SIGPLAN Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA &apos;09)</title>
				<meeting><address><addrLine>New York</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="227" to="242" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<ptr target="http://openmp.org/wp/" />
		<title level="m">OpenMP specification</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Sensitivity analysis for automatic parallelization on multi-cores</title>
		<author>
			<persName><forename type="first">S</forename><surname>Rus</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Pennings</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Rauchwerger</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">21st Annual International Conference on Supercomputing (ICS &apos;07)</title>
				<meeting><address><addrLine>New York</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="263" to="273" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">X10: concurrent programming for modern architectures</title>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">A</forename><surname>Saraswat</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Sarkar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Von Praun</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">12th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP &apos;07)</title>
				<meeting><address><addrLine>New York</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page">271</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Towards a holistic approach to auto-parallelization: integrating profile-driven parallelism detection and machine-learning based mapping</title>
		<author>
			<persName><forename type="first">G</forename><surname>Tournavitis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Wang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Franke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">F P</forename><surname>O'boyle</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIGPLAN Not</title>
		<imprint>
			<biblScope unit="volume">44</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="177" to="187" />
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
