<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20120330//EN"
        "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd">
<!--<?xml-stylesheet type="text/xsl" href="article.xsl"?>-->
<article article-type="research-article" dtd-version="1.2" xml:lang="en" xmlns:mml="http://www.w3.org/1998/Math/MathML"
         xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <front>
        <journal-meta>
            <journal-id journal-id-type="issn">2303-9868</journal-id>
            <journal-id journal-id-type="eissn">2227-6017</journal-id>
            <journal-title-group>
                <journal-title>Международный научно-исследовательский журнал</journal-title>
            </journal-title-group>
            <issn pub-type="epub">2303-9868</issn>
            <publisher>
                <publisher-name>ООО Цифра</publisher-name>
            </publisher>
        </journal-meta>
        <article-meta>
            <article-id pub-id-type="doi">10.23670/IRJ.2024.139.74</article-id>
            <article-categories>
                <subj-group>
                    <subject>Brief communication</subject>
                </subj-group>
            </article-categories>
            <title-group>
                <article-title>Гибридное программирование MPI+T++ для T-системы с открытой архитектурой
                </article-title>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author">
                    <contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-5500-0804</contrib-id>
                    <name>
                        <surname>Роганов</surname>
                        <given-names>Владимир Александрович</given-names>
                    </name>
                    <email>radug-a@ya.ru</email>
                    <xref ref-type="aff" rid="aff-1">1</xref>
<xref ref-type="aff" rid="aff-2">2</xref>

                </contrib><contrib contrib-type="author" corresp="yes">
                    <contrib-id contrib-id-type="orcid">https://orcid.org/0000‑0002‑2988‑1791</contrib-id>
                    <name>
                        <surname>Матвеев</surname>
                        <given-names>Герман Анатольевич</given-names>
                    </name>
                    <email>gera@prime.botik.ru</email>
                    
                </contrib><contrib contrib-type="author">
                    <contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-8983-3791</contrib-id>
                    <name>
                        <surname>Осипов</surname>
                        <given-names>Валерий Иванович</given-names>
                    </name>
                    <email>val@pereslavl.ru</email>
                    <xref ref-type="aff" rid="aff-3">3</xref>

                </contrib>
            </contrib-group>
            <aff id="aff-1"><label>1</label>НИИ Механики МГУ им. М.В. Ломоносова</aff><aff id="aff-2"><label>2</label>Институт программных систем им. А.К. Айламазяна РАН</aff><aff id="aff-3"><label>3</label>Институт программных систем им. А.К. Айламазяна РАН</aff>
            
        <pub-date publication-format="electronic" date-type="pub" iso-8601-date="2024-01-24">
            <day>24</day>
            <month>01</month>
            <year>2024</year>
        </pub-date>
        
            
        <pub-date pub-type="collection">
            <year>2024</year>
        </pub-date>
        
            <volume>8</volume>
            <issue>139</issue>
            <fpage>1</fpage>
            <lpage>8</lpage>
            <history>
                
        <date date-type="received" iso-8601-date="2023-11-23">
            <day>23</day>
            <month>11</month>
            <year>2023</year>
        </date>
        
                
        <date date-type="accepted" iso-8601-date="2023-12-25">
            <day>25</day>
            <month>12</month>
            <year>2023</year>
        </date>
        
            </history>
            <permissions>
                <copyright-statement>Copyright: &#x00A9; 2022 The Author(s)</copyright-statement>
                <copyright-year>2022</copyright-year>
                <license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open-access article distributed under the terms of the Creative Commons
                        Attribution 4.0 International License (CC-BY 4.0), which permits unrestricted use, distribution,
                        and reproduction in any medium, provided the original author and source are credited. See <uri
                                xlink:href="http://creativecommons.org/licenses/by/4.0/">
                            http://creativecommons.org/licenses/by/4.0/</uri>.
                    </license-p>
                </license>
            </permissions>
            <self-uri xlink:href="https://research-journal.org/archive/1-139-2024-january/10.23670/IRJ.2024.139.74"/>
            <abstract>
                <p>В настоящее время существует большое количество высокопроизводительных вычислительных систем, состоящих из узлов с многоядерными процессорами и ускорителями от разных производителей оборудования. Удобной моделью программирования в таких системах является модель MPI+X. Гибридные программы MPI+X часто имеют более высокую производительность по сравнению с программами на «чистом» MPI. Научные результаты, полученные при разработке таких программ, используются для создания новых версий стандарта MPI (Message Passing Interface). Гибридный метод параллельного программирования состоит в использовании модели общей памяти внутри узла и модели передачи сообщений MPI для обмена данными между узлами. Примеры гибридных моделей: MPI+OpenMP, MPI+Posix Threads, MPI+CUDA, MPI+T++ и другие. Программирование в смешанном режиме даёт разработчику возможность добиться более высокой производительности и масштабируемости приложения. В некоторых случаях смешанный код может выполняться медленнее, чем код, написанный на «чистом» MPI. В статье описываются некоторые аспекты, связанные с гибридной моделью программирования MPI+T++ в среде OpenTS. Т‑система (OpenTS) – система для параллельного программирования, поддерживающая динамически загружаемые библиотеки для коммуникационного уровня. В системе OpenTS реализован язык для параллельных вычислений Т++, который является расширением языка программирования C++. Синтаксис языка Т++ отличается от синтаксиса языка С++ добавлением в него нескольких ключевых слов. В статье приведены результаты испытаний производительности приложений MPI+T++ из пакета Mantevo (CoMD, HPCCG, MiniAero, phdMesh) и примеров из пакета LAMMPS, реализованных в среде OpenTS. В пакет Mantevo входят несколько параллельных приложений, в которых реализованы алгоритмы для решения некоторых дифференциальных уравнений с частными производными. Дается оценка эффективности такой реализации в сравнении с оригинальными MPI‑версиями приложений. В статье приведен простой пример гибридного MPI+T++ приложения на языке T++.</p>
            </abstract>
            <kwd-group>
                <kwd>параллельный алгоритм</kwd>
