Редактирование: LAMMPS

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 5: Строка 5:
 
В данном разделе хотелось бы осветить, как осуществляется параллелизм в пакете LAMMPS (англ. Large-scale Atomic/Molecular Massively Parallel Simulator). А именно, пакете для классической молекулярной динамики, написанный группой из Сандийских национальных лабораторий. Он может применяться для крупных расчётов (до десятков миллионов атомов [1]). Для работы на многопроцессорных системах используется интерфейс MPI.
 
В данном разделе хотелось бы осветить, как осуществляется параллелизм в пакете LAMMPS (англ. Large-scale Atomic/Molecular Massively Parallel Simulator). А именно, пакете для классической молекулярной динамики, написанный группой из Сандийских национальных лабораторий. Он может применяться для крупных расчётов (до десятков миллионов атомов [1]). Для работы на многопроцессорных системах используется интерфейс MPI.
  
== LAMMPS ==
+
== LAAMPS ==
- крупномасштабный атомно/молекулярный массивно-параллельный симулятор. Можно скомпилировать как параллельную версию LAMMPS (использует MPI), так и версию для запуска в одно-процессорном режиме. В LAMMPS реализована поддержка большинства двухчастичных и многочастичных короткодействующих потенциалов (потенциалы Леннард-Джонса, Морзе, Юкавы, EAM, AI-REBO). Реализована возможность вывода в нативный формат для визуализатора AtomEye. Использование графических процессоров для расчета (технология CUDA). Графические процессоры можно использовать только для потенциалов Леннард-Джонса и Кулона.
+
- крупномасштабный атомно/молекулярный массивно-параллельный симулятор.Можно скомпилировать как параллельную версию LAMMPS (использует MPI), так и версию для запуска в однопроцессорном режиме.В LAMMPS реализована поддержка большинства двухчастичных и многочастичных короткодействующих потенциалов (потенциалы Леннард-Джонса, Морзе, Юкавы, EAM, AI-REBO).Реализована возможность вывода в нативный формат для визуализатора AtomEye.Использование графических процессоров для расчета (технология CUDA). Графические процессоры можно использовать только для потенциалов Леннард-Джонса и Кулона.
В данном пакете осуществляется повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода-вывода,что является определенно достоинством системы.
+
В данном пакете осуществляется повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода-вывода,что является определнно достоинством системы.
 
Параллельные вычисления — способ организации компьютерных вычислений, при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно). Термин охватывает совокупность вопросов параллелизма в программировании, а также создание эффективно действующих аппаратных реализаций. Теория параллельных вычислений составляет раздел прикладной теории алгоритмов.
 
Параллельные вычисления — способ организации компьютерных вычислений, при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно). Термин охватывает совокупность вопросов параллелизма в программировании, а также создание эффективно действующих аппаратных реализаций. Теория параллельных вычислений составляет раздел прикладной теории алгоритмов.
  
 
== Реализация ==
 
== Реализация ==
 
Существуют различные способы реализации параллельных вычислений. В программе LAMMPS осуществляется взаимодействие c помощью передачи сообщений: на каждом процессоре многопроцессорной системы запускается одно-поточный процесс, который обменивается данными с другими процессами, работающими на других процессорах, с помощью сообщений.  
 
Существуют различные способы реализации параллельных вычислений. В программе LAMMPS осуществляется взаимодействие c помощью передачи сообщений: на каждом процессоре многопроцессорной системы запускается одно-поточный процесс, который обменивается данными с другими процессами, работающими на других процессорах, с помощью сообщений.  
Распараллеливание является пространственным, то есть каждый поток отвечает за свою часть пространства, каждому потоку соответствует свое ядро, которое интегрирует движение подмножества частиц. В пакете реализована квазимногозадачность на уровне одного исполняемого процесса, то есть все потоки выполняются в адресном пространстве процесса. Так же выполняющийся процесс имеет как минимум один (главный) поток.
+
Распараллеливание является пространственным,то есть каждый поток отвечает за свою часть пространства,каждому потоку соответствует свое ядро,которое интегрирует движение подмножества частиц. В пакете реализована квазимногозадачность на уровне одного исполняемого процесса, то есть все потоки выполняются в адресном пространстве процесса.Так же выполняющийся процесс имеет как минимум один (главный) поток.
 
+
Так как в пакете используется много-поточность,то есть процесс состоит из нескольких потоков,которые запускаются параллельно,при этом без определенного порядка по времени.Данное свойство помогает обеспечить более эффективное использование ресурсов вычислительной машины.
 
