<!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>Software Development Technology for Homogeneous Computing Environments</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Vasily Trishin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nick Lookin</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Alexander Filimonov</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Engineering Science Ural Branch of RAS</institution>
          ,
          <addr-line>Yekaterinburg</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Ural Federal University</institution>
          ,
          <addr-line>Yekaterinburg</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <fpage>60</fpage>
      <lpage>71</lpage>
      <abstract>
        <p>Homogeneous computing environments (HCE) for many years are of interest to researchers and designers of high-performance computing. The uniformity of the HCE architecture allows it to increase its computing capabilities by a simple increase in the number of processor elements. The possibility of power consumption control making the HCE very attractive for the implementation of the Internet of Things (IoT). The unconventionality of the HCE architecture prevents the use of traditional technologies for its programming. The main reason is that the HCE is a computer system with stored algorithms for solving the target problem. A technology platform for programming HCE, based on three parts (programming, composing and emulator) is discussed. Examples of the developed elements of the proposed technology of HCE programming are given.</p>
      </abstract>
      <kwd-group>
        <kwd>homogeneous computing environment</kwd>
        <kwd>mass parallelism declarative programming</kwd>
        <kwd>technological software platform</kwd>
        <kwd>cloud pro- gramming</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        One of the main trends in the development of software and hardware platforms