<kwd> язык программирования Т++</kwd>
<kwd> OpenTS</kwd>
<kwd> Т‑система</kwd>
<kwd> Т‑приложение</kwd>
<kwd> гибридные модели программирования</kwd>
</kwd-group>
        </article-meta>
    </front>
    <body> 
        
 
        
<sec>
	<title>HTML-content</title>
	<p>1. Введение</p>
	<p>Интерфейс передачи сообщений MPI (Message Passing Interface) является стандартом для межузловой связи. Он определяет семантику и синтаксис коммуникационных функций. Он был разработан научным сообществом и промышленностью для стандартизации программирования передачи сообщений. На сегодняшний день есть две основные реализации MPI: OpenMPI </p>
	<p>[1][2][3]</p>
	<p>Архитектуры узлов HPC (High-Performance Computing) имеют тенденцию к увеличению количества ядер в одном процессоре, а также используют ускорители, например, графические процессоры. Чтобы лучше использовать общие ресурсы внутри узла и программировать ускорители, пользователи обратились к гибридному программированию, которое сочетает в себе MPI с моделями параллельного программирования на уровне узла.</p>
	<p>Параллельные многопоточные программы становятся все более распространенными. Параллельные вычисления становятся все более популярными, и создание эффективных моделей параллельного программирования является приоритетной задачей. Модели с общей памятью и распределенной памятью – это две хорошо известные классификации модели параллельной аппаратной архитектуры. Использование ресурсов всех ядер и снижение временных затрат является основной целью модели многоядерного программирования </p>
	<p>[4]</p>
	<p>Гибридное параллельное программирование в модели MPI+X стало нормой в высокопроизводительных вычислениях </p>
	<p>[5]</p>
	<p>Последние тенденции в области высокопроизводительных вычислений (HPC) – использовать ускорители (графические процессоры), программируемые пользователем вентильные матрицы (FPGA), сопроцессоры, ‑‑ привели к значительной неоднородности в вычислительных подсистемах и подсистемах памяти.</p>
	<p>Разработчики приложений обычно используют модель интерфейса передачи сообщений MPI на вычислительных узлах кластера, и внутриузловую модель, такую как OpenMP или библиотеку для ускорителя (например: CUDA, OpenACC).</p>
	<p>Гибридный метод параллельного программирования состоит в использовании модели общей памяти внутри узла и модели передачи сообщений для обмена данными между узлами </p>
	<p>[6]</p>
	<p>Т‑система (OpenTS) является средой программирования для разработки высокопроизводительных и хорошо масштабируемых приложений </p>
	<p>[7]</p>
	<p>Ключевые слова необходимы для определения T‑переменных и T‑функций в теле T-программы, которая будет выполняться параллельно на вычислительной установке или суперкомпьютере.</p>
	<p>Динамическая библиотека OpenTS DMPI является неотъемлемой частью T-системы.</p>
	<p>T‑система является самодостаточной системой в том смысле, что программисту нет необходимости использовать в своей программе MPI‑вызовы. Однако, если есть необходимость использовать вызовы MPI, например, для достижения более высокой производительности программы, то это можно делать.</p>
	<p>Гибридное программирование MPI+T+ в среде OpenTS предполагает, что основная часть кода реализуется на языке T++, при этом в теле T‑программы используется библиотека MPI.</p>
	<p>Цель статьи – познакомить читателя с приложениями MPI+T++, которые занимают свое место среди гибридных приложений. В статье рассматривается простой пример гибридного MPI+T++ приложения на языке T++. Приводятся результаты тестирования четырех MPI+T++ реализаций приложений из пакета Mantevo и четырех примеров из пакета LAMMPS в сравнении с их оригинальными MPI‑версиями.</p>
	<p>Испытание происходило в несколько этапов, на каждом этапе определялось среднее значение производительности приложения.</p>
	<p>2. Простой пример гибридного MPI+T++ приложения на языке программирования T++</p>
	<p>Рассмотрим простой пример гибридного MPI+T++ приложения на языке T++.</p>
	<p>#include &lt;stdio.h&gt;</p>
	<p>#include &lt;stdlib.h&gt;</p>
	<p>#include &lt;string.h&gt;</p>
	<p> </p>
	<p>#define USRTAG 1024</p>
	<p>#define MSGSIZE 128</p>
	<p> </p>
	<p>static int root_rank = 0;</p>
	<p>static int worker_rank = 1;</p>
	<p> </p>
	<p>tfun int tworker() {</p>
	<p>  printf(&quot;I am node %d of %d.\n&quot;, ts::myRank, ts::realsuperSize);</p>
	<p>  tval int tx;</p>
	<p>  char msg[MSGSIZE];</p>
	<p>  MPI_Status stat;</p>
	<p>  memset(msg, '\0', sizeof(msg));</p>
	<p>  MPI_Recv(msg, sizeof(msg) - 1, MPI_BYTE, root_rank, USRTAG, MPI_COMM_WORLD, &amp;stat);</p>
	<p>  printf(&quot;node=%d, msg=\&quot;%s\&quot;\n&quot;, ts::myRank, msg);</p>
	<p>  tx = 1;</p>
	<p>  return (int) tx;</p>
	<p>}</p>
	<p> </p>
	<p>tfun int main(int argc, char *argv[]) {</p>
	<p>  static char *MSG = (char *) &quot;This is a message from the root T-process!&quot;;</p>
	<p>  if (ts::realsuperSize != 2) {</p>
	<p>      printf(&quot;\n\nSorry, this program works correctly only for the two ranks!\n\n&quot;);</p>
	<p>      exit(0);</p>
	<p>  } </p>
	<p>  printf(&quot;I am node %d of %d.\n&quot;, ts::myRank, ts::realsuperSize);</p>
	<p>  tval int tv;</p>
	<p>  tct(atRank(worker_rank % ts::realsuperSize));</p>
	<p>  tv = tworker();</p>
	<p>  MPI_Send(MSG, strlen(MSG), MPI_BYTE, worker_rank, USRTAG, MPI_COMM_WORLD);</p>
	<p>  (int) tv;</p>
	<p>  return 0;</p>
	<p>}</p>
	<p>В приведенном примере создаются два процесса на двух узлах (рангах) вычислительной установки: первый – основной процесс – создается на нулевом узле, а второй ‑ рабочий процесс – на первом узле. Основной процесс представлен в виде Т-функции main(), а рабочий процесс – в виде Т-функции tworker(). Т-функция main() создает рабочий процесс на первом ранге вычислительной установки с помощью операторов:</p>
	<p>tval int tv;</p>
	<p>tct(atRank(worker_rank % ts::realsuperSize));</p>
	<p>tv = tworker();</p>
	<p>В теле T‑программы определяется T‑переменная tv. Выход Т-функции tworker() присваивается Т-переменной tv. Далее, основной процесс посылает данные ‑‑ сообщение: &quot;This is a message from the root T-process!&quot;‑‑ рабочему процессу с помощью вызова MPI-функции MPI_Send(). После этого основной процесс ждет завершения работы рабочего процесса (готовности Т-переменной tv) с помощью оператора:</p>
	<p>(int) tv;</p>
	<p>В теле Т-функции tworker() выполняется вызов MPI-функции MPI_Recv() для приема сообщения от основного процесса. После этого рабочий процесс производит печать полученного сообщения и завершает свою работу.</p>
	<p>3. Приложение CoMD</p>
	<p>CoMD – простое приложение молекулярной динамики проекта Mantevo. Имитирует реализацию SPaSM (Scalable Parallel Short-Range Molecular Dynamics).</p>
	<p>Реализация приложения CoMD (и других приложений) на MPI+T++ происходила следующим образом. Функцию С++ main пакета CoMD мы переименовали в worker. В пакет мы добавили файл на языке программирования Т++, который параллельно запускает столько задач, сколько в текущей вычислительной системе вычислительных узлов, по одной задаче на каждом вычислительном узле. Каждая из этих задач вызывает функцию worker. Обеспечивается передача параметров командной строки в каждый из экземпляров функции worker. Все вхождения файла &lt;mpi.h&gt; заменяются на заголовочный файл, необходимый для корректной работы Т‑системы. Происходит сборка исполняемого файла с использованием компилятора Т++.</p>
	<fig id="F1">
		<label>Figure 1</label>
		<caption>
			<p>На рисунке представлены два графика: среднее время выполнения CoMD с использованием OpenMPI и среднее время выполнения CoMD с использованием MPI+T++</p>
		</caption>
		<alt-text>На рисунке представлены два графика: среднее время выполнения CoMD с использованием OpenMPI и среднее время выполнения CoMD с использованием MPI+T++</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/1a5a240c-0624-4703-94a0-531e59c7326f.png"/>
	</fig>
	<p>Были проведены сравнительные испытания приложения CoMD с использованием OpenMPI и CoMD с использованием MPI+T++. Результаты испытания представлены на рисунке 1.Отклонение среднего времени работы приложения составило -3.5%, то есть производительность приложения CoMD MPI+T++ приблизительно совпадает с производительностью приложения CoMD OpenMPI.</p>
	<p>4. Приложение HPCCG</p>
	<p>Приложение HPCCG из проекта Mantevo является решателем линейной системы уравнений с частными производными на области, которая имеет форму пучка лучей (beam shaped). Для решения системы уравнений используется метод сопряжённых градиентов с предобусловливанием.</p>
	<fig id="F2">
		<label>Figure 2</label>
		<caption>
			<p>На рисунке представлены два графика: средняя производительность HPCCG с использованием OpenMPI и средняя производительность HPCCG с использованием MPI+T++</p>
		</caption>
		<alt-text>На рисунке представлены два графика: средняя производительность HPCCG с использованием OpenMPI и средняя производительность HPCCG с использованием MPI+T++</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/df9c6bbd-1820-492b-a4e1-a8d640598912.png"/>
	</fig>
	<p>Были проведены сравнительные испытания оригинального MPI‑приложения HPCCG и приложения HPCCG, реализованного на платформе MPI+T++. Для проведения испытаний использовался OpenMPI. Результаты испытания представлены на рисунке 2.Отклонение среднего значения производительности приложения составило 0.3%, то есть производительность приложения HPCCG MPI+T++ приблизительно совпадает с производительностью приложения HPCCG OpenMPI. Производительность приложения HPCCG определялась исходя из статистики, выдаваемой этим приложением</p>
	<p>5. Приложение MiniAero</p>
	<p>В приложении MiniAero из проекта Mantevo строится решение уравнения Навье-Стокса для сжимаемой жидкости методом Рунге-Кутта четвертого порядка.</p>
	<p>Было проведено сравнительное тестирование приложений MiniAero OpenMPI и MiniAero MPI+T++. Испытывался один из тестов miniAero FlatPlate_Parallel на 8 процессорах. Проводилось 10 испытаний. Отклонение среднего значения производительности приложения составило 0.1%., то есть производительность приложения miniAero MPI+T++ приблизительно совпадает с производительностью приложения miniAero OpenMPI.</p>
	<p>6. Приложение phdMesh</p>
	<p>Пакет phdMesh проекта Mantevo поддерживает параллельные гетерогенные вычисления с использованием динамической неструктурированной сетки.</p>
	<p>Было проведено сравнительное тестирование приложений phdMesh OpenMPI и phdMeshMPI+T++ на 8 процессорах. Отклонение среднего значения времени работы приложения составило 1%., то есть производительность приложения phdMeshMPI+T++ приблизительно совпадает с производительностью приложения phdMesh OpenMPI.</p>
	<p>7. Модель погруженного иона</p>
	<fig id="F3">
		<label>Figure 3</label>
		<caption>
			<p>Пример eim LAMMPS. Модель погруженного иона для хлористого натрия</p>
		</caption>
		<alt-text>Пример eim LAMMPS. Модель погруженного иона для хлористого натрия</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/7b1eb5ee-0e4f-4d57-ab68-67e91958ceea.png"/>
	</fig>
	<p>[8]</p>
	<p>где N – количество атомов, </p>
	<p>ϕij σi</p>
	<p>Где </p>
	<p>ηji </p>
	<p>Ψij </p>
	<p>В пакете LAMMPS </p>
	<p>[9]</p>
	<p>Было проведено сравнительное тестирование примера eim пакета LAMMPS на платформах OpenMPI и MPI+T++. Отклонение среднего значения времени работы приложения составило 0.2%., то есть производительность приложения eim LAMMPS MPI+T++ приблизительно совпадает с производительностью приложения eim LAMMPS OpenMPI.</p>
	<p>8. Связанные наностержни (tethered nanorods)</p>
	<fig id="F4">
		<label>Figure 4</label>
		<caption>
			<p>Пример rigid LAMMPS. Наностержни со связями (tethered nanorods)</p>
		</caption>
		<alt-text>Пример rigid LAMMPS. Наностержни со связями (tethered nanorods)</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/75a7d1f5-979b-4b8b-a0be-47d73c84ff5f.png"/>
	</fig>
	<p>В пакете LAMMPS [9] представлена симуляция модели наностержней со связями (tethered nanorods [10]). В модели описывается композит длинноцепочного полимера и наностержней. Длинноцепочный полимер в композите играет роль лиганда. Длинноцепочный полимер моделируется с использованием потенциала FENE (Finitely Extensible Nonlinear Elastic model). FENE означает конечно растяжимую нелинейную упругую модель длинноцепочечного полимера. Он упрощает цепочку мономеров, соединяя последовательность бусинок с нелинейными пружинами. На рисунке 4 представлен снимок одного из моментов симуляции модели.Было проведено сравнительное тестирование примера rigid пакета LAMMPS на платформах OpenMPI и MPI+T++. Отклонение среднего значения времени работы приложения составило 3.7%., то есть производительность приложения rigid LAMMPS MPI+T++ приблизительно совпадает с производительностью приложения rigid LAMMPS OpenMPI.</p>
	<p>9. Симуляция деформации сдвига металла</p>
	<fig id="F5">
		<label>Figure 5</label>
		<caption>
			<p>Пример shear LAMMPS. Симуляция деформации сдвига куска металла</p>
		</caption>
		<alt-text>Пример shear LAMMPS. Симуляция деформации сдвига куска металла</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/c21b529a-c51e-4d5b-b576-36db84c131ad.png"/>
	</fig>
	<fig id="F6">
		<label>Figure 6</label>
		<caption>
			<p>Пример shear LAMMPS. Симуляция деформации сдвига куска металла с пузырем внутри</p>
		</caption>
		<alt-text>Пример shear LAMMPS. Симуляция деформации сдвига куска металла с пузырем внутри</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/488e367c-e52b-4d91-84a3-058f2c58c2c2.png"/>
	</fig>
	<p>На рисунке 5 отображается симуляция деформации металла в пакете LAMMPS. Нижняя часть куска металла неподвижна, верхняя часть сдвигается вправо. На рисунке 6 иллюстрируется симуляция деформации куска металла, имеющего внутри пустоту (пузырь). При сдвиге нижняя часть образца остается неподвижной, верхняя часть сдвигается вправо.Было проведено сравнительное тестирование примера shear пакета LAMMPS на платформах OpenMPI и MPI+T++. Отклонение среднего значения времени работы приложения составило 1.4%., то есть производительность приложения shear LAMMPS MPI+T++ приблизительно совпадает с производительностью приложения shear LAMMPS OpenMPI.</p>
	<p>10. Динамика многочастичных взаимодействий</p>
	<p>Динамика многочастичных взаимодействий (Multi-particle collision dynamics), также известная как стохастическая динамика вращения (Stochastic rotation dynamics), представляет собой метод мезомасштабного моделирования сложных жидкостей на основе частиц, который полностью включает в себя тепловые флуктуации и гидродинамические взаимодействия. Связь внедренных частиц с крупнозернистым растворителем достигается с помощью молекулярной динамики. Модель может использоваться для изучения поведения микроэмульсий или растворенных гибкоцепных полимеров.</p>
	<p>В пакете LAMMPS </p>
	<p>[9]</p>
	<p>При моделировании взаимодействий частицы группируются по ячейкам, и они взаимодействуют только с частицами из той же ячейки, обычно для этого строится решетка. Как правило, количество частиц в каждой ячейке – от 3 до 20. Скорости частиц в каждой ячейке обновляются в соответствии с правилом столкновения</p>
	<p>Где u – средняя скорость всех частиц в ячейке, R – матрица вращения. В трехмерном пространстве вращение осуществляется на угол α вокруг случайной оси вращения. Одно и то же вращение применяется ко всем частицам в пределах данной ячейки. Рисунок 7 иллюстрирует модель многочастичных взаимодействий.</p>
	<fig id="F7">
		<label>Figure 7</label>
		<caption>
			<p>Пример LAMMPS srd. Большие частицы находятся в крупнозернистом растворителе</p>
		</caption>
		<alt-text>Пример LAMMPS srd. Большие частицы находятся в крупнозернистом растворителе</alt-text>
		<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/media/images/2023-12-26/d653136e-39e9-4224-b11a-be2bbccb8b0e.png"/>
	</fig>
	<p>11. Заключение</p>
	<p>Приложения MPI+X занимают важное место среди приложений для высокопроизводительных вычислений. Приложения MPI+T++ – это приложения, написанные на языке для параллельных вычислений T++ с добавлением вызовов функций MPI. В статье приводится пример простого приложения MPI+T++ на языке программирования T++ и описываются результаты тестирования производительности восьми приложений MPI+T++. По результатам тестирования можно сделать вывод, что производительность MPI+T++ реализаций приложений из пакета Mantevo незначительно отличается от производительности соответствующих OpenMPI реализаций.</p>