+
Использование OpenMPI процессов.MPI-схема представляет собой , распределенную работу , при которой определенный поток обрабатывает некоторый пространственный домен.В LAMMPS используется открытый стандарт для  распараллеливания,который позволяет описать совокупность подключенных директив препроцессора,библиотек и переменных.Ключевыми элементами OpenMP являются:
[[Файл:Mpi.png|400px]]
+
* конструкции для создания потоков (директива parallel),
+
* конструкции распределения работы между потоками (директивы DO/for и section),
Так как в пакете используется много-поточность, то есть процесс состоит из нескольких потоков, которые запускаются параллельно, при этом без определенного порядка по времени. Данное свойство помогает обеспечить более эффективное использование ресурсов вычислительной машины.
+
* конструкции для управления работой с данными (выражения shared и private для определения класса памяти переменных),
Использование OpenMPI процессов. MPI-схема представляет собой, распределенную работу, при которой определенный поток обрабатывает некоторый пространственный домен. В LAMMPS используется открытый стандарт для  распараллеливания, который позволяет описать совокупность подключенных директив препроцессора, библиотек и переменных. Базовым механизмом связи между MPI процессами является передача и приём сообщений. Сообщение несёт в себе передаваемые данные и информацию, позволяющую принимающей стороне осуществлять их выборочный приём:
+
* конструкции для синхронизации потоков (директивы critical, atomic и barrier),
 
+
* процедуры библиотеки поддержки времени выполнения (например, omp_get_thread_num),
* отправитель — ранг (номер в группе) отправителя сообщения;
+
* переменные окружения (например, OMP_NUM_THREADS).
* получатель — ранг получателя;
+
Процессы создаются явно, путем вызова соответствующей функции операционной системы, а обмен сообщениями — с помощью библиотеки (например, реализация протокола MPI) и осуществляется с помощью команды MPI_Bcast,рассылает сообщения от "корня" остальным процессам,а так же MPI_Sendrecv, при помощи которой посылаются и получаются сообщения.Основная сложность при проектировании параллельных программ — обеспечить правильную последовательность взаимодействий между различными вычислительными процессами, а также координацию ресурсов, разделяемых между процессами.
* признак — может использоваться для разделения различных видов сообщений;
+
== Процесс ==
* коммуникатор — код группы процессов.
+
В скомпилированном открытом для пользования, так называемом Open Source коде, написанном на языке C++ представлены  различные классы отвечающие за многопоточность выполняемых задач.  
* Операции приёма и передачи могут быть блокирующиеся и неблокирующиеся. Для неблокирующихся операций определены функции проверки готовности и ожидания выполнения операции.
+
В главной main программе создается класс LAMMPS, инициализирует header mpi.h и в конечном итоге синхронизируются все потоки.
 
+
вначале погружается стандартный класс mpi,затем input и ''Класс'' LAMMPS  действует по следующей схеме :  
Другим способом связи является удалённый доступ к памяти (RMA), позволяющий читать и изменять область памяти удалённого процесса. Локальный процесс может переносить область памяти удалённого процесса (внутри указанного процессами окна) в свою память и обратно, а также комбинировать данные, передаваемые в удалённый процесс с имеющимися в его памяти данными (например, путём суммирования). Все операции удалённого доступа к памяти не блокирующиеся, однако, до и после их выполнения необходимо вызывать блокирующиеся функции синхронизации.
 
 
 
== Запуск программы ==
 
В открытом для пользователя, так называемом Open Source коде, написанном на языке C++ представлены  различные классы, отвечающие за много-поточность выполняемых задач.
 
 
Рассмотрим главную "main" программу, в ней создается класс LAMMPS, инициализируется header mpi.h и в конечном итоге синхронизируются все потоки.
 
Вначале подгружается mpi.h, затем подключается input и далее класс''LAMMPS'' действует по следующей схеме :  
 
 
   
 
   
 
  LAMMPS->input->file  
 
  LAMMPS->input->file  
  
 
input.h  считывает входной script  и содержит методы, которые соответствуют командам класса LAMMPS.
 
input.h  считывает входной script  и содержит методы, которые соответствуют командам класса LAMMPS.
В то время как input сопоставляет каждой определенной команде свой метод и вызывается file(методы).Сообщение из input посылается на процессы.
 
 
* Таким образом можно обозначит что, класс LAMMPS  загружает mpi и input, где прописаны простейшие функции, функции top-level(а) описаны в самом классе LAMMPS.
 
  
* Началом распараллеливания можно считать  класс ''create_box'', в котором вызывается класс '' domain '', include подключает заголовочные файлы, чтобы компилятор видел, где искать нужные функции, в каждом классе изначально подгружается нужная директивы препроцессора, первоначальным можно считать взаимодействие классов ''domain'', ''comm.cpp'', ''atom_vec''.
+
input.cpp сопоставляет каждой определенной команде свой метод и вызывается file( методы).Строка из input  посылается на процессы.
  
