Лучший язык для Molecular Dynamics Simulator, который будет запущен в производство. (Python+Numpy?)

Мне нужно построить сверхмощный симулятор молекулярной динамики. Мне интересно, является ли Python + Numpy хорошим выбором. Это будет использоваться в производстве, поэтому я хотел начать с хорошего языка. Мне интересно, стоит ли мне начинать с функционального языка, такого как, например,.scala. Достаточно ли у нас библиотечной поддержки для научных вычислений в Scala? Или любую другую комбинацию языка / парадигмы, которую вы считаете хорошей - и почему. Если вы действительно что-то строили в прошлом и говорите из опыта, пожалуйста, укажите это, так как это поможет мне собрать данные.

большое спасибо!

4 ответа

Решение

Высокоэффективные реализации MD имеют тенденцию быть обязательными (в отличие от функциональных) с большими массивами данных, превосходящими объектно-ориентированный дизайн. Я работал с LAMMPS, и, хотя у него есть бородавки, он справляется со своей работой. Возможно, более привлекательным вариантом является HOOMD, который с самого начала был оптимизирован для графических процессоров Nvidia с CUDA. HOOMD не обладает всеми функциями LAMMPS, но интерфейс выглядит немного лучше (он написан на Python) и обладает очень высокой производительностью.

Я на самом деле пару раз реализовал свой собственный код MD (Java и Scala), используя высокоуровневый объектно-ориентированный дизайн, и обнаружил неутешительную производительность по сравнению с популярными реализациями MD, которые сильно настроены и используют C++/CUDA. Сегодня кажется, что немногие ученые пишут свои собственные реализации MD, но полезно иметь возможность модифицировать существующие.

  1. Зачем ты это делаешь? Есть много хороших, свободно доступных пакетов молекулярной динамики, которые вы можете использовать: LAMMPS, Gromacs, NAMD, HALMD - все сразу приходит на ум (наряду с менее свободно доступными, такими как CHARMM, AMBER и т. Д.). ваша цель будет намного проще, чем написание собственного, и любой из этих пакетов, с тысячами пользователей и десятками участников, будет лучше, чем то, что вы написали бы сами.
  2. Python + numpy подойдет для создания прототипов, но он будет значительно медленнее (да, даже если numpy связан с быстрыми библиотеками), чем C/C++/Fortran, который используют все остальные. Если вы не используете GPU, в этом случае вся тяжелая работа выполняется в ядрах, написанных на C / C++.

Я считаю, что наиболее высокоэффективные MD-коды написаны на родных языках, таких как Fortran, C или C++. Современные методы программирования на GPU также находят применение в последнее время.

Такой язык, как Python, позволил бы гораздо более быструю разработку, чем нативный код. С другой стороны, производительность обычно хуже, чем для скомпилированного нативного кода.

Вопрос к тебе. Почему вы пишете свой собственный код MD? Есть много много библиотек там. Не можете ли вы найти тот, который соответствует вашим потребностям?

Другой вариант, если вы хотите использовать Python, - взглянуть на OpenMM:

https://simtk.org/home/openmm

Это Molecular Dynamics API, который имеет много основных элементов, которые вам нужны (интеграторы, термостаты, баростаты и т. Д.) И поддерживает работу на ЦП через OpenCL и GPU через CUDA и OpenCL. Он имеет оболочку Python, которую я использовал ранее, и в основном имитирует основные вызовы c-api. Он был включен в Gromacs и MDLab, так что у вас есть несколько примеров того, как его интегрировать, если вы действительно хотите создать что-то с (полу) нуля

Однако, как уже говорили другие, я настоятельно рекомендую взглянуть на NAMD, Gromacs, HOOMD, LAMMPS, DL_POLY и т. Д., Чтобы убедиться, что они соответствуют вашим потребностям, прежде чем вы начнете изобретать велосипед.

Другие вопросы по тегам