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