Лучший язык для 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, но полезно иметь возможность модифицировать существующие.
- Зачем ты это делаешь? Есть много хороших, свободно доступных пакетов молекулярной динамики, которые вы можете использовать: LAMMPS, Gromacs, NAMD, HALMD - все сразу приходит на ум (наряду с менее свободно доступными, такими как CHARMM, AMBER и т. Д.). ваша цель будет намного проще, чем написание собственного, и любой из этих пакетов, с тысячами пользователей и десятками участников, будет лучше, чем то, что вы написали бы сами.
- Python + numpy подойдет для создания прототипов, но он будет значительно медленнее (да, даже если numpy связан с быстрыми библиотеками), чем C/C++/Fortran, который используют все остальные. Если вы не используете GPU, в этом случае вся тяжелая работа выполняется в ядрах, написанных на C / C++.
Я считаю, что наиболее высокоэффективные MD-коды написаны на родных языках, таких как Fortran, C или C++. Современные методы программирования на GPU также находят применение в последнее время.
Такой язык, как Python, позволил бы гораздо более быструю разработку, чем нативный код. С другой стороны, производительность обычно хуже, чем для скомпилированного нативного кода.
Вопрос к тебе. Почему вы пишете свой собственный код MD? Есть много много библиотек там. Не можете ли вы найти тот, который соответствует вашим потребностям?
Другой вариант, если вы хотите использовать Python, - взглянуть на OpenMM:
Это Molecular Dynamics API, который имеет много основных элементов, которые вам нужны (интеграторы, термостаты, баростаты и т. Д.) И поддерживает работу на ЦП через OpenCL и GPU через CUDA и OpenCL. Он имеет оболочку Python, которую я использовал ранее, и в основном имитирует основные вызовы c-api. Он был включен в Gromacs и MDLab, так что у вас есть несколько примеров того, как его интегрировать, если вы действительно хотите создать что-то с (полу) нуля
Однако, как уже говорили другие, я настоятельно рекомендую взглянуть на NAMD, Gromacs, HOOMD, LAMMPS, DL_POLY и т. Д., Чтобы убедиться, что они соответствуют вашим потребностям, прежде чем вы начнете изобретать велосипед.