{"id":10583,"date":"2017-10-09T22:28:13","date_gmt":"2017-10-09T20:28:13","guid":{"rendered":"https:\/\/wpethzprd.ethz.ch\/id\/?p=10583"},"modified":"2017-11-16T12:43:52","modified_gmt":"2017-11-16T11:43:52","slug":"4-tageskurs-parallele-programmierung-mit-mpi-openmp","status":"publish","type":"post","link":"https:\/\/blogs.ethz.ch\/id\/2017\/10\/09\/4-tageskurs-parallele-programmierung-mit-mpi-openmp\/","title":{"rendered":"4-Tageskurs &#8222;Parallele Programmierung mit MPI \/ OpenMP&#8220;"},"content":{"rendered":"<p>Zum zweiten Mal erfreute sich der 4-Tageskurs <a href=\"https:\/\/sis.id.ethz.ch\/consulting\/mpi_openmp_course.html\" target=\"_blank\" rel=\"noopener\">Parallel Programming with MPI\/OpenMP<\/a> im August 2017, organisiert von Thomas W\u00fcst (ID SIS), grossem Interesse. 57 Teilnehmende aus 12 verschiedenen ETH-Departementen (D-BAUG, D-BSSE, D-CHAB, D-ERDW, D-GESS, D-HEST, D-ITET, D-MATH, D-MATL, D-MAVT, D-PHYS, D-USYS) und einer Technologie Plattform (NEXUS), anderen Schweizer und ausl\u00e4ndischen Universit\u00e4ten und Forschungsinstituten (u.a. Harvard University, Paul Scherrer Institut) und auch privaten Unternehmen (Disney Research, Infineon) nahmen dieses Jahr am Kurs teil. <!--more--><\/p>\n<p>Diese erfreuliche Anzahl (ein Zuwachs von mehr als 50% gegen\u00fcber dem letzten Jahr) demonstriert das grosse Interesse und Bed\u00fcrfnis an einem solchen Angebot \u2013 zentral an der ETH Z\u00fcrich und in intensiver, konzentrierter Form.<\/p>\n<p>Referent des Kurses war <a href=\"https:\/\/www.hlrs.de\/en\/about-us\/organization\/people\/person\/rabenseifner\/\" target=\"_blank\" rel=\"noopener\">Rolf Rabenseifner<\/a> vom H\u00f6chstleistungsrechenzentrum Stuttgart (<a href=\"https:\/\/www.hlrs.de\/\" target=\"_blank\" rel=\"noopener\">HLRS<\/a>). Rolf Rabenseifner ist ein weltweiter Experte in paralleler Programmierung und Mitglied des MPI-Steering Committee. Er lehrt parallele Programmierkonzepte und Techniken an deutschen, und internationalen Universit\u00e4ten und Forschungs- und Hochleistungsrechenzentren (z.B. Forschungszentrum J\u00fclich) sowie in zahlreichen Workshops und Konferenzen (z.B. <a href=\"http:\/\/www.supercomp.org\/\" target=\"_blank\" rel=\"noopener\">Supercomputing<\/a> Konferenz). Es ist darum f\u00fcr die ID eine spezielle Ehre, Rolf Rabenseifner f\u00fcr diesen Kurs an der ETH Z\u00fcrich zu gewinnen.<\/p>\n<p>Der Kurs richtete sich sowohl an Anf\u00e4ngerinnen und Anf\u00e4nger als auch an Fortgeschrittene mit einiger Programmiererfahrung in C\/C++ oder Fortran, um in vier intensiven Tagen einen gut ausgewogenen (im Sinn von \u00abbreath and depth\u00bb) Einblick in die parallelen Programmiermodelle MPI und OpenMP zu gewinnen. Optional konnte man sich auch nur f\u00fcr die ersten zwei (beginning level) oder die letzten beiden (advanced level) Kurstage anmelden. Die grosse Mehrheit der Teilnehmenden w\u00e4hlte jedoch den gesamten 4-Tageskurs. Angesichts der unterschiedlichen Herkunftsrichtungen, Expertise und Anforderungen der Kursteilnehmenden, vom ersten &#8222;Vortasten&#8220; in die parallele Programmierung auf 10 CPU cores bis zur Skalierungsaufgabe auf &gt;10&#8217;000 CPU cores, war es denn auch eine ziemliche Herausforderung den verschiedenen Bed\u00fcrfnissen gerecht zu werden, welche Rolf Rabenseifner mit seinem didaktischen Geschick jedoch souver\u00e4n meisterte.<\/p>\n<h2>MPI und OpenMP<\/h2>\n<p><a href=\"https:\/\/de.wikipedia.org\/wiki\/Message_Passing_Interface\" target=\"_blank\" rel=\"noopener\">MPI<\/a> (&#8222;Message Passing Interface&#8220;) stellt ein 1994 erstmals ver\u00f6ffentlichter und seither st\u00e4ndig \u00fcberarbeiteter Standard dar, der den Nachrichtenaustausch bei parallelen Berechnungen auf verteilten Computersystemen beschreibt. Eine MPI-Applikation besteht in der Regel aus mehreren miteinander kommunizierenden Prozessen, die alle zu Beginn der Programmausf\u00fchrung parallel gestartet werden. Alle diese Prozesse arbeiten dann gemeinsam an einem Problem und nutzen zum Datenaustausch Nachrichten, welche von einem zum anderen Prozess geschickt werden. Ein Vorteil dieses Prinzips ist es, dass der Nachrichtenaustausch auch \u00fcber Rechnergrenzen hinweg funktioniert (inter-node communication).<sup><a id=\"ref1\" href=\"#fn1\">1<\/a><\/sup><\/p>\n<p><a href=\"https:\/\/de.wikipedia.org\/wiki\/OpenMP\" target=\"_blank\" rel=\"noopener\">OpenMP<\/a> (&#8222;Open Multi-Processing&#8220;) ist eine seit 1997 gemeinschaftlich von verschiedenen Hardware- und Compilerherstellern entwickelte Programmierschnittstelle (API) f\u00fcr die Shared-Memory-Programmierung in C\/C++ und Fortran auf Multiprozessor-Computern. OpenMP kommt zum Einsatz auf Systemen mit gemeinsamem Hauptspeicher (&#8222;shared memory&#8220;), w\u00e4hrend MPI eher f\u00fcr die Parallelisierung von verteilten Systemem (&#8222;distributed memory&#8220;) gedacht ist. Bei modernen High-Performance und Supercomputern werden OpenMP und MPI oftmals zusammen eingesetzt.<sup><a id=\"ref1\" href=\"#fn1\">1<\/a><\/sup><\/p>\n<p>Trotz j\u00fcngeren Programmier-Entwicklungen, welche spezifische M\u00f6glichkeiten der Parallelisierung moderner Hardware Architekturen zum Teil einfacher abbilden k\u00f6nnen, stellen MPI und OpenMP nach wie vor die \u00abworkhorses\u00bb der parallelen Programmierung dar. Dies liegt einerseits an ihren generischen und vielseitigen Einsatzm\u00f6glichkeiten als auch an der grossen Anzahl von wichtigen, wissenschaftlichen &#8222;legacy&#8220; codes.<\/p>\n<h2>Hands-on auf Euler HPC Cluster<\/h2>\n<p>Der 4-Tageskurs bot neben der Vermittlung der zum Teil komplexen, theoretischen Konzepte zus\u00e4tzlich wichtige und notwendige Hands-on-\u00dcbungen an, welche die Teilnehmenden direkt auf dem ETH High Performance Compute Cluster <a href=\"https:\/\/scicomp.ethz.ch\/wiki\/Euler\" target=\"_blank\" rel=\"noopener\">Euler<\/a> durchf\u00fchren konnten. Euler verf\u00fcgt \u00fcber verschiedene, vom <a href=\"https:\/\/scicomp.ethz.ch\/wiki\/Main_Page\" target=\"_blank\" rel=\"noopener\">HPC Team<\/a> st\u00e4ndig aktualisierte, MPI Implementationen und OpenMP-f\u00e4hige Compiler f\u00fcr C\/C++ und Fortran und ist dank seinem leistungsf\u00e4higen InfiniBand Interconnect bestens f\u00fcr parallele Applikationen ausger\u00fcstet.<\/p>\n<h2>Terminplanung 2018<\/h2>\n<p><a href=\"https:\/\/www.ethz.ch\/de\/die-eth-zuerich\/organisation\/abteilungen\/informatikdienste\/personen\/scientific-it-services-a-z.html\" target=\"_blank\" rel=\"noopener\">ID SIS<\/a> plant den Kurs im 2018 wieder anzubieten. &#8222;Leider&#8220; st\u00f6sst der Kurs mit max. 60 Teilnehmenden auch schon an seine Kapazit\u00e4tsgrenze, einerseits aufgrund der begrenzten, gegenw\u00e4rtigen R\u00e4umlichkeiten (der Computerraum wurde uns freundlicherweise von der ISG D-USYS zur Verf\u00fcgung gestellt), andererseits zur Gew\u00e4hrleistung einer hohen Qualit\u00e4t der Wissensvermittlung und Unterst\u00fctzung der Teilnehmenden f\u00fcr die \u00dcbungen. Wir sind gespannt wie das Interesse n\u00e4chstes Jahr sein wird.<\/p>\n<figure id=\"attachment_10585\" aria-describedby=\"caption-attachment-10585\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_155509.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10585 size-medium\" src=\"https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_155509-300x169.jpg\" alt=\"20170821_155509\" width=\"300\" height=\"169\" srcset=\"https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_155509-300x169.jpg 300w, https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_155509-768x432.jpg 768w, https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_155509-1024x576.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-10585\" class=\"wp-caption-text\">Grosse Konzentration trotz etwas engen Platzverh\u00e4ltnissen und sommerlichen Temperaturen w\u00e4hrend des 4-Tageskurses in paralleler Programmierung im August 2017 (Rolf Rabenseifner stehend mit weissgrau kariertem Hemd).<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_10587\" aria-describedby=\"caption-attachment-10587\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_163219.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10587 size-medium\" src=\"https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_163219-300x169.jpg\" alt=\"20170821_163219\" width=\"300\" height=\"169\" srcset=\"https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_163219-300x169.jpg 300w, https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_163219-768x432.jpg 768w, https:\/\/blogs.ethz.ch\/id\/files\/2017\/10\/20170821_163219-1024x576.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-10587\" class=\"wp-caption-text\">Blocking vs non-blocking point-to-point communication &#8222;erlebbar&#8220; gemacht&#8230;<\/figcaption><\/figure>\n<h2>Referenzen<\/h2>\n<ol>\n<li><a href=\"http:\/\/mpi-forum.org\/\" target=\"_blank\" rel=\"noopener\">MPI Forum<\/a><\/li>\n<li><a href=\"https:\/\/computing.llnl.gov\/tutorials\/mpi\/\" target=\"_blank\" rel=\"noopener\">Message Passing Interface Tutorial<\/a> (in englisch)<\/li>\n<li><a href=\"http:\/\/www.openmp.org\/\" target=\"_blank\" rel=\"noopener\">OpenMP API Specification<\/a><\/li>\n<li><a href=\"https:\/\/computing.llnl.gov\/tutorials\/openMP\/\" target=\"_blank\" rel=\"noopener\">OpenMP Tutorial<\/a> (in englisch)<\/li>\n<\/ol>\n<p><sup id=\"fn1\">1. Texte in ge\u00e4nderter und gek\u00fcrzter Form von <a href=\"https:\/\/de.wikipedia.org\/\" target=\"_blank\" rel=\"noopener\">Wikipedia<\/a> \u00fcbernommen.<\/sup><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zum zweiten Mal erfreute sich der 4-Tageskurs Parallel Programming with MPI\/OpenMP im August 2017 grossem Interesse. <\/p>\n","protected":false},"author":43819,"featured_media":10585,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1175,25,1177,898,1178],"tags":[3657,141856,229011,888,173296,1785,1283],"class_list":["post-10583","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kommunikation","category-news","category-software-arbeitsplatze","category-support","category-wissenschaftl-rechnen","tag-cc","tag-euler","tag-fortran","tag-hpc","tag-id-sis","tag-kurse","tag-programmierung"],"_links":{"self":[{"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/posts\/10583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/users\/43819"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/comments?post=10583"}],"version-history":[{"count":0,"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/posts\/10583\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/media\/10585"}],"wp:attachment":[{"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/media?parent=10583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/categories?post=10583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ethz.ch\/id\/wp-json\/wp\/v2\/tags?post=10583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}