{"id":16011,"date":"2023-06-19T12:30:25","date_gmt":"2023-06-19T10:30:25","guid":{"rendered":"https:\/\/blog.rwth-aachen.de\/itc\/?p=16011"},"modified":"2023-06-22T17:56:34","modified_gmt":"2023-06-22T15:56:34","slug":"h2m-2","status":"publish","type":"post","link":"https:\/\/blog.rwth-aachen.de\/itc\/2023\/06\/19\/h2m-2\/","title":{"rendered":"H2M \u2013 Mehr Kontrolle und Effizienz in Systemen mit heterogenem Speicher"},"content":{"rendered":"<div class=\"twoclick_social_bookmarks_post_16011 social_share_privacy clearfix 1.6.4 locale-de_DE sprite-de_DE\"><\/div><div class=\"twoclick-js\"><script type=\"text\/javascript\">\/* <![CDATA[ *\/\njQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_16011')){$('.twoclick_social_bookmarks_post_16011').socialSharePrivacy({\"txt_help\":\"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \\u00fcbertragen und unter Umst\\u00e4nden auch dort gespeichert. N\\u00e4heres erfahren Sie durch einen Klick auf das <em>i<\\\/em>.\",\"settings_perma\":\"Dauerhaft aktivieren und Daten\\u00fcber-tragung zustimmen:\",\"info_link\":\"http:\\\/\\\/www.heise.de\\\/ct\\\/artikel\\\/2-Klicks-fuer-mehr-Datenschutz-1333879.html\",\"uri\":\"https:\\\/\\\/blog.rwth-aachen.de\\\/itc\\\/2023\\\/06\\\/19\\\/h2m-2\\\/\",\"post_id\":16011,\"post_title_referrer_track\":\"H2M+%E2%80%93+Mehr+Kontrolle+und+Effizienz+in+Systemen+mit+heterogenem+Speicher\",\"display_infobox\":\"on\"});}});\n\/* ]]> *\/<\/script><\/div><p><div id=\"attachment_16019\" style=\"width: 310px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-16019\" class=\"size-medium wp-image-16019\" src=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild2-300x200.jpg\" alt=\"H2M saver and disk components\" width=\"300\" height=\"200\" srcset=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild2-300x200.jpg 300w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild2-768x512.jpg 768w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild2.jpg 952w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><p id=\"caption-attachment-16019\" class=\"wp-caption-text\">Quelle: Freepik<\/p><\/div><\/p>\n<p>Im DFG-gef\u00f6rderten Projekt &#8222;Heuristics\u00a0for\u00a0Heterogeneous\u00a0Memory&#8220; (H2M) entwickeln die RWTH Aachen University und der franz\u00f6sische Projektpartner\u00a0Inria\u00a0gemeinsam eine Unterst\u00fctzung neuer Speichertechnologien wie z.B. High\u00a0Bandwidth\u00a0Memory (HBM) und Non Volatile Memory (NVM). Diese Technologien kommen neben dem \u00fcblichen\u00a0Dynamic Random Access Memory (DRAM)\u00a0immer h\u00e4ufiger in HPC-Systemen als zus\u00e4tzliche Speicher zum Einsatz. HBM bietet eine h\u00f6here Bandbreite als klassischer DRAM, ist daf\u00fcr aber auch wesentlich kleiner. NVM stellt gr\u00f6\u00dfere Kapazit\u00e4ten zur Verf\u00fcgung, ist jedoch langsamer im Vergleich zum DRAM. Durch die unterschiedlichen Charakteristiken und Kapazit\u00e4tsgrenzen stellt sich somit die Frage, wie Systeme mit heterogenem Speicher effizient eingesetzt werden k\u00f6nnen und in welchem Speicher Daten abgelegt werden sollen.<\/p>\n<p><!--more--><\/p>\n<div id=\"attachment_16021\" style=\"width: 310px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-16021\" class=\"wp-image-16021 size-medium\" src=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild3-300x225.jpg\" alt=\"Six project workers\" width=\"300\" height=\"225\" srcset=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild3-300x225.jpg 300w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/Bild3.jpg 337w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><p id=\"caption-attachment-16021\" class=\"wp-caption-text\">Christian Terboven, Brice Goglin, Emmanuel Jeannot, Cl\u00e9ment Foyer, Anara Kozhokanova und Jannis Klinkenberg <br \/>Quelle: Eigene Darstellung<\/p><\/div>\n<p>Zur Verwendung der neuen Speichertechnologien m\u00fcssen Anwendungen aktuell noch stark modifiziert werden und plattform- oder herstellerspezifische Application Programming Interfaces (APIs) eingesetzt werden.<\/p>\n<p>Seit Beginn des Projektes 2021 verfolgt H2M das Ziel, portable Schnittstellen bereitzustellen, um verf\u00fcgbare Speicher sowie deren Eigenschaften zu identifizieren und den Zugriff zu erm\u00f6glichen. Darauf basierend sollen Allokationsabstraktionen und Heuristiken entwickelt werden, um Anwendungsentwickler*innen\u00a0sowie Laufzeitsystemen eine Kontrolle zu geben, in welchem Speicher Daten abgelegt und wann Daten zwischen unterschiedlichen Arten von Speichern verschoben werden sollen.\u00a0In unserem <a href=\"https:\/\/blog.rwth-aachen.de\/itc\/2021\/04\/23\/h2m\/\">Blogbeitrag 2021<\/a> haben wir den Beginn des Projektes bereits vorgestellt. Zu diesem Zeitpunkt war noch unklar, wie Abstraktionen und Heuristiken aussehen sollen. Nun sind die Forschenden schon einen gro\u00dfen Schritt weiter und haben Allokationsfunktionen entwickelt.<\/p>\n<h3><\/h3>\n<h3><span style=\"color: #005495;\"><strong>Mit den richtigen Traits zum richtigen Speicher<\/strong><\/span><\/h3>\n<p>Die Idee dabei ist, die sonst \u00fcblichen Memory Allokationsfunktionen wie malloc (in C) und new (in C++) durch eine neue Allokationsfunktion (h2m_alloc_w_traits) zu abstrahieren. Mit dieser k\u00f6nnen Anwendungsentwickler*innen einer Allokation zus\u00e4tzliche Eigenschaften (sogenannte <em>Traits<\/em>) \u00fcbergeben, die z.B. beschreiben, wie die Daten im Verlauf der Applikation verwendet werden bzw. wie auf die Daten zugegriffen wird oder welche Voraussetzungen die Allokation erf\u00fcllen muss. Dies ist in folgendem Beispiel zu sehen.<\/p>\n<p><code><span style=\"color: #0000ff;\">int <\/span><span style=\"color: #00ccff;\">err;<\/span><\/code><br \/>\n<code><span style=\"color: #0000ff;\">double* <\/span><span style=\"color: #00ccff;\">data_item;<\/span><\/code><br \/>\n<code><span style=\"color: #0000ff;\">size t <\/span><span style=\"color: #00ccff;\">N = <\/span><span style=\"color: #99cc00;\">1000 * <\/span><span style=\"color: #0000ff;\">sizeof(<\/span><span style=\"color: #0000ff;\">double); <\/span><span style=\"color: #339966;\">\/\/ desired size (in bytes)<\/span><\/code><\/p>\n<p><code><span style=\"color: #339966;\">\/\/ Specify allocation traits (requirements and hints)<\/span><\/code><br \/>\n<code><span style=\"color: #00ff00;\">h2m_alloc_trait_t <\/span><span style=\"color: #00ccff;\">traits[<\/span><span style=\"color: #99cc00;\">5] = {<\/span><\/code><br \/>\n<code style=\"padding-left: 40px;\">h2m_atk_access_mode,    h2m_atv_access_mode_readwrite,<\/code><br \/>\n<code style=\"padding-left: 40px;\">h2m_atk_access_origin,  h2m_atv_access_origin_multiple_threads,<\/code><br \/>\n<code style=\"padding-left: 40px;\">h2m_atk_access_pattern, h2m_atv_access_pattern_strided,<\/code><br \/>\n<code style=\"padding-left: 40px;\">h2m_atk_access_stride,  <span style=\"color: #99cc00;\">3 <\/span><span style=\"color: #339966;\">\/* in bytes *\/,<\/span><\/code><br \/>\n<code style=\"padding-left: 40px;\">h2m_atk_access_freq,    <span style=\"color: #99cc00;\">2000<\/span>, <span style=\"color: #339966;\">\/* e.g., accesses per sec *\/<\/span>};<\/code><\/p>\n<p><code><span style=\"color: #339966;\">\/\/ Finally allocate memory<\/span><\/code><br \/>\n<code><span style=\"color: #00ccff;\">data_item = (<\/span><span style=\"color: #0000ff;\">double*<\/span>) h2m_alloc_w_traits(<span style=\"color: #00ccff;\">N<\/span>, &amp;<span style=\"color: #00ccff;\">err<\/span>, <span style=\"color: #99cc00;\">5<\/span>, <span style=\"color: #00ccff;\">traits<\/span>);<\/code><\/p>\n<p>In diesem Code-Beispiel wird f\u00fcr die Allokation angegeben, dass auf die Daten von mehreren Threads in lesender und schreibender Form zugegriffen wird und das voraussichtlich nicht linear, sondern mit einem Stride von 3. Das bedeudet, dass nur jeder 3. Wert verwendet wird. Threads sind eigenst\u00e4ndige Ausf\u00fchrungsstr\u00e4nge, die gleichzeitig bearbeitet werden k\u00f6nnen, und kommen oft bei paralleler Programmierung zum Einsatz, um Applikationen zu beschleunigen.<\/p>\n<p>Wie Abbildung 1\u00a0zeigt,\u00a0kann das H2M Laufzeitsystem dann\u00a0mit Hilfe von Strategien den geeigneten Speicher zur Ablage der Daten bestimmen. Dabei werden sowohl Traits als auch die im System verf\u00fcgbaren Speichertechnologien ber\u00fccksichtigt.\u00a0H2M stellt unter anderem simple Basis-Strategien zur Verf\u00fcgung, bietet aber auch die M\u00f6glichkeit, \u00fcber ein Interface benutzerdefinierte Strategien zu erstellen und zu verwenden.<\/p>\n<div id=\"attachment_16117\" style=\"width: 310px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-16117\" class=\"wp-image-16117 size-medium\" src=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview-300x160.png\" alt=\"Grafik zu H2M\" width=\"300\" height=\"160\" srcset=\"https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview-300x160.png 300w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview-1024x547.png 1024w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview-768x410.png 768w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview-1536x820.png 1536w, https:\/\/blog.rwth-aachen.de\/itc\/files\/2023\/06\/H2M-Overview.png 1787w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-16117\" class=\"wp-caption-text\">Abbildung 1: \u00dcbersicht der H2M Komponenten und des Zusammenspiels mit Applikation und der Systemumgebung Quelle: Eigene Darstellung<\/p><\/div>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h3><\/h3>\n<h3><\/h3>\n<h3><\/h3>\n<h3><\/h3>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><span style=\"color: #005495;\"><strong>Breit aufgestellt \u2013 Evaluation auf mehreren Architekturen und aktuelle Forschungsrichtung<\/strong><\/span><\/h3>\n<p>Das neue Konzept wird mit diversen Proxy Applikationen, sogenannten Mini-Apps, und Benchmarks auf unterschiedlichen Architekturen evaluiert. Beispiele daf\u00fcr sind Intel\u2018s KNL Architektur, die neben DRAM auch mit MCDRAM (HBM) Speichermodulen ausgestattet ist. Dieser ist zwar kleiner, bietet daf\u00fcr aber eine h\u00f6here Bandbreite. Dar\u00fcber hinaus wurde eine Architektur evaluiert, die neben \u00fcblichem DDR4 gro\u00dfe Mengen an Intel Optane DC Persistent Memory (NVM oder non-volatile Memory) besitzt., Dieser ist zwar langsamer, stellt im Gegenzug allerdings mehr Kapazit\u00e4t bereit.<\/p>\n<p>Bisher lag der Fokus der Forschung auf Szenarien, bei denen Datenobjekte einmalig in bestimmten Speichertypen abgelegt wurden und f\u00fcr den Rest der Programmausf\u00fchrung dort bleiben. Aktuell und in Zukunft wird jedoch auch evaluiert, inwiefern eine dynamische Verschiebung von Daten zwischen Speichertypen zur Laufzeit Effizienzsteigerungen erzielen kann. Das ist z.B. dann interessant, wenn Applikationen aus mehreren Ausf\u00fchrungsphasen bestehen, in denen die Daten unterschiedlich verwendet werden oder in denen sich Zugriffsmuster auf Daten gravierend \u00e4ndern.<\/p>\n<hr \/>\n<p>Verantwortlich f\u00fcr die Inhalte dieses Beitrags sind <a href=\"https:\/\/www.itc.rwth-aachen.de\/cms\/it-center\/IT-Center\/Profil\/Team\/~epvp\/Mitarbeiter-CAMPUS-\/?gguid=0xB9156201FCE42A4EBEB710490A672F37&amp;allou=1\">Jannis Klinkenberg<\/a> und <a href=\"https:\/\/www.itc.rwth-aachen.de\/cms\/it-center\/IT-Center\/Profil\/Team\/~epvp\/Mitarbeiter-CAMPUS-\/?gguid=0x592B0D17C73A1249AC2C233FADF6EE96&amp;allou=1\">Janin Vreydal<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Im DFG-gef\u00f6rderten Projekt &#8222;Heuristics\u00a0for\u00a0Heterogeneous\u00a0Memory&#8220; (H2M) entwickeln die RWTH Aachen University und der franz\u00f6sische Projektpartner\u00a0Inria\u00a0gemeinsam eine Unterst\u00fctzung neuer Speichertechnologien wie z.B. High\u00a0Bandwidth\u00a0Memory (HBM) und Non Volatile Memory (NVM). Diese Technologien kommen [&hellip;]<\/p>\n","protected":false},"author":5003,"featured_media":16019,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"c2c_always_allow_admin_comments":false,"footnotes":""},"categories":[924,316,315],"tags":[925,23,927,926],"class_list":["post-16011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hpcnews","category-projekte-kooperationen","category-services-support","tag-h2m","tag-hpc","tag-intel","tag-memory"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/posts\/16011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/users\/5003"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/comments?post=16011"}],"version-history":[{"count":29,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/posts\/16011\/revisions"}],"predecessor-version":[{"id":16123,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/posts\/16011\/revisions\/16123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/media\/16019"}],"wp:attachment":[{"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/media?parent=16011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/categories?post=16011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rwth-aachen.de\/itc\/wp-json\/wp\/v2\/tags?post=16011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}