for real-time systems (RTS) is the scalability of the architectures of embedded
computing subsystems, high degree of fault tolerance, minimization of power
consumption, ensuring the maximum possible performance with given restrictions
on hardware costs. This is most clearly presented, for example, in such a class of
RTS as the Internet of things (IoT), when the built-in processor should provide
performance of the order of gigaflops with a mass of not more than 10 grams
[
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Specialists note the need for a new level of development of microelectronics
to carry out research and development of computer systems with mass
parallelism, in particular, systolic architectures that potentially realize the maximum
possible performance when processing large amounts of data in real time [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
The development of systolic processors and systems based on them has revealed
a number of problems. One of the most actual problems is the practical lack of
software technologies that allow developing, debugging and verifying user
programs on the systolic architectures. At present, projects of systolic processors or
systems do not contain the same advanced solutions in the field of programming
technologies, as processors based on the concept of von Neumann or its
development. One of the main reasons for the difficulties in developing software for
systolic processors is the unresolved fundamental problem of the mutual mapping
of algorithms and architectures. The peculiarities of the topology of processor
element arrays not only require transformations of mathematical procedures,
but also give the algorithms themselves a distinct “geometric” character. For
example, in a number of cases it is required to transform arbitrary algorithmic
graphs into so-called lattice graphs [21], which is not always possible. As another
reason, it should be noted the explicit declarative character of the description
of data processing processes in systolic architectures, for which the fulfillment of
the i-th transformation is determined by the readiness of the results of some j-th.
This is a typical case of a computer system with mass parallelism and data flow
control. Below we consider a possible approach to the development of software
technologies for systolic architectures of a certain type.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Homogeneous Computing Environment</title>
      <p>
        Homogeneous computing environments are specialized computing systems
consisting of regularly connected identical processor elements (PE), each of which
is configured to perform an arithmetic or logical function, and to implement an
exchange protocol with neighboring elements [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], [20]. Features of the
organization of the computational process in HCE make it expedient to use them as
special-purpose computers or co-processors for solving a wide, but fixed class of
computational tasks. There are some features for these tasks, they are:
– Large arrays of data being processed;
– Non-standard forms of data representation;
– Data processing in hard real-time mode (limits for the time interval or
periodicity of for the results of computations);
– Acyclic algorithmic graphs or minimum number of cycles according to the
data.
      </p>
      <p>Examples of such tasks are image processing in real time, pattern recognition
and classification, the use of modern encryption algorithms in on-fly mode etc.
2.1</p>
      <p>Formalism for HCE
Let us have an arbitrary computer system (CS) S = {{PE },{L}} {PE} - PE
set, {L} - set of interconnections. This corresponds to the representation of the
CS in the form of an undirected graph GHCE , where PE is the vertex, and L
is the edge. We introduce the PE numbering, assuming that they form a
twodimensional array.Then</p>
      <p>
        S = ffP Ei;j g; fL(i ;j )gg;
(1)
where 2[0,(N-1)], 2[0,(M-1)].Representation (1) corresponds to different
structures of the CS. We call homogeneous CS, for which all PEi;j are identical, and
all connections are regular. Only the regularity of the constraints can lead to the
ambiguity of the CS representation. For example, a fully connected graph GHCE
is regular by definition [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], at the same time 2D-regular graph can have
intersecting edges. The closest single-valued interpretation of HCE are the lattice graphs
of the algorithms [21]. In this paper, these graphs are useful for the description
of problems. Lattice graphs can also contain intersections of arcs, for example,
Hamming graphs [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Let us introduce some definitions. The homogeneity of the
first type for the graph GHCE is its regularity:
8i; j; ; ; degP Ei;j = degP E(i ;j );
(2)
where degPEi;j - degree of the vertex PEi;j The homogeneity of the second type
for the graph GHCE is:
      </p>
      <p>Notations in the Fig.1: {DU };{DD};{DL};{DR }; -external data bus; U::=
hU0, U1 , ... , UNU 1 i;D::= hD0, D1 , ... , DND 1 iL::= hL0, L1 , ... , LNL 1 i;R::=
hR0, R1 , ... , RNR 1 i.</p>
      <p>For HCE considered above:NU 1=ND 1=NL 1=NR 1. Each PE can execute
a finite set of microinstructions of two types:
– Microinstruction of data processing (EXE):
{OUT} := {IN1}(OPCODE){IN2}; IN1,IN2,OUT = hDki_hRAMi ;k =
U,L,R,D;
– Microinstruction of transit (TRANSIT):</p>
      <p>{OUT} := {IN};OUT,IN = hDi_hRAMi;
These two types of microinstructions are combined into instruction (INSTR),
that performs per one cycle: {INSTR} ::= [C1&amp;EXE]_[C2&amp;TRANSIT], C1, C2
control signals. The number of instruction types is determined by the operation
code. Each PE can realize 3 modes of data processing – EXE mode, TRANSIT
mode or their joint execution.</p>
      <p>
        All HCE PE perform INSTR cycle by cycle, operation codes are pre-recordedin
the control memory. So the natural metric of any data processing procedure is
the time complexity of the computations [
        <xref ref-type="bibr" rid="ref20">22</xref>
        ]. There are two kinds of time
complexity in HCE case, they are
– autonomous time complexity Lt;a= nd , [cycle], where nd- number of cycles
necessary to execute the d-th command (instruction);
– pipeline complexity of computations Lt;c=1;
The design of the programming languages of HCE should take into account the
peculiarities of the temporal organization of data processing, in particular, the
organization of pipelines.
      </p>
      <p>Before data processing, code “INSTR” is written to each PE. Thus, HCE is
a computer system with a stored algorithm. HCE programming is a declaration
INSTRi;j for each PE to implement the algorithm for solving the target task.</p>
      <p>Then HCE = {PEi;j }; i = 0,1,...,(N-1); j = 0,1,...,(M-1). The original
algorithm (or more generally TASK) is TASK = {INSTRp;q}; p = 0,1,...,(P-1),
P (N-1);q = 0,1,...,(Q-1), Q (M-1).Both HCE and TASK are determined by
their graphs. For HCE graph: GHCE = {{PEi;j }};{Li;j }}, for algorithm graph:
GT ASK = {{INSTRp;q}};{(LT ASK )p;q}}, for HCE with embedded program:
(GHCE )instr = {{PEp;q}};{Lp;q}}.It follows from the above that there exists
a homomorphism on the graph GT ASK on the graph (GHCE)instr, i.e. graph
(GHCE )instr is subgraph of the graph GHCE .</p>
      <p>HCE programming is the declaration procedure of each {PEi;j }; i =
