

{"id":4,"date":"2011-12-08T11:55:34","date_gmt":"2011-12-08T11:55:34","guid":{"rendered":"http:\/\/project.inria.fr\/template1\/?page_id=4"},"modified":"2024-06-07T15:11:05","modified_gmt":"2024-06-07T13:11:05","slug":"home","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/damaris\/","title":{"rendered":"Home"},"content":{"rendered":"<p><\/p>\n<div class=\"level2\">\n<p><em>Damaris<\/em> is a middleware for asynchronous I\/O and data management targeting large-scale, MPI-based HPC simulations. It initially proposed to dedicate cores for asynchronous I\/O in multicore nodes of recent HPC platforms, with an emphasis on ease of integration in existing simulations, efficient resource usage (with the use of shared memory) and simplicity of extension through plug-ins.<br \/>\nOver the years, <em>Damaris<\/em> has evolved into a more elaborate system, providing the possibility to use&nbsp;dedicated cores&nbsp;or&nbsp;dedicated nodes&nbsp;to carry out in situ data processing and visualization. It proposes a seamless connection to various I\/O and visualization libraries, including HDF5, Paraview, and Visit, and allows the integration of Python based access to data presented via the Damaris API, allowing, for example, Ascent based in situ visualizations, or Dask based processing of data, all with a minimal impact on run time. <em>Damaris<\/em> provides an&nbsp;extremely simple&nbsp;<abbr title=\"Application Programming Interface\">API<\/abbr>&nbsp;and can be easily integrated into existing large-scale simulations.<\/p>\n<\/div>\n<h3>Get started with Damaris<\/h3>\n<p>To get started, have a look at the following pages: <a href=\"https:\/\/project.inria.fr\/damaris\/instrumenting-a-simulation\/\" target=\"_blank\" rel=\"noopener\">Instrumenting a Simulation<\/a> and <a href=\"https:\/\/project.inria.fr\/damaris\/data-description\/\" target=\"_blank\" rel=\"noopener\"> Data Description<\/a>. These pages introduce the C and FORTRAN client side API and the XML configuration file to configure <em>Damaris<\/em> and describe the data being passed through to its server side processing plugins.<\/p>\n<p>To access the <em>Damaris source code<\/em>, it is available here: <a href=\"https:\/\/gitlab.inria.fr\/Damaris\/damaris\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.inria.fr\/Damaris\/damaris<\/a>. You can then follow the instructions for the <a href=\"https:\/\/project.inria.fr\/damaris\/damaris-compilation\/\" target=\"_blank\" rel=\"noopener\">Damaris Compilation<\/a> and once compiled and installed, try running one of the many <a href=\"https:\/\/gitlab.inria.fr\/Damaris\/damaris\/-\/tree\/master\/examples\" target=\"_blank\" rel=\"noopener\">example codes<\/a>.<\/p>\n<p>If writing your own <em>plugin<\/em> for use with Damaris then a deep dive into the C++ API available can be accessed through the <a href=\"https:\/\/damaris.gitlabpages.inria.fr\/damaris\/master\/html\/_damaris_8h.html\" target=\"_blank\" rel=\"noopener\">dOxygen reference<\/a> pages. Be sure to look at the already available plugins for examples of how to access data (e.g. <a href=\"https:\/\/gitlab.inria.fr\/Damaris\/damaris\/-\/blob\/master\/src\/storage\/HDF5Store.cpp\" target=\"_blank\" rel=\"noopener\">HDF5<\/a>) on the Damaris server side processes. Typically, you need to loop over <a href=\"https:\/\/damaris.gitlabpages.inria.fr\/damaris\/master\/html\/classdamaris_1_1_variable.html\" target=\"_blank\" rel=\"noopener\">Variables<\/a>, and then from the Variables you need to access their <https: damaris.gitlabpages.inria.fr=\"\" damaris=\"\" master=\"\" html=\"\" classdamaris_1_1_block.htmll\"=\"\" target=\"_blank\" rel=\"noopener\">Block data structures. Simple really!  <\/https:><\/p>\n<h3>Short History<\/h3>\n<p><em>Damaris<\/em> was at the core of the PhD thesis of <a href=\"https:\/\/dorier.github.io\/\" target=\"_blank\" rel=\"noopener\">Matthieu Dorier<\/a>, who received&nbsp;an&nbsp;Accessit to the Gilles Kahn Ph.D. Thesis Award of the&nbsp;SIF and the Academy of Science&nbsp;in 2015. Developed in the framework of our collaboration with the&nbsp;<a href=\"https:\/\/jlesc.github.io\/\" target=\"_blank\" rel=\"noopener\">JLESC &#8211; Joint&nbsp;Laboratory for Extreme-Scale Computing<\/a><b class=\"\">,<\/b> <em>Damaris<\/em> was&nbsp;the first software resulted from&nbsp;this joint lab validated in 2011 for integration to the Blue Waters&nbsp;supercomputer project. It scaled up to 16,000 cores&nbsp;on <a href=\"https:\/\/www.olcf.ornl.gov\/computing-resources\/titan-cray-xk7\/\">Oak Ridge\u2019s leadership supercomputer Titan<\/a> (first in the Top500 supercomputer list in 2013) before being validated on other top supercomputers. Active development is currently continuing within the <a href=\"https:\/\/team.inria.fr\/kerdata\/\" target=\"_blank\" rel=\"noopener\">KerData<\/a> team at Inria, where it is at the center of several collaborations with industry as well as with national and international academic partners.<\/p>\n<h3 id=\"why_damaris\" class=\"sectionedit2\">Why Damaris?<\/h3>\n<p>Most HPC simulations work through a series of iterations, generating a large dataset on each iteration, as a result:<\/p>\n<ul>\n<li class=\"level1\">\n<div class=\"li\">They trigger a heavy I\/O burst at each iteration, that leads to inefficient I\/O management and unpredictable variability in performance and execution time, also known as jitter.<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">In the usual approach, the datasets are shipped to some auxiliary post-processing platforms for analysis and visualization.<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">The mentioned data transfer is very costly, and no output is available until the end of the post-processing analysis and visualization phase.<\/div>\n<\/li>\n<\/ul>\n<h3 id=\"solution\" class=\"sectionedit3\">Solution<\/h3>\n<p>As a solution to the mentioned problem, <em>Damaris<\/em>, that is a middleware for data management targeting large-scale, HPC simulations is designed. HPC simulations can benefit from <em>Damaris<\/em> by:<\/p>\n<ul>\n<li class=\"level1\">\n<div class=\"li\">\u201cIn situ\u201d data analysis and visualization by some dedicated cores\/nodes of the simulation platform, in parallel with the computation<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Asynchronous and fast data transfer from HPC simulation applications to <em>Damaris<\/em> using <em>Damaris<\/em> APIs<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Semantic-aware simulation dataset processing by extending <em>Damaris<\/em> through plug-ins<\/div>\n<\/li>\n<\/ul>\n<h3 id=\"benefits\" class=\"sectionedit4\">Benefits<\/h3>\n<div class=\"level2\">\n<p>Any HPC simulation can benefit from <em>Damaris<\/em> for its I\/O optimization:<\/p>\n<ul>\n<li class=\"level1\">\n<div class=\"li\">Data analysis and visualization during the simulation, without any need for external data post-processing<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Effective usage of processing cores, by overlapping data processing and I\/Os with computation<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">No need to transfer huge simulation datasets to any auxiliary post-processing platform, but only processed results<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Easy integration with existing simulation applications through a simple&nbsp;<abbr title=\"Application Programming Interface\">API<\/abbr><\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Integration with existing data analysis and visualization tools through plug-ins e.g. incorporate HDF5 and Paraview output capability using the same Damaris API used within the simulation &#8211; switch on and off the capability using the XML configuration.<\/div>\n<\/li>\n<\/ul>\n<\/div>\n<h3 id=\"use_cases\" class=\"sectionedit5\">Use Cases<\/h3>\n<p>Those simulation applications that model complex structures, dynamics, phenomena or behaviors, in order to predict their specific concerns to the highest possible degree of precision, can be considered as a beneficiary of <em>Damaris<\/em>.<\/p>\n<ul>\n<li class=\"level1\">\n<div class=\"li\">Computer Aided Engineering<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Geophysics and Oil Applications<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Weather Prediction and Tornado Simulation<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Numerical Analysis<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Aerospace Studies,<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Chemical and Pharmaceutical Studies,<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Energy Research,<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Computational Fluid Dynamics<\/div>\n<\/li>\n<\/ul>\n<h3 id=\"technology\" class=\"sectionedit6\">Technologies<\/h3>\n<div class=\"level2\">\n<p>The following technologies has been adopted for development, benchmarking and validation of <em>Damaris<\/em>:<\/p>\n<ul>\n<li class=\"level1\">\n<div class=\"li\">Development Technologies: C++, MPI, Fortran (around 27,000 LOC)<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Supported platforms: From commodity clusters to supercomputers<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Extendability: Through plug-ins (C++, Fortran, Shell scripts, Python)<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Interface: Simple&nbsp;<abbr title=\"Application Programming Interface\">API<\/abbr>&nbsp;in C++ and Fortran<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Validated on: Top500-class supercomputers (Titan, Jaguar, Kraken), IBM Blue Gene platforms, Cray Blue Waters, French Grid5000<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Simulation codes: Tornadoes (CM1), Ocean-Land-Atmosphere (OLAM), Navier-Stokes equations (Nek5000)<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Visualization toolkits: VisIt, ParaView, Ascent (via Python)<\/div>\n<\/li>\n<\/ul>\n<\/div>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Damaris is a middleware for asynchronous I\/O and data management targeting large-scale, MPI-based HPC simulations. It initially proposed to dedicate cores for asynchronous I\/O in multicore nodes of recent HPC platforms, with an emphasis on ease of integration in existing simulations, efficient resource usage (with the use of shared memory)&#8230;<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/damaris\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-4","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/pages\/4","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":33,"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/pages\/4\/revisions"}],"predecessor-version":[{"id":1401,"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/pages\/4\/revisions\/1401"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/damaris\/wp-json\/wp\/v2\/media?parent=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}