</sec>
        <sec sec-type="supplementary-material">
            <title>Additional File</title>
            <p>The additional file for this article can be found as follows:</p>
            <supplementary-material id="S1" xmlns:xlink="http://www.w3.org/1999/xlink"
                                    xlink:href="https://doi.org/10.5334/cpsy.78.s1">
                <!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/10060.docx">10060.docx</inline-supplementary-material>]-->
                <!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/10060.pdf">10060.pdf</inline-supplementary-material>]-->
                <label>Online Supplementary Material</label>
                <caption>
                    <p>Further description of analytic pipeline and patient demographic information. DOI:
                        <italic>
                            <uri>https://doi.org/10.23670/IRJ.2024.139.74</uri>
                        </italic>
                    </p>
                </caption>
            </supplementary-material>
        </sec>
    </body>
    <back>
        <ack>
            <title>Acknowledgements</title>
            <p>None</p>
        </ack>
        <sec>
            <title>Competing Interests</title>
            <p>None</p>
        </sec>
        <ref-list>
            <ref id="B1">
                    <label>1</label>
                    <mixed-citation publication-type="confproc">
                        Open MPI: Open Source High Performance Computing. — URL: https://www.open-mpi.org/ (accessed: 11.09.2023)
                    </mixed-citation>
                </ref><ref id="B2">
                    <label>2</label>
                    <mixed-citation publication-type="confproc">
                        MPICH | High-Performance Portable MPI. — URL: https://www.mpich.org/ (accessed: 11.09.2023)
                    </mixed-citation>
                </ref><ref id="B3">
                    <label>3</label>
                    <mixed-citation publication-type="confproc">
                        Haensel D. A C++ Based MPI-enabled Tasking Framework to Efficiently Parallelize Fast Multipole Methods for Molecular Dynamics / D. Haensel // Dresden University of Technology. — 2018. — P. 1-121.
                    </mixed-citation>
                </ref><ref id="B4">
                    <label>4</label>
                    <mixed-citation publication-type="confproc">
                        hyPACK-2013. — URL: https://www.tezu.ernet.in/dcompsc/facility/HPCC/hypack/index.html (accessed: 11.09.2023)
                    </mixed-citation>
                </ref><ref id="B5">
                    <label>5</label>
                    <mixed-citation publication-type="confproc">
                        Wright G. A Primer on Parallel Programming / G. Wright. — 2021.— URL: https://researchcomputing.princeton.edu/sites/g/files/toruqf311/files/documents/A%20Parallel%20Programming%20Primer.pdf (accessed: 11.09.2023)
                    </mixed-citation>
                </ref><ref id="B6">
                    <label>6</label>
                    <mixed-citation publication-type="confproc">
                        Zambre R. Lessons Learned on MPI+Threads Communication / R. Zambre, A. Chandramowlishwaran // ACM/IEEE International Conference for High-Performance Computing. — 2022.
                    </mixed-citation>
                </ref><ref id="B7">
                    <label>7</label>
                    <mixed-citation publication-type="confproc">
                        Абрамов С.М. Динамическое распараллеливание программ на базе параллельной редукции графов. Архитектура программного обеспечения новой версии T-системы / С.М. Абрамов, В.А. Васенин, Е.Е. Мамчиц [и др.] // Научная сессия МИФИ-2001. — Москва, 2001. — Т. 2. — С. 234.
                    </mixed-citation>
                </ref><ref id="B8">
                    <label>8</label>
                    <mixed-citation publication-type="confproc">
                        Zhou X.W. Embedded-ion Method: An Analytical Energy-conserving Charge-transfer Interatomic Potential and Its Application to the La-Br System / X.W. Zhou, F.P. Doty // Phys. Rev. — 2008. — № 78. — 224307.
                    </mixed-citation>
                </ref><ref id="B9">
                    <label>9</label>
                    <mixed-citation publication-type="confproc">
                        LAMMPS Molecular Dynamics Simulator. — URL: https://www.lammps.org/ (accessed: 11.09.2023)
                    </mixed-citation>
                </ref><ref id="B10">
                    <label>10</label>
                    <mixed-citation publication-type="confproc">
                        Liu K. Self-assembly of Inorganic Nanorods / K. Liu, N. Zhao, E. Kumacheva // Chem. Soc. Rev. —2011. — № 40. — P. 656-671.
                    </mixed-citation>
                </ref>
        </ref-list>
    </back>
    <fundings>
        
    </fundings>
</article>