0,1,...,(N1); j = 0,1,...,(M-1) destination on execution of the {INSTRp;q}; p = 0,1,...,(P-1),
P (N-1);q = 0,1,...,(Q-1), Q (M-1) with the aim of solving the TASK. All PE
are connected to the lattice, which eliminates the need to specify the relationship
between the algorithms blocks. In this case, the program should be called the
recording of the function blocks of the target task.</p>
    </sec>
    <sec id="sec-3">
      <title>Features of HCE programming</title>
      <p>The programming of the HCE is the process of setting up each PE for the
execution of the corresponding processing and transmission operations that are
necessary to display the data flow graph of the target task into the PE lattice.
The presence of a spatial metric (rectangular matrix of locally connected PEs)
causes the “geometric” features of programming, which determines the
necessity of constructing the propagation paths of data streams in two-dimensional
PE space. Programmers need taking into account the constructive limitations
of a particular implementation of the HCE. The result of HCE programming
is the special-purpose processor architecture that determines the distribution of
operations and the interconnections between PEs in contrast to the
programming of the universal processor, where the result is a program for the same
architecture. The main feature of the HCE programming is the simultaneous
development of a program and architecture that implements it (co-design). As
the main components of the HCE programming platform, the subsystem for
programming data processing functions (programming subsystem), the architecture
layout subsystem (layout subsystem) and the simulation modeling subsystem
(simulation subsystem) are proposed in the work. To optimizing the
architectures of the HCE, the interconnection between subsystems should be iterative
and interactive. These subsystems must be block-modular in order to ensure the
possibility of further development of the programming platform. The
programming subsystem is designed to display the algorithm in the operational basis of
the HCE and the corresponding distribution of the data processing functions
between the PE groups. The requirements for the ranges of change and accuracy
of the representation of the elements that form the input, output and
intermediate data streams should be formed and monitored. For debug the mapping of
the algorithms into the operational basis of the HCE, the verification data for
the functions of the target task are used (for example, for control the
computation accuracy). If the debugging succeeds, the programming system generates a
complete data flow graph, which is detailed up to PE’s operation and the links
between them. The layout subsystem provides the placement of programmed
PEs on the HCE and forms links between them. It is designed for laying a
complete graph of data streams of the initial algorithm in the HCE lattice. To
successfully solve this task, the requirements of the specific implementation of
the HCE (CT) must be met. These requirements include:
– Total number of PEs that can be used.
– Geometric parameters of the space where PE can be placed.
– Mutual position of PE groups necessary to execute the d-th command
(instruction).</p>
      <p>The final solution to the layout problem is the option of laying a complete graph
of data flows into HCE, which ensures that all the requirements listed above. This
solution is formulated in the technological language of the layout specifications.
The simulation subsystem is designed to simulate the implementation of the
algorithms on the HCE and provides final control over the fulfillment of the all
requirements.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Principles of Constructing the Platform for</title>
    </sec>
    <sec id="sec-5">
      <title>Programming HCE</title>
      <p>
        To take into account the features of the data processing organization in
