{"id":17129,"date":"2017-04-15T00:11:14","date_gmt":"2017-04-14T21:11:14","guid":{"rendered":"https:\/\/hgpu.org\/?p=17129"},"modified":"2017-04-15T00:11:14","modified_gmt":"2017-04-14T21:11:14","slug":"a-domain-specific-language-for-performance-portable-molecular-dynamics-algorithms","status":"publish","type":"post","link":"https:\/\/hgpu.org\/?p=17129","title":{"rendered":"A Domain Specific Language for Performance Portable Molecular Dynamics Algorithms"},"content":{"rendered":"<p>Developers of Molecular Dynamics (MD) codes face significant challenges when adapting existing simulation packages to new hardware. In a continuously diversifying hardware landscape it becomes increasingly difficult for scientists to be experts both in their own domain (physics\/chemistry\/biology) and specialists in the low level parallelisation and optimisation of their codes. To address this challenge, we describe a &quot;Separation of Concerns&quot; approach for the development of parallel and optimised MD codes: the science specialist writes code at a high abstraction level in a domain specific language (DSL), which is then translated into efficient computer code by a scientific programmer. In a related context, an abstraction for the solution of partial differential equations with grid based methods has recently been implemented in the (Py)OP2 library. Inspired by this approach, we develop a Python code generation system for molecular dynamics simulations on different parallel architectures, including massively parallel distributed memory systems and GPUs. We demonstrate the efficiency of the auto-generated code by studying its performance and scalability on different hardware and compare it to other state-of-the-art simulation packages. With growing data volumes the extraction of physically meaningful information from the simulation becomes increasingly challenging and requires equally efficient implementations. A particular advantage of our approach is the easy expression of such analysis algorithms. We consider two popular methods for deducing the crystalline structure of a material from the local environment of each atom, show how they can be expressed in our abstraction and implement them in the code generation framework.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Developers of Molecular Dynamics (MD) codes face significant challenges when adapting existing simulation packages to new hardware. In a continuously diversifying hardware landscape it becomes increasingly difficult for scientists to be experts both in their own domain (physics\/chemistry\/biology) and specialists in the low level parallelisation and optimisation of their codes. To address this challenge, we [&hellip;]<\/p>\n","protected":false},"author":351,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[36,10,66,11,89,3,12],"tags":[1787,1781,1790,215,1782,14,810,1651,112,20,176,550,551,1783,513,1390],"class_list":["post-17129","post","type-post","status-publish","format-standard","hentry","category-algorithms","category-biology","category-chemistry","category-computer-science","category-nvidia-cuda","category-paper","category-physics","tag-algorithms","tag-biology","tag-chemistry","tag-code-generation","tag-computer-science","tag-cuda","tag-differential-equations","tag-dsl","tag-molecular-dynamics","tag-nvidia","tag-package","tag-partial-differential-equations","tag-pdes","tag-physics","tag-python","tag-tesla-k20"],"views":2984,"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hgpu.org\/index.php?rest_route=\/wp\/v2\/posts\/17129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hgpu.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hgpu.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hgpu.org\/index.php?rest_route=\/wp\/v2\/users\/351"}],"replies":[{"embeddable":true,"href":"https:\/\/hgpu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17129"}],"version-history":[{"count":0,"href":"https:\/\/hgpu.org\/index.php?rest_route=\/wp\/v2\/posts\/17129\/revisions"}],"wp:attachment":[{"href":"https:\/\/hgpu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hgpu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hgpu.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}