* Подключив comm.h в ''domain'' -делится пространство, описывается параметрический расчет области, как локально в одном потоке, так и во всем общем процессе(''set local_box;set global_box''), так же описываются периодические граничные условия.
+
* Таким образом можно обозначит что, класс LAMMPS  загружает mpi и input, где прописаны простейшие функции,функции top-level(а) описаны в самом классе LAMMPS.
*В классе neighbor_list хранится информация о соседних и мнимых атомах.
+
* Начало распараллеливания можно считать происходит в классе ''create_box'', в котором вызывается класс domain, так как система вызова классов и в каждом классе изначально подгружается другой, первоначальным можно считать взаимодействие классов ''domain'',''comm.cpp'',''atom_vec''.
*  Подключаем atom_vec.h  в ''comm''и все основные функции MPI. В comm.cpp-реализован процесс обмен между процессами.
+
* подключив comm.h в ''domain.cpp'' описывается параметрический расчет области, как локально в одном потоке, так и во всем общем процессе(set local_box;set global_box),описываются периодические граничные условия.
Получаем размер коммуникатора world, (общее число процессов в рамках задачи); номер текущего процесса в рамка коммуникатора world, происходит рассылка количества интервалов всем процессам (в том числе и себе).
+
*  Подключаем atom_vec.h  в ''comm.cpp''и все основные функции MPI.Получаем размер коммуникатора world,(общее число процессов в рамках задачи); номер текущего процесса в рамка коммуникатора world,происходит рассылка количества интервалов всем процессам (в том числе и себе).Далее происходит заполнение массива ,где хранятся методы для взаимодействия частиц,создается 3d сетка процессов,основанная на количестве процессов,размере области и образа форм.Задаются размеры  по-атомно при  переднем/заднем/граничном значения увеличения скорости и фиксируется количество частиц.Обновляются параметры взаимодействия.Задаются размеры сетки процессоров.Проверка ошибок на сетке процессов.Создается ID-карта для 3d сетки процессоров.Информация выводится на  экран.
Далее происходит заполнение массива, где хранятся методы для взаимодействия частиц.Создается ID-карта для 3d сетки процессоров, основанная на количестве процессов, размере области и образа форм. Задаются размеры  по-атомно при  переднем/заднем/граничном значения увеличения скорости и фиксируется количество частиц.
+
* ''atom_vec''подключает класс ''domain'' и создает копии аргументов для перезапуска и повторений.Копируются данные по переназначению скорости из domain.Собирают и записываются значения скоростей.Собираются и записываются граничные данные, если данные негативные,то происходит откат к позитивным.Записываются  угловые взаимодействия.Записывваются Все необходимые значения упаковываются и импортируются в файл с данными.
Вскоре обновляются параметры взаимодействия, задаются размеры сетки процессоров и идет проверка ошибок на сетке процессов. Информация выводится на  экран.
 
* ''atom_vec''подключает класс ''domain'' и создает копии аргументов для перезапуска и повторений. Копируются данные по переназначению скорости из domain. Собирают и записываются значения скоростей, граничные данные, если данные негативные, то происходит откат к позитивным.
 
Записываются  угловые взаимодействия,информация о внутренних угловых значениях. Все необходимые значения упаковываются и импортируются в файл с данными.
 
Обобщение
 
 
Таким образом если обобщить все выше описанное можно описать некую модель взаимодействия и расчета области разбитой по потокам.
 
Таким образом если обобщить все выше описанное можно описать некую модель взаимодействия и расчета области разбитой по потокам.
Существует некое количество процессоров, к каждому процессору относятся свои и соседние атомы, для описания расчета сил используется класс force.cpp  и pair_xxx.cpp для частиц. И чтобы просчитать все взаимодействия на процессоре необходимы данные с предыдущего. Такой способ подсчета является эффективным и в большинстве задач более выгодным для реализации.
+
Существует некое количество процессоров, к каждому процессору относятся свои и соседние атомы, для описания расчета сил используется класс force.cpp  и pair_xxx.cpp для частиц.И чтобы просчитать все взаимодействия на процессоре необходимы данные с предыдущего.Такой способ подсчета является эффективным и в большинстве задач более выгодным для реализации.
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)
Источник — «http://tm.spbstu.ru/LAMMPS»