Участник:VolkovNikita94: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
м
(Удалил разделы, перенесенные в обсуждение.)
 
(не показана 41 промежуточная версия этого же участника)
Строка 1: Строка 1:
<center>
 
 
<tabs>
 
<tabs>
<tab name="n=3">
+
 
 +
<tab name="Пример 1">
 
{{#widget:Algoviewer
 
{{#widget:Algoviewer
|url=Givens/giv3/Algo_view_givens3.html
+
|url=XML_example_001/Example_001.html
|width=1300
+
|width=1200
 
|height=800
 
|height=800
 
|border=1
 
|border=1
 
}}
 
}}
 +
<br>
 +
Чисто последовательная структура в 2D-представлении (последовательное суммирование)
 +
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
int seqSum(const std::vector<int>& _src)
 +
{
 +
  int resSum = 0;
 +
  for (int srcId = 0; srcId < _src.size(); ++srcId)
 +
  {
 +
      resSum += _src[srcId];
 +
  }
 +
  return resSum;
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="1" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <group id="1" num_or_parts="1" num_oper="1">
 +
              <or_part id="0" num_and_parts="4">
 +
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
 +
                  <statement id="0" num_inputs="3">
 +
                    <input id="0" num_solutions="0"/>
 +
                    <input id="1" num_solutions="3">
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1]]></coordinate>
 +
                              <coordinate><![CDATA[i2-1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+2<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1-1]]></coordinate>
 +
                              <coordinate><![CDATA[n]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-n+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                              <condition><![CDATA[i1-1<=0]]></condition>
 +
                          </altarea>
 +
                      </solution>
 +
                    </input>
 +
                    <input id="2" num_solutions="0"/>
 +
                  </statement>
 +
              </or_part>
 +
            </group>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "2">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
 +
<vertex condition = "(j == 1)" type = "0">
 +
<in src = “i – 1, N”></in>
 +
</vertex>
 +
<vertex condition = "(j > 1)" type = "0">
 +
<in src = “i, j - 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 
</tab>
 
</tab>
<tab name="n=4">
+
 
 +
<tab name="Пример 2">
 
{{#widget:Algoviewer
 
{{#widget:Algoviewer
|url=Givens/giv4/Algo_view_givens4.html
+
|url=XML_example_002/Example_002.html
|width=1300
+
|width=1200
 
|height=800
 
|height=800
 
|border=1
 
|border=1
 
}}
 
}}
 +
<br>
 +
Набор одномерных последовательных структур, независимых между собой - 2D вариант
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
void seqParSum(const std::vector<std::vector<int> >& _src, std::vector<int>& _res)
 +
{
 +
  if (_src.size() != _res.size())
 +
      return;
 +
 +
  for (int srcGrpId = 0; srcGrpId < _src.size(); ++srcGrpId)
 +
  {
 +
      for (int srcElId = 0; srcElId < _src[srcGrpId].size(); ++srcElId )
 +
      {
 +
        _res[srcGrpId] += _src[srcGrpId][srcElId];
 +
      }
 +
  }
 +
  return;
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="1" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <group id="1" num_or_parts="1" num_oper="1">
 +
              <or_part id="0" num_and_parts="4">
 +
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
 +
                  <statement id="0" num_inputs="3">
 +
                    <input id="0" num_solutions="0"/>
 +
                    <input id="1" num_solutions="3">
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1]]></coordinate>
 +
                              <coordinate><![CDATA[i2-1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="0">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+2<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                          </altarea>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-n+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                              <condition><![CDATA[i1-1<=0]]></condition>
 +
                          </altarea>
 +
                        </solution>
 +
                    </input>
 +
                    <input id="2" num_solutions="0"/>
 +
                  </statement>
 +
              </or_part>
 +
            </group>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "2">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
 +
<vertex condition = "" type = "0">
 +
<in src = “i, j - 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 
</tab>
 
</tab>
 +
 +
<tab name="Пример 3">
 +
{{#widget:Algoviewer
 +
|url=XML_example_003/Example_003.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Двумерная структура со скошенным параллелизмом
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
int accumSum(int** _src, int _nCol, int _nRow)
 +
{
 +
  for (int rowId = 0; rowId < _nRow; ++rowId)
 +
  {
 +
      for (int colId = 0; colId < _nCol; ++colId)
 +
      {
 +
        _src[rowId][colId] += _src[rowId][colId == 0 ? colId : colId - 1];
 +
        _src[rowId][colId] += _src[rowId == 0 ? rowId : rowId - 1][colId];
 +
      }
 +
  }
 +
  return _src[_nRow - 1][_nCol - 1];
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="1" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <group id="1" num_or_parts="1" num_oper="1">
 +
              <or_part id="0" num_and_parts="4">
 +
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
 +
                  <statement id="0" num_inputs="3">
 +
                    <input id="0" num_solutions="0"/>
 +
                    <input id="1" num_solutions="3">
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1]]></coordinate>
 +
                              <coordinate><![CDATA[i2-1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+2<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1-1]]></coordinate>
 +
                              <coordinate><![CDATA[i2]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-n+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                              <condition><![CDATA[i1-1<=0]]></condition>
 +
                          </altarea>
 +
                        </solution>
 +
                    </input>
 +
                    <input id="2" num_solutions="0"/>
 +
                  </statement>
 +
              </or_part>
 +
            </group>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "2">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
 +
<vertex condition = "" type = "0">
 +
<in src = “i, j - 1”></in>
 +
<in src = “i - 1, j”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 4">
 +
{{#widget:Algoviewer
 +
|url=XML_example_004/Example_004.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Двумерная структура со скошенным параллелизмом и скошенной передачей данных
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
int accumSum(int** _src, int _nCol, int _nRow)
 +
{
 +
  for (int rowId = 0; rowId < _nRow; ++rowId)
 +
  {
 +
      for (int colId = 0; colId < _nCol; ++colId)
 +
      {
 +
        _src[rowId][colId] += _src[(rowId == 0 && colId < 2) ? rowId : rowId - 1][(rowId != 0 && colId > 1) ? colId : colId - 2];
 +
        _src[rowId][colId] += _src[rowId == 0 ? rowId : rowId - 1][colId];
 +
      }
 +
  }
 +
  return _src[_nRow - 1][_nCol - 1];
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="1" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <group id="1" num_or_parts="1" num_oper="1">
 +
              <or_part id="0" num_and_parts="4">
 +
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
 +
                  <statement id="0" num_inputs="3">
 +
                    <input id="0" num_solutions="0"/>
 +
                    <input id="1" num_solutions="3">
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1]]></coordinate>
 +
                              <coordinate><![CDATA[i2-1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+3<=0]]></condition>
 +
                              <condition><![CDATA[-i2+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1-2]]></coordinate>
 +
                              <coordinate><![CDATA[i2-1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-n+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                          </altarea>
 +
                        </solution>
 +
                    </input>
 +
                    <input id="2" num_solutions="0"/>
 +
                  </statement>
 +
              </or_part>
 +
            </group>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "2">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
 +
<vertex condition = "" type = "0">
 +
<in src = “i, j - 1”></in>
 +
<in src = “i - 2, j - 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 5">
 +
{{#widget:Algoviewer
 +
|url=XML_example_005/Example_005.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Двумерная структура с квадратным параллелизмом и массовыми рассылками по каждому измерению
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
int accumSum(int** _src, int _nCol, int _nRow)
 +
{
 +
  for (int rowId = 0; rowId < _nRow; ++rowId)
 +
  {
 +
      for (int colId = 0; colId < _nCol; ++colId)
 +
      {
 +
        _src[rowId][colId] += _src[rowId][colId == 0 ? colId : colId - 1];
 +
        _src[rowId][colId] += _src[rowId == 0 ? rowId : rowId - 1][colId];
 +
        _src[rowId][colId] += _src[rowId][0];
 +
        _src[rowId][colId] += _src[0][colId];
 +
      }
 +
  }
 +
  return _src[_nRow - 1][_nCol - 1];
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="1" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <group id="1" num_or_parts="1" num_oper="1">
 +
              <or_part id="0" num_and_parts="4">
 +
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
 +
                  <statement id="0" num_inputs="3">
 +
                    <input id="0" num_solutions="0"/>
 +
                    <input id="1" num_solutions="5">
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1]]></coordinate>
 +
                              <coordinate><![CDATA[i2-1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+2<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1-1]]></coordinate>
 +
                              <coordinate><![CDATA[i2]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+3<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[i1]]></coordinate>
 +
                              <coordinate><![CDATA[1]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[i2-n<=0]]></condition>
 +
                              <condition><![CDATA[-n+2<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+3<=0]]></condition>
 +
                          </altarea>
 +
                          <dependency>
 +
                              <coordinate><![CDATA[1]]></coordinate>
 +
                              <coordinate><![CDATA[i2]]></coordinate>
 +
                          </dependency>
 +
                        </solution>
 +
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                          <altarea num_conditions="5">
 +
                              <condition><![CDATA[-n+1<=0]]></condition>
 +
                              <condition><![CDATA[-i2+1<=0]]></condition>
 +
                              <condition><![CDATA[-i1+1<=0]]></condition>
 +
                              <condition><![CDATA[i2-1<=0]]></condition>
 +
                              <condition><![CDATA[i1-n<=0]]></condition>
 +
                          </altarea>
 +
                        </solution>
 +
                    </input>
 +
                    <input id="2" num_solutions="0"/>
 +
                  </statement>
 +
              </or_part>
 +
            </group>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "2">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
<vertex condition = "" type = "0">
 +
<in src = “i, j - 1”></in>
 +
<in src = “i - 1, j”></in>
 +
<in src = “1, j”></in>
 +
<in src = “i, 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 6">
 +
{{#widget:Algoviewer
 +
|url=XML_example_006/Example_006.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Набор независимых последовательно-параллельных 2D-структур с массовой рассылкой данных в каждой
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
void accumSum(int*** _src, int _nCol, int _nRow, int _nLayer)
 +
{
 +
  for (int layerId = 0; layerId < _nLayer; ++layerId)
 +
  {
 +
      for (int rowId = 0; rowId < _nRow; ++rowId)
 +
      {
 +
        for (int colId = 0; colId < _nCol; ++colId)
 +
        {
 +
            _src[layerId][rowId][colId] += _src[layerId][rowId == 0 ? rowId : rowId - 1][colId == 0 ? colId : 0];
 +
            _src[layerId][rowId][colId] += _src[layerId][rowId == 0 ? rowId : rowId - 1][colId];
 +
        }
 +
      } 
 +
  }
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="2" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <ext_param name="m"/>
 +
        <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <loop>
 +
              <group id="1" num_or_parts="1" num_oper="1">
 +
                  <or_part id="0" num_and_parts="6">
 +
                    <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                    <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                    <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                    <and_part id="3"><![CDATA[i2<=m]]></and_part>
 +
                    <and_part id="4"><![CDATA[i3>=0]]></and_part>
 +
                    <and_part id="5"><![CDATA[i3<=n-1]]></and_part>
 +
                        <input id="0" num_solutions="0"/>
 +
                        <input id="1" num_solutions="3">
 +
                          <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="3">
 +
                              <altarea num_conditions="7">
 +
                                <condition><![CDATA[-m+2<=0]]></condition>
 +
                                <condition><![CDATA[i1-n<=0]]></condition>
 +
                                <condition><![CDATA[i3-n+1<=0]]></condition>
 +
                                <condition><![CDATA[-i2+2<=0]]></condition>
 +
                                <condition><![CDATA[i2<=m]]></condition>
 +
                                <condition><![CDATA[-i1+1<=0]]></condition>
 +
                                <condition><![CDATA[-i3<=0]]></condition>
 +
                              </altarea>
 +
                              <dependency>
 +
                                <coordinate><![CDATA[i1]]></coordinate>
 +
                                <coordinate><![CDATA[i2-1]]></coordinate>
 +
                                <coordinate><![CDATA[i3]]></coordinate>
 +
                              </dependency>
 +
                          </solution>
 +
                          <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="3">
 +
                              <altarea num_conditions="7">
 +
                                <condition><![CDATA[-m+2<=0]]></condition>
 +
                                <condition><![CDATA[i1-n<=0]]></condition>
 +
                                <condition><![CDATA[i3-n+1<=0]]></condition>
 +
                                <condition><![CDATA[-i2+2<=0]]></condition>
 +
                                <condition><![CDATA[i2<=m]]></condition>
 +
                                <condition><![CDATA[-i1+1<=0]]></condition>
 +
                                <condition><![CDATA[-i3<=0]]></condition>
 +
                              </altarea>
 +
                              <dependency>
 +
                                <coordinate><![CDATA[1]]></coordinate>
 +
                                <coordinate><![CDATA[i2-1]]></coordinate>
 +
                                <coordinate><![CDATA[i3]]></coordinate>
 +
                              </dependency>
 +
                          </solution>
 +
                          <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                              <altarea num_conditions="6">
 +
                                <condition><![CDATA[i2-1<=0]]></condition>
 +
                                <condition><![CDATA[i2-1>=0]]></condition>
 +
                                <condition><![CDATA[-i1+1<=0]]></condition>
 +
                                <condition><![CDATA[-i3<=0]]></condition>
 +
                                <condition><![CDATA[i1-n<=0]]></condition>
 +
                                <condition><![CDATA[i3-n+1<=0]]></condition>
 +
                              </altarea>
 +
                          </solution>
 +
                        </input>
 +
                        <input id="2" num_solutions="0"/>
 +
                    </statement>
 +
                  </or_part>
 +
              </group>
 +
            </loop>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
<arg name = "k" val = "1..N"></arg>
 +
<vertex condition = "" type = "0">
 +
<in src = “i, j – 1, k”></in>
 +
<in src = “1, j - 1, k”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 7">
 +
{{#widget:Algoviewer
 +
|url=XML_example_007/Example_007.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Набор одномерных последовательных структур, независимых между собой - 3D вариант
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
C++ реализация:
 +
<div class="mw-collapsible-content">
 +
<source lang = "c++">
 +
void accumSum(int*** _src, int _nCol, int _nRow, int _nLayer)
 +
{
 +
  for (int layerId = 0; layerId < _nLayer; ++layerId)
 +
  {
 +
      for (int rowId = 0; rowId < _nRow; ++rowId)
 +
      {
 +
        for (int colId = 0; colId < _nCol; ++colId)
 +
        {
 +
            _src[layerId][rowId][colId] += _src[layerId][rowId == 0 ? rowId : rowId - 1][colId];
 +
        }
 +
      } 
 +
  }
 +
}
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Кодировка в XML:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<algograph version="0.0.1">
 +
  <algorithm num_ext_params="2" num_groups="2">
 +
      <ext_param name="n"/>
 +
      <ext_param name="m"/>
 +
      <group id="0" num_or_parts="1" num_oper="1">
 +
        <or_part id="0" num_and_parts="1">
 +
            <and_part id="0"><![CDATA[]]></and_part>
 +
            <statement id="0" num_inputs="1">
 +
              <input id="0" num_solutions="0"/>
 +
            </statement>
 +
        </or_part>
 +
      </group>
 +
      <loop>
 +
        <loop>
 +
            <loop>
 +
              <group id="1" num_or_parts="1" num_oper="1">
 +
                  <or_part id="0" num_and_parts="6">
 +
                    <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
 +
                    <and_part id="1"><![CDATA[i1<=n]]></and_part>
 +
                    <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
 +
                    <and_part id="3"><![CDATA[i2<=m]]></and_part>
 +
                    <and_part id="4"><![CDATA[i3>=0]]></and_part>
 +
                    <and_part id="5"><![CDATA[i3<=n-1]]></and_part>
 +
                    <statement id="0" num_inputs="3">
 +
                        <input id="0" num_solutions="0"/>
 +
                        <input id="1" num_solutions="2">
 +
                          <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="3">
 +
                              <altarea num_conditions="7">
 +
                                <condition><![CDATA[-m+2<=0]]></condition>
 +
                                <condition><![CDATA[i1-n<=0]]></condition>
 +
                                <condition><![CDATA[i3-n+1<=0]]></condition>
 +
                                <condition><![CDATA[-i2+1<=0]]></condition>
 +
                                <condition><![CDATA[i2+1<=m]]></condition>
 +
                                <condition><![CDATA[-i1+1<=0]]></condition>
 +
                                <condition><![CDATA[-i3<=0]]></condition>
 +
                              </altarea>
 +
                              <dependency>
 +
                                <coordinate><![CDATA[i1]]></coordinate>
 +
                                <coordinate><![CDATA[i2+1]]></coordinate>
 +
                                <coordinate><![CDATA[i3]]></coordinate>
 +
                              </dependency>
 +
                          </solution>
 +
                          <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
 +
                              <altarea num_conditions="6">
 +
                                <condition><![CDATA[i2-m<=0]]></condition>
 +
                                <condition><![CDATA[i2-m>=0]]></condition>
 +
                                <condition><![CDATA[-i1+1<=0]]></condition>
 +
                                <condition><![CDATA[-i3<=0]]></condition>
 +
                                <condition><![CDATA[i1-n<=0]]></condition>
 +
                                <condition><![CDATA[i3-n+1<=0]]></condition>
 +
                              </altarea>
 +
                          </solution>
 +
                        </input>
 +
                        <input id="2" num_solutions="0"/>
 +
                    </statement>
 +
                  </or_part>
 +
              </group>
 +
            </loop>
 +
        </loop>
 +
      </loop>
 +
  </algorithm>
 +
</algograph>
 +
</source>
 +
</div>
 +
</div>
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
<arg name = "k" val = "1..N"></arg>
 +
 +
<vertex condition = "" type = "0">
 +
<in src = “i, j – 1, k”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 8">
 +
{{#widget:Algoviewer
 +
|url=XML_example_008/Example_008.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Пример массовой рассылки данных в 2D-структуре
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "2">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..2"></arg>
 +
 +
<vertex condition = "(j == 1) && (i == 1)" type = "0">
 +
</vertex>
 +
<vertex condition = "(j > 1)" type = "0">
 +
<in src = “1, 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 10">
 +
{{#widget:Algoviewer
 +
|url=XML_example_010/Example_010.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Последовательный набор 3D-структур, содержащих скошенный параллелизм
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block id = "0" dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
        <arg name = "k" val = "1..N"></arg>
 +
<vertex condition = "" type = "0">
 +
<in src = "i - 1, j, k"></in>
 +
<in src = "i, j – 1, k"></in>
 +
<in src = "i, j, k - 1"></in>
 +
</vertex>
 +
  </block>
 +
  <block id = "1" dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..2"></arg>
 +
        <arg name = "k" val = "1..N"></arg>
 +
<vertex condition = "" type = "0">
 +
<in bsrc = "0" src = "i, j, k"></in>
 +
<in src = "i - 1, j, k"></in>
 +
<in src = "i, j – 1, k"></in>
 +
<in src = "i, j, k - 1"></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 11">
 +
{{#widget:Algoviewer
 +
|url=XML_example_011/Example_011.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Пример массовой рассылки данных в 3D-структуре
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
        <arg name = "k" val = "1..2"></arg>
 +
<vertex condition = "(i == 1) && (j == 1) && (k == 1)" type = "0">
 +
</vertex>
 +
<vertex condition = "(i > 1) && (j > 1) && (k > 1)" type = "0">
 +
<in src = “1, 1, 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 12">
 +
{{#widget:Algoviewer
 +
|url=XML_example_012/Example_012.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Пример 3D-структуры с различными видами скошенного параллелизма
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
  </params>
 +
  <block dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..N"></arg>
 +
        <arg name = "k" val = "1..2"></arg>
 +
<vertex condition = "k == 1" type = "0">
 +
<in src = “i, j – 1”></in>
 +
<in src = “i - 1, j”></in>
 +
</vertex>
 +
<vertex condition = "k > 1" type = "0">
 +
<in src = “i, j, 1”></in>
 +
<in src = “i, j – 1”></in>
 +
<in src = “i - 1, j - 1”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 +
<tab name="Пример 13">
 +
{{#widget:Algoviewer
 +
|url=XML_example_013/Example_013.html
 +
|width=1200
 +
|height=800
 +
|border=1
 +
}}
 +
<br>
 +
Последовательно-параллельное перемножение матриц
 +
<div class="collapser mw-collapsible mw-collapsed" style="width:1200px; overflow:auto;">
 +
Новая разметка:
 +
<div class="mw-collapsible-content">
 +
<source lang = "xml">
 +
<algo>
 +
  <params>
 +
<param name = "N" type = "int"></param>
 +
<param name = "P" type = "int"></param>
 +
<param name = "Q" type = "int"></param>
 +
  </params>
 +
  <block dims = "3">
 +
<arg name = "i" val = "1..N"></arg>
 +
<arg name = "j" val = "1..P"></arg>
 +
        <arg name = "k" val = "1..Q"></arg>
 +
<vertex condition = "(i > 1) && (j > 1)" type = "0">
 +
<in src = “i, j – 1”></in>
 +
<in src = “i - 1, j”></in>
 +
<in src = “i, j, k -1”></in>
 +
</vertex>
 +
<vertex condition = "(i > 1) || (j > 1)" type = "0">
 +
<in src = “i, j – 1”></in>
 +
<in src = “i - 1, j”></in>
 +
</vertex>
 +
  </block>
 +
</algo>
 +
</source>
 +
</div>
 +
</div>
 +
</tab>
 +
 
</tabs>
 
</tabs>
</center>
 

Текущая версия на 20:02, 28 июля 2020


Чисто последовательная структура в 2D-представлении (последовательное суммирование)

C++ реализация:

int seqSum(const std::vector<int>& _src)
{
   int resSum = 0;
   for (int srcId = 0; srcId < _src.size(); ++srcId)
   {
      resSum += _src[srcId];
   }
   return resSum;
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="1" num_groups="2">
      <ext_param name="n"/>
      <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <group id="1" num_or_parts="1" num_oper="1">
               <or_part id="0" num_and_parts="4">
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
                  <statement id="0" num_inputs="3">
                     <input id="0" num_solutions="0"/>
                     <input id="1" num_solutions="3">
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[-i2+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1]]></coordinate>
                              <coordinate><![CDATA[i2-1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+2<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1-1]]></coordinate>
                              <coordinate><![CDATA[n]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-n+1<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                              <condition><![CDATA[i1-1<=0]]></condition>
                           </altarea>
                       </solution>
                     </input>
                     <input id="2" num_solutions="0"/>
                  </statement>
               </or_part>
            </group>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "2">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>

	<vertex condition = "(j == 1)" type = "0">
		<in src = “i  1, N”></in>
	</vertex>
	<vertex condition = "(j > 1)" type = "0">
		<in src = “i, j - 1”></in>
	</vertex>
   </block>
</algo>


Набор одномерных последовательных структур, независимых между собой - 2D вариант

C++ реализация:

void seqParSum(const std::vector<std::vector<int> >& _src, std::vector<int>& _res)
{
   if (_src.size() != _res.size())
      return;

   for (int srcGrpId = 0; srcGrpId < _src.size(); ++srcGrpId)
   {
      for (int srcElId = 0; srcElId < _src[srcGrpId].size(); ++srcElId )
      {
         _res[srcGrpId] += _src[srcGrpId][srcElId];
      }
   }
   return;
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="1" num_groups="2">
      <ext_param name="n"/>
      <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <group id="1" num_or_parts="1" num_oper="1">
               <or_part id="0" num_and_parts="4">
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
                  <statement id="0" num_inputs="3">
                     <input id="0" num_solutions="0"/>
                     <input id="1" num_solutions="3">
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[-i2+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1]]></coordinate>
                              <coordinate><![CDATA[i2-1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="0">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+2<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                           </altarea>
                        </solution>
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-n+1<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                              <condition><![CDATA[i1-1<=0]]></condition>
                           </altarea>
                        </solution>
                     </input>
                     <input id="2" num_solutions="0"/>
                  </statement>
               </or_part>
            </group>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "2">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>

	<vertex condition = "" type = "0">
		<in src = “i, j - 1”></in>
	</vertex>
   </block>
</algo>


Двумерная структура со скошенным параллелизмом

C++ реализация:

int accumSum(int** _src, int _nCol, int _nRow)
{
   for (int rowId = 0; rowId < _nRow; ++rowId)
   {
      for (int colId = 0; colId < _nCol; ++colId)
      {
         _src[rowId][colId] += _src[rowId][colId == 0 ? colId : colId - 1];
         _src[rowId][colId] += _src[rowId == 0 ? rowId : rowId - 1][colId];
      }
   }
   return _src[_nRow - 1][_nCol - 1];
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="1" num_groups="2">
      <ext_param name="n"/>
      <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <group id="1" num_or_parts="1" num_oper="1">
               <or_part id="0" num_and_parts="4">
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
                  <statement id="0" num_inputs="3">
                     <input id="0" num_solutions="0"/>
                     <input id="1" num_solutions="3">
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[-i2+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1]]></coordinate>
                              <coordinate><![CDATA[i2-1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+2<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1-1]]></coordinate>
                              <coordinate><![CDATA[i2]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-n+1<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                              <condition><![CDATA[i1-1<=0]]></condition>
                           </altarea>
                        </solution>
                     </input>
                     <input id="2" num_solutions="0"/>
                  </statement>
               </or_part>
            </group>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "2">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>

	<vertex condition = "" type = "0">
		<in src = “i, j - 1”></in>
		<in src = “i - 1, j”></in>
	</vertex>
   </block>
</algo>


Двумерная структура со скошенным параллелизмом и скошенной передачей данных

C++ реализация:

int accumSum(int** _src, int _nCol, int _nRow)
{
   for (int rowId = 0; rowId < _nRow; ++rowId)
   {
      for (int colId = 0; colId < _nCol; ++colId)
      {
         _src[rowId][colId] += _src[(rowId == 0 && colId < 2) ? rowId : rowId - 1][(rowId != 0 && colId > 1) ? colId : colId - 2];
         _src[rowId][colId] += _src[rowId == 0 ? rowId : rowId - 1][colId];
      }
   }
   return _src[_nRow - 1][_nCol - 1];
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="1" num_groups="2">
      <ext_param name="n"/>
      <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <group id="1" num_or_parts="1" num_oper="1">
               <or_part id="0" num_and_parts="4">
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
                  <statement id="0" num_inputs="3">
                     <input id="0" num_solutions="0"/>
                     <input id="1" num_solutions="3">
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[-i2+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1]]></coordinate>
                              <coordinate><![CDATA[i2-1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+3<=0]]></condition>
                              <condition><![CDATA[-i2+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1-2]]></coordinate>
                              <coordinate><![CDATA[i2-1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-n+1<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                           </altarea>
                        </solution>
                     </input>
                     <input id="2" num_solutions="0"/>
                  </statement>
               </or_part>
            </group>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "2">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>

	<vertex condition = "" type = "0">
		<in src = “i, j - 1”></in>
		<in src = “i - 2, j - 1”></in>
	</vertex>
   </block>
</algo>


Двумерная структура с квадратным параллелизмом и массовыми рассылками по каждому измерению

C++ реализация:

int accumSum(int** _src, int _nCol, int _nRow)
{
   for (int rowId = 0; rowId < _nRow; ++rowId)
   {
      for (int colId = 0; colId < _nCol; ++colId)
      {
         _src[rowId][colId] += _src[rowId][colId == 0 ? colId : colId - 1];
         _src[rowId][colId] += _src[rowId == 0 ? rowId : rowId - 1][colId];
         _src[rowId][colId] += _src[rowId][0];
         _src[rowId][colId] += _src[0][colId];
      }
   }
   return _src[_nRow - 1][_nCol - 1];
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="1" num_groups="2">
      <ext_param name="n"/>
      <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <group id="1" num_or_parts="1" num_oper="1">
               <or_part id="0" num_and_parts="4">
                  <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                  <and_part id="1"><![CDATA[i1<=n]]></and_part>
                  <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                  <and_part id="3"><![CDATA[i2<=n]]></and_part>
                  <statement id="0" num_inputs="3">
                     <input id="0" num_solutions="0"/>
                     <input id="1" num_solutions="5">
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[-i2+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1]]></coordinate>
                              <coordinate><![CDATA[i2-1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+2<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1-1]]></coordinate>
                              <coordinate><![CDATA[i2]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[-i2+3<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[i1]]></coordinate>
                              <coordinate><![CDATA[1]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="2">
                           <altarea num_conditions="5">
                              <condition><![CDATA[i2-n<=0]]></condition>
                              <condition><![CDATA[-n+2<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+3<=0]]></condition>
                           </altarea>
                           <dependency>
                              <coordinate><![CDATA[1]]></coordinate>
                              <coordinate><![CDATA[i2]]></coordinate>
                           </dependency>
                        </solution>
                        <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                           <altarea num_conditions="5">
                              <condition><![CDATA[-n+1<=0]]></condition>
                              <condition><![CDATA[-i2+1<=0]]></condition>
                              <condition><![CDATA[-i1+1<=0]]></condition>
                              <condition><![CDATA[i2-1<=0]]></condition>
                              <condition><![CDATA[i1-n<=0]]></condition>
                           </altarea>
                        </solution>
                     </input>
                     <input id="2" num_solutions="0"/>
                  </statement>
               </or_part>
            </group>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "2">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>
	<vertex condition = "" type = "0">
		<in src = “i, j - 1”></in>
		<in src = “i - 1, j”></in>
		<in src = “1, j”></in>
		<in src = “i, 1”></in>
	</vertex>
   </block>
</algo>


Набор независимых последовательно-параллельных 2D-структур с массовой рассылкой данных в каждой

C++ реализация:

void accumSum(int*** _src, int _nCol, int _nRow, int _nLayer)
{
   for (int layerId = 0; layerId < _nLayer; ++layerId)
   {
      for (int rowId = 0; rowId < _nRow; ++rowId)
      {
         for (int colId = 0; colId < _nCol; ++colId)
         {
            _src[layerId][rowId][colId] += _src[layerId][rowId == 0 ? rowId : rowId - 1][colId == 0 ? colId : 0];
            _src[layerId][rowId][colId] += _src[layerId][rowId == 0 ? rowId : rowId - 1][colId];
         }
      }   
   }
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="2" num_groups="2">
      <ext_param name="n"/>
      <ext_param name="m"/>
         <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <loop>
               <group id="1" num_or_parts="1" num_oper="1">
                  <or_part id="0" num_and_parts="6">
                     <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                     <and_part id="1"><![CDATA[i1<=n]]></and_part>
                     <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                     <and_part id="3"><![CDATA[i2<=m]]></and_part>
                     <and_part id="4"><![CDATA[i3>=0]]></and_part>
                     <and_part id="5"><![CDATA[i3<=n-1]]></and_part>
                        <input id="0" num_solutions="0"/>
                        <input id="1" num_solutions="3">
                           <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="3">
                              <altarea num_conditions="7">
                                 <condition><![CDATA[-m+2<=0]]></condition>
                                 <condition><![CDATA[i1-n<=0]]></condition>
                                 <condition><![CDATA[i3-n+1<=0]]></condition>
                                 <condition><![CDATA[-i2+2<=0]]></condition>
                                 <condition><![CDATA[i2<=m]]></condition>
                                 <condition><![CDATA[-i1+1<=0]]></condition>
                                 <condition><![CDATA[-i3<=0]]></condition>
                              </altarea>
                              <dependency>
                                 <coordinate><![CDATA[i1]]></coordinate>
                                 <coordinate><![CDATA[i2-1]]></coordinate>
                                 <coordinate><![CDATA[i3]]></coordinate>
                              </dependency>
                           </solution>
                           <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="3">
                              <altarea num_conditions="7">
                                 <condition><![CDATA[-m+2<=0]]></condition>
                                 <condition><![CDATA[i1-n<=0]]></condition>
                                 <condition><![CDATA[i3-n+1<=0]]></condition>
                                 <condition><![CDATA[-i2+2<=0]]></condition>
                                 <condition><![CDATA[i2<=m]]></condition>
                                 <condition><![CDATA[-i1+1<=0]]></condition>
                                 <condition><![CDATA[-i3<=0]]></condition>
                              </altarea>
                              <dependency>
                                 <coordinate><![CDATA[1]]></coordinate>
                                 <coordinate><![CDATA[i2-1]]></coordinate>
                                 <coordinate><![CDATA[i3]]></coordinate>
                              </dependency>
                           </solution>									
                           <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                              <altarea num_conditions="6">
                                 <condition><![CDATA[i2-1<=0]]></condition>
                                 <condition><![CDATA[i2-1>=0]]></condition>
                                 <condition><![CDATA[-i1+1<=0]]></condition>
                                 <condition><![CDATA[-i3<=0]]></condition>
                                 <condition><![CDATA[i1-n<=0]]></condition>
                                 <condition><![CDATA[i3-n+1<=0]]></condition>
                              </altarea>
                           </solution>
                        </input>
                        <input id="2" num_solutions="0"/>
                     </statement>
                  </or_part>
               </group>
            </loop>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>
	<arg name = "k" val = "1..N"></arg>
	<vertex condition = "" type = "0">
		<in src = “i, j  1, k”></in>
		<in src = “1, j - 1, k”></in>
	</vertex>
   </block>
</algo>


Набор одномерных последовательных структур, независимых между собой - 3D вариант

C++ реализация:

void accumSum(int*** _src, int _nCol, int _nRow, int _nLayer)
{
   for (int layerId = 0; layerId < _nLayer; ++layerId)
   {
      for (int rowId = 0; rowId < _nRow; ++rowId)
      {
         for (int colId = 0; colId < _nCol; ++colId)
         {
            _src[layerId][rowId][colId] += _src[layerId][rowId == 0 ? rowId : rowId - 1][colId];
         }
      }   
   }
}

Кодировка в XML:

<?xml version="1.0" encoding="UTF-8"?>
<algograph version="0.0.1">
   <algorithm num_ext_params="2" num_groups="2">
      <ext_param name="n"/>
      <ext_param name="m"/>
      <group id="0" num_or_parts="1" num_oper="1">
         <or_part id="0" num_and_parts="1">
            <and_part id="0"><![CDATA[]]></and_part>
            <statement id="0" num_inputs="1">
               <input id="0" num_solutions="0"/>
            </statement>
         </or_part>
      </group>
      <loop>
         <loop>
            <loop>
               <group id="1" num_or_parts="1" num_oper="1">
                  <or_part id="0" num_and_parts="6">
                     <and_part id="0"><![CDATA[-i1<=-1]]></and_part>
                     <and_part id="1"><![CDATA[i1<=n]]></and_part>
                     <and_part id="2"><![CDATA[-i2<=-1]]></and_part>
                     <and_part id="3"><![CDATA[i2<=m]]></and_part>
                     <and_part id="4"><![CDATA[i3>=0]]></and_part>
                     <and_part id="5"><![CDATA[i3<=n-1]]></and_part>
                     <statement id="0" num_inputs="3">
                        <input id="0" num_solutions="0"/>
                        <input id="1" num_solutions="2">
                           <solution num_altareas="1" group_id="1" or_part_id="0" statement_id="0" dimsolut="3">
                              <altarea num_conditions="7">
                                 <condition><![CDATA[-m+2<=0]]></condition>
                                 <condition><![CDATA[i1-n<=0]]></condition>
                                 <condition><![CDATA[i3-n+1<=0]]></condition>
                                 <condition><![CDATA[-i2+1<=0]]></condition>
                                 <condition><![CDATA[i2+1<=m]]></condition>
                                 <condition><![CDATA[-i1+1<=0]]></condition>
                                 <condition><![CDATA[-i3<=0]]></condition>
                              </altarea>
                              <dependency>
                                 <coordinate><![CDATA[i1]]></coordinate>
                                 <coordinate><![CDATA[i2+1]]></coordinate>
                                 <coordinate><![CDATA[i3]]></coordinate>
                              </dependency>
                           </solution>
                           <solution num_altareas="1" group_id="0" or_part_id="0" statement_id="0" dimsolut="0">
                              <altarea num_conditions="6">
                                 <condition><![CDATA[i2-m<=0]]></condition>
                                 <condition><![CDATA[i2-m>=0]]></condition>
                                 <condition><![CDATA[-i1+1<=0]]></condition>
                                 <condition><![CDATA[-i3<=0]]></condition>
                                 <condition><![CDATA[i1-n<=0]]></condition>
                                 <condition><![CDATA[i3-n+1<=0]]></condition>
                              </altarea>
                           </solution>
                        </input>
                        <input id="2" num_solutions="0"/>
                     </statement>
                  </or_part>
               </group>
            </loop>
         </loop>
      </loop>
   </algorithm>
</algograph>

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>
	<arg name = "k" val = "1..N"></arg>

	<vertex condition = "" type = "0">
		<in src = “i, j  1, k”></in>
	</vertex>
   </block>
</algo>


Пример массовой рассылки данных в 2D-структуре

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "2">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..2"></arg>

	<vertex condition = "(j == 1) && (i == 1)" type = "0">
	</vertex>
	<vertex condition = "(j > 1)" type = "0">
		<in src = “1, 1”></in>
	</vertex>
   </block>
</algo>


Последовательный набор 3D-структур, содержащих скошенный параллелизм

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block id = "0" dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>
        <arg name = "k" val = "1..N"></arg>
	<vertex condition = "" type = "0">
		<in src = "i - 1, j, k"></in>
		<in src = "i, j – 1, k"></in>
		<in src = "i, j, k - 1"></in>
	</vertex>
   </block>
   <block id = "1" dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..2"></arg>
        <arg name = "k" val = "1..N"></arg>
	<vertex condition = "" type = "0">
		<in bsrc = "0" src = "i, j, k"></in>
		<in src = "i - 1, j, k"></in>
		<in src = "i, j – 1, k"></in>
		<in src = "i, j, k - 1"></in>
	</vertex>
   </block>
</algo>


Пример массовой рассылки данных в 3D-структуре

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>
        <arg name = "k" val = "1..2"></arg>
	<vertex condition = "(i == 1) && (j == 1) && (k == 1)" type = "0">
	</vertex>
	<vertex condition = "(i > 1) && (j > 1) && (k > 1)" type = "0">
		<in src = “1, 1, 1”></in>
	</vertex>
   </block>
</algo>


Пример 3D-структуры с различными видами скошенного параллелизма

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
   </params>
   <block dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..N"></arg>
        <arg name = "k" val = "1..2"></arg>
	<vertex condition = "k == 1" type = "0">
		<in src = “i, j  1”></in>
		<in src = “i - 1, j”></in>
	</vertex>
	<vertex condition = "k > 1" type = "0">
		<in src = “i, j, 1”></in>
		<in src = “i, j  1”></in>
		<in src = “i - 1, j - 1”></in>
	</vertex>
   </block>
</algo>


Последовательно-параллельное перемножение матриц

Новая разметка:

<algo>
   <params>
	<param name = "N" type = "int"></param>
	<param name = "P" type = "int"></param>
	<param name = "Q" type = "int"></param>
   </params>
   <block dims = "3">
	<arg name = "i" val = "1..N"></arg>
	<arg name = "j" val = "1..P"></arg>
        <arg name = "k" val = "1..Q"></arg>
	<vertex condition = "(i > 1) && (j > 1)" type = "0">
		<in src = “i, j  1”></in>
		<in src = “i - 1, j”></in>
		<in src = “i, j, k -1”></in>
	</vertex>
	<vertex condition = "(i > 1) || (j > 1)" type = "0">
		<in src = “i, j  1”></in>
		<in src = “i - 1, j”></in>
	</vertex>
   </block>
</algo>