massparallel CS, the developers of programming systems use non-traditional forms
of representation of problems (tasks). The use of graphic tools allows display
the structure of information or control flows adequately, concisely and visually.
The emergence and dissemination of graphic and visual methods among Russian
[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] and foreign [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] developers of programming platforms for systems with mass
parallel computing was natural. Technology of the graph-symbol programming
(GSP) [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] is designed to describe the interaction of distributed computing
systems through shared memory. It is oriented to the construction of the control
flows graph. At the same time, concepts underlying the GSP platform, such as
the polymorphism of basic modules (computable functions) and the certification
of actors are universal and can be used in the development of the HCE
programming subsystem. The GASPARD (Graphical Array Specification for Parallel
and Distributed Computing) platform provides a solution to a set of tasks for
hardware and software co-design for embedded real-time systems (Real-time /
Embedded - RT/E). It is based on the concept of Model-Driven Engineering
(MDE) in accordance with the basic requirements of the object management
group (OMG) presented in the recommendation [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. It allows you to develop a
hierarchy of interrelated models of software and hardware components of RT/E
real-time systems. The GASPARD system was implemented by the Inria
development team from 2006 to 2011 as a set of plug-ins for the Eclipse platform and
can be considered as a functional prototype of the HCE programming platform.
The basic language used to build the model of the computational process in
GASPARD is the graphical functional language Array-OL [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. The use of
imperative languages for programming Data Flow driven architecture causes serious
problems associated with side racing effects and data availability limitations [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
That is why programming platforms based on imperative languages are forced
to adopt the basic principles of the declarative programming concept [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ],[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
The absence of common memory, variables, pointers, indices, cycles is an
additional advantage of declarative languages for programming HCE. It is advisable
to use a combination of textual and graphical description of the computational
process with the automatic formation of a graph of functional relationships for
the verification of the program model. In this case, the process of solving the
target can be represented as a hierarchical composition of functional modules
(FM), each of which generates a stream of output data. The output streams of
the FM lower level of the hierarchy or the input data streams of the target task
itself can act as FM parameters. There are some types of FM. They are:
– Initially defined in the programming system (built-in FM);
– Defined by other users (library FM);
– Defined by the user (original FM).
      </p>
      <p>
        The transition from the static typing of lexical constructions, which is accepted
in the Array-OL language to the dynamic one, in which the types of arguments
are defined and controlled at the interpretation stage seems promise The
violation of the dimension in WL is fixed only if the system fails to perform the
specified function element-by-element. In this case, these FM can be determined
as polymorphic parametrically. In the language, special procedures or
constructions must be provided that ensure the monitoring and agreement of the types
of actual parameters of the module. The use of a scalar (or incomplete)
function to a multidimensional input data stream is important. It is important for
declarative programming systems to be given since it forms the basis for
parallelizing computations. For example, in Wolfram Language [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] (hereinafter WL)
some of the scalar functions can be applied to multidimensional arguments. In
this case, the structures of the streams of operands are automatically
reconciled, which allows performing element-by-item arithmetic functions, for
example, adding a scalar to a matrix, a vector with a matrix, and so on. The violation
of the dimension in WL is fixed only if the system fails to perform the
specified function element-by-element (for example, when two different sequences of
different lengths are added). A different approach is practiced in SequenceL, in
which the mechanisms of implicit parallelization of computations are also
actively used [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. If the dimension of the argument when accessing a function
exceeds the value of the dimension specified in its definition, the SequenceL
programming system automatically performs a set of matching operations. This is
NTD (Normalize-Transpose-Distribute), which relieves the programmer of the
need to use additional software to parallelize the computational process. The
developers of SequenceL note that the use of a fully automatic approach when
matching the dimension of the operands can lead to the appearance of difficult
to diagnose errors [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The automatic procedure of structural matching, which
is performed by selecting the adapters of data stream structures when calling a
particular function, is more promising. Structural adapters are standard
procedures for direct and inverse space-time transformations of data stream structures
that can be defined for each type of HCE architecture. For example, the flow of
matrices of dimension m n that follow with period t can be transformed into a
stream of vectors of dimension m that follow with a period t/n or a scalar stream
that follow with a period of t/(m n). For data stream elements, the number
of bits, accuracy (error) of representation may be determinate. In addition,
format adapters (standard procedures for forward and backward transformations
of presentation formats) can be defined. Thus, it seems appropriate to use one
of the modern functional or hybrid programming languages as a basic
programming language. It allows describing the target task in the form of a hierarchical
composition of functional modules. Additional advantages, in this case, are the
use of symbolic programming languages (LISP, WL) because it allows forming a
functional connection graph, which is necessary for performing the laying of FE
on the HCE.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Implementation of the Programming Platform</title>
      <p>
        process of the HCE should be finished by the implementation of the control
procedure. Successful execution of such a procedure indicates that the next stage
can be performed; otherwise, the programming platform makes
recommendations to the programmer to improve the re-execution of previous stages. The
proposed concept of a technological platform for the development of
application (embedded) HCE software largely corresponds to MDE ideology with the
necessary additions in terms of developing and testing (verifying) software for
real-time systems. The architecture features of the HCE requires consideration
of the topology of the connections (grid) and the systolic principle of data
processing. The layout of algorithmic graphs into PE’s lattice represents s problem
of the high combinatorial complexity. For the same algorithm, there are many
options for laying its graph into the topology of a two-dimensional PE’s cellular
array. This requires the directional enumeration in order to optimize the data
processing by the criteria of hardware or time complexity of computations. In
addition, for mobile systems such as IoT, it is necessary to provide the ability
to create and verify software projects remotely using cloud technologies. This
is especially important for responsible applications, for example, processing
signal flows from the outputs of mobile robot sensors in order to make promptly
decisions in hard real-time mode from the command post at a considerable
distance from the controlled object. The programming platform for IoT should
take into account the specifics of the process programming of HCE and the
current requirements that are imposed on the IoT [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] computing components. The
features of programming HCE in the IoT structure significantly limit the
possibility of using traditional programming systems that are built as local software
applications. Cloud platforms, which are becoming more widespread, can
significantly reduce the cost of creating software projects due to the ability to interact
quickly with libraries of previously created software and hardware modules [
        <xref ref-type="bibr" rid="ref21">23</xref>
        ].
Full elimination or minimal use of local applications of the HCE ensures
complete independence of the programming process from the characteristics of the
local OS. This allows for further development of the programming platform and
provides the opportunity to implement new approaches to the collective
development of not only programs, but also algorithms [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. In this case, it is advisable to
use additional software “electronic notebook” as a programming interface -
(electronic notebook-EN) [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. In modern programming systems, EN provides some
functions such as editing, formatting, text saving, on-line monitoring of syntax
(including syntax highlighting) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], context-defined support [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]. The use of EN
as the interface and binding element of the IoT programming platform for IoT
allows taking into account all the programming features inherent in this platform.
At present, the graphic editor of the PE array has been developed; it is part
of the simulation subsystem. By means of editor, the programmer assigns PE’s
executable instructions and builds the trajectory of the processed data, actually
creating a graph (GHCE )instr. In Fig.3, as an example, the web-interface of the
editor is displayed, it is a fragment of the field of PE, configured to perform
treelike summation of the variables arriving at the four input ports. The scheme of
information interaction of the components of the simulation subsystem is shown
in Fig.4. In response to the request, the client’s browser receives the page of the
cloud-based IDE. Graph (GHCE )instr is edit on this page. The PEs are display
using the built-in SVG elements, which are copies of the library ones. The images
of the symbols of the PE’s operating mode are tune using the CSS style sheet.
On the client side, JavaScript code is execute and the information about user’s
action is sent to the server and receives new rules for the style sheet in response.
On the server side, Perl scripts are execute. These scripts access through
SQLqueries to the database in which the data about the states of processor elements
and user sessions are stored. Today the technology of remote programming of
the HCE at the lower level has been developed, that is, using the graphical tools
for projects design on the MTera 2 HCE. At this stage, software projects can
be implement directly on user computers. The programming system is located
on a remote server and its activation and operation is performed through the
developed web-interface.
      </p>
    </sec>
    <sec id="sec-7">
      <title>Conclusion</title>
      <p>Homogeneous computing environments once again attract the attention of
researchers and developers of high-performance computing systems in a wide range
of applications: from co-processors of supercomputers to functional-oriented
processors of real-time systems. Currently, the problem of effective HCE
programming is still not solved, and the main reason for this is the lack of an equally
developed technology for programming user tasks, both for universal
processor architectures. In our paper, the basic principles of construction and
functioning of technological platform of HCE programming are considered. The key
components of this platform are the functional programming language (the
program making subsystem), the information algorithm graph layer on the
twodimensional PE array (layout subsystem), and the emulator (simulation
subsystem). The platform is based on the use of cloud services as part of a distributed
software development environment. As the first stage of development of the
technological platform for HCE programming, an intelligent graphic editor has been
developed.</p>
      <p>The work was carried out with the partial financing of the Project of the
Ural Branch of the Russian Academy of Sciences No. 15-7-1-20 on the subject
“Complex study of architectures of 2D processor arrays that carry out
finegrained processing parallelism and fast algorithms for processing speckled images
to development VLSI video processors for real-time systems”.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>1. Jupyter and the future of IPython IPython (</article-title>
          <year>2017</year>
          ), https://ipython.org/
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Project</given-names>
            <surname>Jupyter | Home</surname>
          </string-name>
          (
          <year>2017</year>
          ), http://jupyter.org/
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Bailey</surname>
            ,
            <given-names>R.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cameron</surname>
            ,
            <given-names>P.J.:</given-names>
          </string-name>
          <article-title>Base size, metric dimension and other invariants of groups and graphs</article-title>
          .
          <source>Bulletin of the London Mathematical Society</source>
          <volume>43</volume>
          (
          <issue>2</issue>
          ),
          <fpage>209</fpage>
          -
          <lpage>242</lpage>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4. Bo¨hm, W., et al.:
          <article-title>Mapping a Single Assignment Programming Language to Reconfigurable Systems</article-title>
          .
          <source>The Journal of Supercomputing</source>
          <volume>21</volume>
          (
          <issue>2</issue>
          ),
          <fpage>117</fpage>
          -
          <lpage>130</lpage>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Boulet</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Formal Semantics of Array-OL, a Domain Specific Language for Intensive Multidimensional Signal Processing (</article-title>
          <year>2008</year>
          ), https://hal.archivesouvertes.fr/inria-00261178
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Cooke</surname>
            ,
            <given-names>D.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rushton</surname>
            ,
            <given-names>J.N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nemanich</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Watson</surname>
            ,
            <given-names>R.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Andersen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          : Normalize, Transpose, and
          <article-title>Distribute: An Automatic Approach for Handling Nonscalars</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          <volume>30</volume>
          (
          <issue>2</issue>
          ), 9:
          <fpage>1</fpage>
          -
          <lpage>9</lpage>
          :
          <fpage>49</fpage>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Curtin</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Algebraic Characterizations of Graph Regularity Conditions</article-title>
          .
          <source>Designs, Codes and Cryptography</source>
          <volume>34</volume>
          (
          <issue>23</issue>
          ),
          <fpage>241</fpage>
          -
          <lpage>248</lpage>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Devin</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Boulet</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dekeyser</surname>
            ,
            <given-names>J.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marquet</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>GASPARD: a visual parallel programming environment</article-title>
          .
          <source>In: Proceedings of the International Conference on Parallel Computing in Electrical Engineering</source>
          ,
          <year>2002</year>
          . PARELEC '
          <volume>02</volume>
          . pp.
          <fpage>145</fpage>
          -
          <lpage>150</lpage>
          . IEEE (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Egorova</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhidchenko</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Visual Parallel Programming as PaaS Cloud Service with Graph-Symbolic Programming Technology</article-title>
          .
          <source>Proceedings of the Institute for System Programming</source>
          <volume>27</volume>
          (
          <issue>3</issue>
          ),
          <fpage>47</fpage>
          -
          <lpage>56</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Hammarlund</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lisper</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Data Parallel Programming: A Survey and a Proposal for a New Model</article-title>
          .
          <source>Tech. rep., Royal Institute of Technology</source>
          , Department of Teleinformatics, Sweden (
          <year>1993</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Johnston</surname>
            ,
            <given-names>W.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hanna</surname>
            ,
            <given-names>J.R.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Millar</surname>
          </string-name>
          , R.J.:
          <source>Advances in Dataflow Programming Languages. ACM Computing Surveys</source>
          <volume>36</volume>
          (
          <issue>1</issue>
          ),
          <fpage>1</fpage>
          -
          <lpage>34</lpage>
          (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Kovartsev</surname>
            ,
            <given-names>A.N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhidchenko</surname>
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            ,
            <surname>Popova-Kovartseva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.A.</given-names>
            ,
            <surname>Abolmasov</surname>
          </string-name>
          ,
          <string-name>
            <surname>P.V.</surname>
          </string-name>
          :
          <article-title>The Basics of Graph-Symbolic Programming Technology</article-title>
          . In: OSTIS-2013:
          <article-title>Open Semantic Technologies for Intelligent Systems</article-title>
          . pp.
          <fpage>195</fpage>
          -
          <lpage>204</lpage>
          . BSUIR, Minsk (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Kuhn</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Conradt</surname>
          </string-name>
          , J.:
          <article-title>Review of Novel Computing Architectures for Neural Applications (</article-title>
          <year>2014</year>
          ), https://www.nst.ei.tum.de/fileadmin/w00bqs/www/publications/as/2014SSHS-NeuralComputingArchitectures.pdf
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Master</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Furtek</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>A new computing architecture for Big Data and AI applications (</article-title>
          <year>2017</year>
          ), http://impactvc.com
          <article-title>/a-new-computing-architecture-for-big-dataand-ai-applications/</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Nemanich</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cooke</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rushtom</surname>
            ,
            <given-names>J.N.:</given-names>
          </string-name>
          <article-title>SequenceL: Transparency and Multi-core Parallelisms pp</article-title>
          .
          <fpage>45</fpage>
          -
          <lpage>52</lpage>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16. Object Management Group,
          <article-title>The: UML Profile for MARTE (</article-title>
          <year>2011</year>
          ), http://www.omg.org/spec/MARTE/1.1/
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. OpenFog Consortium Architecture Working Group:
          <article-title>OpenFog Architecture Overview (</article-title>
          <year>2016</year>
          ), https://www.openfogconsortium.org/wpcontent/uploads/OpenFog-Architecture-Overview-WP-2
          <article-title>-2016</article-title>
          .pdf
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Solinas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , et al.:
          <article-title>The TERAFLUX Project: Exploiting the DataFlow Paradigm in Next Generation Teradevices</article-title>
          .
          <source>In: 2013 Euromicro Conference on Digital System Design</source>
          . pp.
          <fpage>272</fpage>
          -
          <lpage>279</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Wolfram</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>An Elementary Introduction to the Wolfram Language - Second Edition</article-title>
          . Wolfram
          <string-name>
            <surname>Media</surname>
          </string-name>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          22.
          <string-name>
            <surname>Лукин</surname>
          </string-name>
          , Н. А.:
          <article-title>Функционально-ориентированные процессоры с однородной архитектурой для реализации алгоритмов бортовых систем управления</article-title>
          . In:
          <article-title>Доклады пятой международной конференции ¾Параллельные вычисления и задачи управления¿</article-title>
          . pp.
          <fpage>1177</fpage>
          -
          <lpage>1185</lpage>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          23.
          <string-name>
            <surname>Лукин</surname>
          </string-name>
          , Н. А.,
          <string-name>
            <surname>Филимонов</surname>
          </string-name>
          , А. Ю.,
          <string-name>
            <surname>Тришин</surname>
          </string-name>
          , В. Н.:
          <article-title>Облачная среда программирования однородных вычислительных систем</article-title>
          .
          <source>In: Языки программирования и компиляторы 2017</source>
          . pp.
          <fpage>181</fpage>
          -
          <lpage>184</lpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>