2011-08-04 3 views
3

중장비 분자 역학 시뮬레이터를 구축해야합니다. python + numpy가 좋은 선택인지 궁금합니다. 이것은 프로덕션에서 사용되므로 좋은 언어로 시작하고 싶습니다. eg.scala와 같은 기능적 언어로 시작해야하는지 궁금합니다. 스칼라에서 과학 계산을위한 라이브러리 지원이 충분합니까? 또는 당신이 생각하는 다른 언어/패러다임의 조합, 그리고 그 이유. 과거에 무언가를 실제로 만들었고 경험에서 이야기하고 있다면, 데이터 포인트를 수집하는 데 도움이 될 것이라고 언급 해주십시오.Molecular Dynamics Simulator를위한 최고의 언어가 프로덕션 환경에서 실행됩니다. (Python + Numpy?)

감사합니다.

+0

이 질문을 주관적으로 표시하지 않으려면 특정 계산 유형에 대한 세부 정보를 추가 할 수 있습니까? 얼마나 많은 분자, 얼마나 많은 timesteps, 어떤 정확도, 어떤 성능? – smci

+0

"왜 MD를 쓰는가?"라는 질문을했습니다. 내부적으로 여기에. 나는이 프로젝트에 익숙하지 않고 얼마 동안 작업해온 다른 사람들은 현재 선반에서 지원되지 않는 잠재적 인 에너지 계산을해야한다고 확신하고있다. – jason

+0

분자의 수는 분자의 중간 상태 또는 단계에 관심이없는 10K 정도이며 최종 구성에만 관심이 있습니다. 시간 단계에 대해서 - 아직 아이디어는 없습니다. 범위와 그 결정이 의사 결정에 영향을 줄 것이라고 생각하는 방법을 알려주십시오. – jason

답변

10

높은 성능의 MD 구현은 데이터 지향적 인 디자인을 우회하는 데이터의 커다란 배열로 (기능적으로 반대되는) 분명히 필수적인 경향이 있습니다. 나는 LAMMPS으로 일했고, 사마귀가 있지만 일을 끝내게됩니다. 아마도 더 매력적인 옵션은 HOOMD이며 CUDA를 사용하여 엔비디아 GPU를 처음부터 최적화했습니다. HOOMD는 LAMMPS의 모든 기능을 가지고 있지는 않지만 인터페이스는 약간 더 멋지게 보인다. (파이썬에서 스크립트로 작성 가능하다.) 매우 뛰어난 성능이다.

나는 실제적으로 높은 수준의 객체 지향 디자인을 사용하여 몇 차례 (자바와 스칼라) 내 자신의 MD 코드를 구현했으며, 많이 조정되어 C++/CUDA를 사용하는 인기있는 MD 구현과 비교하여 실망스러운 성능을 발견했습니다. 요즈음에는 몇몇 과학자들이 자신의 MD 구현을 작성하는 사람은 거의 없지만 기존의 MD 구현을 수정할 수 있다는 것이 유용합니다.

+0

안녕하세요, 왜 당신은 자신의 MD를 구현했고 왜 자바와 스칼라가 아니라 다른 언어를 구현 했습니까? 네 생각을 이해하려고 노력하는거야. 답장을 보내 주셔서 감사합니다. – jason

+0

필자가 필요로하는 특정 수정 작업을 더 유연하게 수행 할 수 있다고 생각했기 때문에 내 MD를 구현했습니다. JVM 언어는 (1) C++ (예 : Python보다 더 뛰어난 순서), (2) 크로스 플랫폼, (3) 가비지 수집, (4) 메모리 오류로부터 안전성과 같은 컴파일 언어에 가까운 성능을 제공합니다. 나는 스칼라가 거의 모든면에서 자바보다 더 나은 언어라는 것을 알았다. 수치 계산의 경우 스칼라의 특수화 지원 및 연산자 구문이 유용합니다. 이 작업에 대한 JVM의 단점은 스택 할당 값 유형이 부족하다는 것입니다. –

5

필자는 Fortran, C 또는 C++와 같은 모국어로 작성된 코드가 가장 효과적이라고 생각합니다. 현대의 GPU 프로그래밍 기술은 또한 최근에 호의를 얻고 있습니다.

Python과 같은 언어는 원시 코드보다 훨씬 빠른 개발을 가능하게합니다. 일반적으로 컴파일 된 네이티브 코드보다 성능이 떨어지는 편입니다.

질문이 있습니다. 왜 자신의 MD 코드를 작성하고 있습니까? 밖에 많은 도서관이 많이 있습니다. 당신의 요구에 맞는 것을 찾을 수 없습니까?

+4

파이썬을 "접착제"로 사용할 수도 있습니다. 말하자면 언급 한 언어로 작성된 특수 설계된 라이브러리로 모든 처리를 수행 할 수 있습니다. 또는 Cython과 같은 것을 사용할 수도 있습니다. – JAB

+0

@JAB Cython은 잘 작동 할 수 있습니다. 파이썬은 매우 표현하기 쉬운 언어이며 두 세계의 장점을 최대한 활용할 수있는 접근 방식이 바람직합니다. –

6
  1. 왜 이렇게할까요? 많은 분자 동역학 패키지를 유용하고 자유롭게 사용할 수 있습니다 : LAMMPS, Gromacs, NAMD, HALMD (CHARMM, AMBER 등의 덜 자유롭게 사용 가능한 것들과 함께)이 중 하나를 수정하십시오. 당신의 목적에 부합하기 위해서는 자신의 글을 작성하는 것보다 훨씬 쉽습니다. 수천 명의 사용자와 수십 명의 기여자가있는이 패키지 중 어떤 것이 든 당신이 직접 쓰는 것보다 낫습니다.
  2. 파이썬 + numpy는 프로토 타이핑을 위해 잘 될 것이지만, 다른 모든 것들이 사용하는 C/C++/Fortran보다 속도가 훨씬 느릴 것입니다 (예, 빠른 라이브러리에 대해 numpy로 연결된 경우에도). GPU를 사용하지 않는 한, 모든 노력은 C/C++로 작성된 커널에서 수행됩니다.
3

파이썬은 OpenMM 살펴보고 사용하려는 경우 다른 대안 :

https://simtk.org/home/openmm

그것은 당신이 (통합, 온도 조절 장치, barostats을 필요로하는 기본 요소의 많은을 가진 분자 역학 API입니다 CUDA 및 OpenCL을 통해 OpenCL 및 GPU를 통해 CPU에서 실행되는 것을 지원합니다. 그것은 전에 사용했던 python 래퍼를 가지고 있으며 기본적으로 기본 c-api 호출을 모방합니다.그것은 Gromacs에 통합하고, MDLab, 그래서 당신은 당신이 뭔가를 구축 정말 죽은 세트가 있다면 그것을 통합하는 방법의 예를 됐어요 (반)은 다른 사람이 말했다 그러나로

에 흠집이 나는 매우 보라는 권유를 NAMD, Gromacs, HOOMD, LAMMPS, DL_POLY 등에서 휠 재발 명을하기 전에 고객의 요구에 맞는 지 확인하십시오.

관련 문제