https://hpc-wiki.info/hpc/api.php?action=feedcontributions&user=Marc-andre-hermanns-bc32%40rwth-aachen.de&feedformat=atomHPC Wiki - User contributions [en]2024-03-29T00:55:44ZUser contributionsMediaWiki 1.35.9https://hpc-wiki.info/hpc/index.php?title=Streaming_scientific_software_with_EESSI&diff=5036Streaming scientific software with EESSI2024-03-28T12:34:47Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix typo</p>
<hr />
<div>[[Category:HPC-User]]<br />
<br />
The <b>European Environment for Scientific Software Installations</b> (EESSI, pronounced as "easy", also see [http://www.eessi.io/]), provides a "streaming service" for scientific software.<br />
It is based on the Cern VM File System (CVMFS), which is a read-only (from a user-perspective) file system for software distribution.<br />
CVMFS was originally developed in the context of worldwide distributed GRID computing and has been widely used in production for many years.<br />
<br />
The general idea is to install a CVMFS client on all user-facing machines in an HPC cluster.<br />
The client is easily configured to connect to the EESSI servers to download and cache files via HTTP.<br />
<br />
__toc__<br />
<br />
== Motivation ==<br />
Researchers migrating from their laptops and workstations to HPC systems may need rethink their software environment before they can start their calculations.<br />
<br />
The same is true when researchers migrate between HPC systems, as many systems have their own conventions and technological solutions for providing the required research software, e.g. in the form of LMod modules.<br />
<br />
Another reason is the heterogeneous hardware environment which may require special software installations and configurations, e.g. optimized builds for x86 CPUs, ARM CPUs, FPGAs or GPUs, and libraries for fast interconnect technologies.<br />
<br />
== Loading Software Modules ==<br />
On an HPC cluster, you can check if CVMFS is available, e.g. by running<br />
<br />
<syntaxhighlight lang="bash"><br />
less /cvmfs/software.eessi.io/README.eessi<br />
</syntaxhighlight><br />
<br />
In this case, an init script has to be sourced:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ source /cvmfs/software.eessi.io/versions/2023.06/init/bash <br />
Found EESSI repo @ /cvmfs/software.eessi.io/versions/2023.06!<br />
archdetect says x86_64/intel/haswell<br />
Using x86_64/intel/haswell as software subdirectory.<br />
Found Lmod configuration file at /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/.lmod/lmodrc.lua<br />
Using /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/modules/all as the directory to be added to MODULEPATH.<br />
Found Lmod configuration file at /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/.lmod/lmodrc.lua<br />
Found Lmod SitePackage.lua file at /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/.lmod/SitePackage.lua<br />
Initializing Lmod...<br />
Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/modules/all to $MODULEPATH...<br />
Environment set up to use EESSI (2023.06), have fun!<br />
<br />
{EESSI 2023.06} $ module avail # run the usual module commands<br />
</syntaxhighlight><br />
<br />
On a laptop, you would have to [https://www.eessi.io/docs/getting_access/native_installation/ install CVMFS] or use an [https://www.eessi.io/docs/getting_access/eessi_container/ EESSI container].<br />
<br />
== Adding Missing Software ==<br />
EESSI is a community driven project built on top of EasyBuild to manage reproducible build recipes.<br />
If an important software module is missing or if you would like to distribute scientific software under your are developing, you can [https://www.eessi.io/docs/adding_software/overview/ contribute by opening a pull request].<br />
<br />
After the pull request is reviewed and approved, an automatic process is building and ingesting the software into the EESSI stack.<br />
<br />
== Additional Resources ==<br />
* [[EESSI (Admin guide)]] for HPC administration topics with respect to EESSI<br />
* The EESSI project [https://www.eessi.io/docs/support/ provides support]!<br />
* https://www.eessi.io/<br />
* https://www.eessi.io/docs/</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:VTune_UsefulTips.pdf&diff=4999File:VTune UsefulTips.pdf2023-08-09T11:48:15Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Marc-andre-hermanns-bc32@rwth-aachen.de uploaded a new version of File:VTune UsefulTips.pdf</p>
<hr />
<div>== Summary ==<br />
Slides for the 4th video of the Intel VTune tutorial series.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:VTune_analysis_types_compressed.pdf&diff=4998File:VTune analysis types compressed.pdf2023-08-09T11:44:20Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Marc-andre-hermanns-bc32@rwth-aachen.de uploaded a new version of File:VTune analysis types compressed.pdf</p>
<hr />
<div>== Summary ==<br />
Slides for the third section of the Intel VTune tutorial series. (compressed)</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:VTune_CPUArchitecture.pdf&diff=4997File:VTune CPUArchitecture.pdf2023-08-09T11:36:30Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Marc-andre-hermanns-bc32@rwth-aachen.de uploaded a new version of File:VTune CPUArchitecture.pdf</p>
<hr />
<div>== Summary ==<br />
Slides for the CPU architecture section of the Intel VTune tutorial series</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:VTune_introduction.pdf&diff=4996File:VTune introduction.pdf2023-08-09T11:33:20Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Marc-andre-hermanns-bc32@rwth-aachen.de uploaded a new version of File:VTune introduction.pdf</p>
<hr />
<div>== Summary ==<br />
Slides for the Intel VTune introduction tutorial</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:VTune_introduction.pdf&diff=4995File:VTune introduction.pdf2023-08-09T11:27:29Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Marc-andre-hermanns-bc32@rwth-aachen.de uploaded a new version of File:VTune introduction.pdf</p>
<hr />
<div>== Summary ==<br />
Slides for the Intel VTune introduction tutorial</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Intel_VTune_Tutorial/Introduction&diff=4994Intel VTune Tutorial/Introduction2023-08-09T08:36:26Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix missing whitespace in media reference of Slides</p>
<hr />
<div>[[Category:Tutorials|Intel VTune Tutorials: Introduction]]<nowiki /><br />
{{DISPLAYTITLE:Intel VTune Tutorial: Introduction}}<nowiki /><br />
{{Syllabus Intel VTune Tutorial}}<br />
__TOC__<br />
<br />
The first tutorial video is introducing the Intel VTune profiler.<br />
It covers questions of what it is and how it works.<br />
The video ends with an example of how to run a first analysis with the "performance snapshot" type.<br />
<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>4jwhjsN_Ock</youtube><br />
<br />
([[Media:VTune_introduction.pdf |Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
{{hidden begin <br />
|title = 1. What does a profiler do?}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
- Producing pretty screenshots of source code for presentations<br />
|| Not correct. A profiler might be able to show source code, but its primary purpose is not presentation, but analysis.<br />
- Improving the performance of a program<br />
|| Not correct. A profiler can help with optimization, but it does not optimize an application on its own<br />
+ Provides insight into an application<br />
|| Correct! For example, it measures time spent in certain sections of the code and can quantify the parallel performance.<br />
</quiz><br />
{{hidden end}}<br />
{{hidden begin <br />
|title = 2. What does the Performance Snapshot analysis type do?}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
+ Use first measurements to recommend which analysis types should be considered next<br />
|| Correct, the Performance Snapshot is a good first step that highlights which analysis types are likely to help the most.<br />
- Provide an in-depth performance analysis with detailed results<br />
|| Not correct. The result presentation is brief and intended to give an overview.<br />
- Automatically run a shorter version of an existing application<br />
|| Not correct. The user has to decide about the test case workload and analysis types don't affect this. <br />
</quiz><br />
{{hidden end}}<br />
{{hidden begin <br />
|title = 3. What does event based sampling refer to??}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
- In-depth instrumentation of an application during compilation to send performance "events" to the analysis application<br />
|| Not correct. Event based sampling does not require the application to be recompiled with instrumentation. The application does not necessarily know that it is being analysed.<br />
- Performance analysis of an application by analysing the user input events<br />
|| Not correct. I have no idea how that would even work. But Keyboards and mice do send "events" as well.<br />
+ Regular sampling of performance counters during program execution<br />
|| Correct. Performance counters count events and regular samples are attributed the current location in the program execution.<br />
</quiz><br />
{{hidden end}}<br />
{{hidden begin <br />
|title = 4. Do you always need the kernel module to profile with Intel VTune?}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
- Yes, there is no other way for VTune to access the hardware performance counters<br />
|| Not correct. On an average Linux computer, it is possible to go through Linux perf or use the less detailed "user sampling" mode.<br />
+ No, VTune can use "Linux perf" or the less detailed "user sampling" mode<br />
|| Correct! You can always run a less detailed analysis or go through "Linux perf". VTune will tell you in the GUI if it is possible or not.<br />
- No, VTune can always access performance counters<br />
|| Not correct. A system administrator might restrict the access for security reasons, for example.<br />
</quiz><br />
{{hidden end}}<br />
{{hidden begin <br />
|title = 5. How do you start Intel VTune? (Assuming a working installation)}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
- By typing <source enclose="none">intelvtune</source> in the commandline<br />
|| Not correct. This is command does not exist by default.<br />
- <source enclose="none">vtune-gui</source> will always work<br />
|| Not correct. This depends on how VTune was installed. It is often required to use a source script or load an environment module.<br />
+ <source enclose="none">vtune-gui</source>, after the environment was set up with a source script or through <source enclose="none">module load</source> (depends on installation)<br />
|| Correct! It is likely that you have to set up your environment first. Either through a source script that is shipped with the installation or a module load.<br />
</quiz><br />
{{hidden end}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites&diff=4973MPI in Small Bites2023-01-13T12:43:18Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: /* Blocking Point-to-Point Communication */</p>
<hr />
<div>[[Category:Tutorials]] [[Category:HPC-Developer]]<nowiki /><br />
[[Category:Tutorials | MPI in Small Bites]]<nowiki /><br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
<br />
== Introduction ==<br />
<br />
Welcome to the HPC.NRW OpenMP Online Tutorial!<br />
<br />
Using the [[MPI | Message Passing Interface (MPI)]] is the de-facto standard for parallel distributed-memory programming. MPI defines an API for portable and scalable process-based parallelism.<br />
<br />
== How to proceed through this tutorial? ==<br />
<br />
This tutorial is targeted for novice HPC developers as an initial introduction to distributed-memory programming with MPI. <br />
<br />
The tutorial is made up of several sections, each covering a separate stand-alone topic, but they are designed to be worked through '''in order'''.<br />
<br />
Each tutorial consists of a '''short video''', followed by a couple of quiz questions for a self control. Everything in the tutorial is platform-independent and works with every operating system with an OpenMP-compatible compiler available. Although most examples are written in C/C++, the fundamental concepts also work with Fortran.<br />
<br />
If you have any questions or encounter problems, you can contact us via e-mail at [mailto:tutorials@hpc.nrw tutorials@hpc.nrw].<br />
<br />
== Who created this tutorial? ==<br />
<br />
This tutorial has been developed within the framework of the [https://hpc.dh.nrw/ HPC.NRW] project. It is part of a [[:Category:Tutorials|series of online tutorials]] on various HPC-related topics, all of which were created by HPC.NRW members.<br />
<br />
The initial online course is based on the in-person MPI courses developed at the IT Center of RWTH Aachen University. The speaker is '''Dr. Marc-André Hermanns''' from RWTH Aachen University. Marc-André works at the university's IT center and has been an active member of the MPI Forum for many years.<br />
<br />
__NOTOC__<br />
<br />
== Topics ==<br />
<br />
=== [[MPI_in_Small_Bites/Overview | Introduction and Overview]] ===<br />
This session provides a brief introduction of distributed-memory programming and <br />
<br />
=== [[MPI_in_Small_Bites/Basic_Concepts | Basic Concepts ]] ===<br />
This session introduces basic concepts and terminology of MPI.<br />
<br />
=== [[MPI_in_Small_Bites/Blocking_Point-to-Point_Communication |Blocking Point-to-Point Communication ]] ===<br />
This session provides an introduction into the point-to-point communication paradigm as defined by MPI.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:Hpc.nrw_MPI_in_Small_Bites_03_Blocking_Point-to-Point_Communication.pdf&diff=4972File:Hpc.nrw MPI in Small Bites 03 Blocking Point-to-Point Communication.pdf2023-01-13T12:37:07Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:Hpc.nrw_MPI_in_Small_Bites_01_Message_Passing_Basics.pdf&diff=4971File:Hpc.nrw MPI in Small Bites 01 Message Passing Basics.pdf2023-01-13T12:36:44Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:Hpc.nrw_MPI_in_Small_Bites_02_MPI_Concepts.pdf&diff=4970File:Hpc.nrw MPI in Small Bites 02 MPI Concepts.pdf2023-01-13T12:36:10Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Basic_Concepts&diff=4969MPI in Small Bites/Basic Concepts2023-01-13T12:33:05Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:Basic MPI Concepts}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video provides a brief introduction into basic MPI concepts, such as handles to opaque types and blocking vs. non-blocking.<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>giaIDk2vPxU</youtube><br />
<br />
([[Media:hpc.nrw_MPI_in_Small_Bites_02_MPI_Concepts.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Blocking_Point-to-Point_Communication&diff=4968MPI in Small Bites/Blocking Point-to-Point Communication2023-01-13T12:32:48Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:Blocking MPI Point-to-Point Communication}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video introduces blocking point-to-point communication in MPI.<br />
<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>1w6Bxs4D-y8</youtube><br />
<br />
([[Media:hpc.nrw_MPI_in_Small_Bites_03_Blocking_Point-to-Point_Communication.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Basic_Concepts&diff=4967MPI in Small Bites/Basic Concepts2023-01-13T12:31:47Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:Basic MPI Concepts}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video provides a brief introduction into basic MPI concepts, such as handles to opaque types and blocking vs. non-blocking.<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>giaIDk2vPxU</youtube><br />
<br />
([[Media:hpc.nrw_MPI_in_Small_Bites_01_MPI_Concepts.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Overview&diff=4966MPI in Small Bites/Overview2023-01-13T12:31:00Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:MPI Introduction and Overview}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video is the introductory video of the series on MPI, providing an initial motivation for message passing in general and MPI in particular.<br />
<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>x2e5cfw9fR4</youtube><br />
<br />
([[Media:hpc.nrw_MPI_in_Small_Bites_01_Message_Passing_Basics.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=File:GPU_tutorial_saxpy_introduction.pdf&diff=4965File:GPU tutorial saxpy introduction.pdf2022-12-01T12:12:26Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=GPU_Tutorial/Introduction&diff=4964GPU Tutorial/Introduction2022-12-01T12:12:07Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Add video and link to slides</p>
<hr />
<div>[[Category:Tutorials|GPU Computing (Introduction)]]<nowiki /><br />
{{DISPLAYTITLE:GPU Computing (Introduction)}}<nowiki /><br />
{{Syllabus Introduction to GPU Computing}}<nowiki /><br />
__TOC__<br />
<br />
This video introduces GPU computing and the SAXPY.<br />
<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>pW9bpu84i2Y</youtube><br />
<br />
([[Media:GPU_tutorial_saxpy_introduction.pdf |Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
{{hidden begin <br />
|title = 1. For which kind of program can we expect improvements with GPUs?}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
- serial programs<br />
|| Correct: CPU: optimized for low latency (strong single thread); GPU: optimized for throughput (massive parallelism)<br />
+ parallel programs<br />
|| Wrong: CPU: optimized for low latency (strong single thread); GPU: optimized for throughput (massive parallelism)<br />
</quiz><br />
{{hidden end}}<br />
<br />
<br />
{{hidden begin <br />
|title = 2. What does GPU stands for?}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
+ graphics processing unit<br />
|| Correct<br />
- grand powerful unit<br />
|| Wrong<br />
</quiz><br />
{{hidden end}}<br />
<br />
<br />
{{hidden begin <br />
|title = 3. Why do we expect an overhead in the GPU timings?}}<br />
<quiz display=simple><br />
{<br />
|type="()"}<br />
- The data must be copied to an extra device first and has to be transferred back later<br />
|| Correct, but his is not the whole answer.<br />
- A GPU core is "weaker" than a CPU core<br />
|| Correct, but his is not the whole answer.<br />
- For "small" problems like the SAXPY, the whole power of a GPU is rarely used<br />
|| Correct, but his is not the whole answer.<br />
+ All of the above<br />
|| Correct!<br />
</quiz><br />
{{hidden end}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE&diff=4963Benchmarking & Scaling Tutorial/Automated Benchmarking JUBE2022-11-18T12:10:50Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix incomplete sentence.</p>
<hr />
<div>{{DISPLAYTITLE:Automated Benchmarking using JUBE}}<nowiki /><br />
{{Syllabus Benchmarking & Scaling}}<nowiki /><br />
__TOC__<br />
<br />
== Introduction ==<br />
<br />
The Jülich Benchmarking Environment is an application that helps you automate your workflow for system and application benchmarking.<br />
<br />
JUBE allows you to define different steps of your workflow with dependencies between them.<br />
<br />
One key advantage of using JUBE, as opposed to manually running an application in different configurations in a job script is that individual run configurations are automatically separated into separate workpackages with individual run directories, while common files and directories (like input files, preprocessing, etc.) can easily be integrated into the workflow.<br />
<br />
Furthermore, application output (such as the runtime of the application) can easily be parsed and output in CSV or human-readable table format.<br />
<br />
== Writing a minimal configuration ==<br />
<br />
As JUBE executes each workpackage (step with concrete configuration) in its own sandbox, the benchmark configuration must specify a fileset that either copies or links files into the run directory.<br />
Parameters have a separator defined (default is ',') that is used to tokenize the parameter string. Each token will be part of a separate configuration. In this example, the comma-separated list of tasks will result in the parameter <code>tasks</code> with one specific value in 15 different workpackages.<br />
<br />
<syntaxhighlight lang="xml" line><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<jube><br />
<benchmark name="GROMACS" outpath="bench_run"><br />
<comment>A minimal JUBE config to run our GROMACS example</comment><br />
<br />
<!-- Configuration --><br />
<parameterset name="execute_pset"><br />
<parameter name="tasks">1,2,4,8,12,18,24,30,36,42,48,54,60,66,72</parameter><br />
<!-- you could also compute the list using Python <br />
<parameter name="tasks" mode="python"><br />
",".join([str(x) for x in range(1,73) if (x % 6 == 0 and x > 10) or (x % 4 == 0 and x < 10) or x == 2 or x==1 ])<br />
</parameter><br />
--><br />
</parameterset><br />
<br />
<!-- Input files --><br />
<fileset name="gromacs_files"><br />
<link>MD_5NM_WATER.deff</link> <!-- link input file --><br />
</fileset><br />
<br />
<!-- Operation --><br />
<step name="run"><br />
<use>execute_pset</use> <!-- use parameterset --><br />
<use>gromacs_files</use> <!-- use fileset --><br />
<do>srun -n $ntasks gmx_mpi -quiet mdrun -deffnm MD_5NM_WATER -nsteps 10000 -ntomp 1 -pin on</do> <!-- start GROMACS --><br />
</step> <br />
</benchmark><br />
</jube><br />
</syntaxhighlight><br />
<br />
== Further information ==<br />
<br />
* [https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html JUBE Documentation ]<br />
* [https://www.youtube.com/watch?v=CTexZWKhF0I Video: Automated Benchmarking with JUBE ]<br />
* [https://www.youtube.com/watch?v=pC5XZTILt1o Video: Jube by Example ]<br />
* [https://www.youtube.com/watch?v=0u6uKMT79e8 Video: Application Benchmarking with JUBE: Lessons Learned ]<br />
----<br />
'''Next''': [[Benchmarking_%26_Scaling_Tutorial/Results | Plotting and Interpreting Results ]]<br />
<br />
'''Previous''': [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking | Automated Benchmarking using a Job Script ]]</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE&diff=4962Benchmarking & Scaling Tutorial/Automated Benchmarking JUBE2022-11-18T11:48:55Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Initial minimal config</p>
<hr />
<div>{{DISPLAYTITLE:Automated Benchmarking using JUBE}}<nowiki /><br />
{{Syllabus Benchmarking & Scaling}}<nowiki /><br />
__TOC__<br />
<br />
== Introduction ==<br />
<br />
The Jülich Benchmarking Environment is an application that helps you automate your workflow for system and application benchmarking.<br />
<br />
JUBE allows you to define different steps of your workflow with dependencies between them.<br />
<br />
One key advantage of using JUBE, as opposed to manually running an application in different configurations in a job script is that individual run configurations are automatically separated into separate workpackages with individual run directories, while common files and directories (like input files, preprocessing, etc.) can easily be integrated into the workflow.<br />
<br />
Furthermore, application output (such as the runtime of the application) can easily be parsed and output in CSV or human-readable table format.<br />
<br />
== Writing a minimal configuration ==<br />
<br />
As JUBE executes each workpackage (step with concrete configuration) in its own sandbox, the benchmark configuration must specify <br />
<syntaxhighlight lang="xml" line><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<jube><br />
<benchmark name="GROMACS" outpath="bench_run"><br />
<comment>A minimal JUBE config to run our GROMACS example</comment><br />
<br />
<!-- Configuration --><br />
<parameterset name="execute_pset"><br />
<parameter name="tasks">1,2,4,8,12,18,24,30,36,42,48,54,60,66,72</parameter><br />
<!-- you could also compute the list using Python <br />
<parameter name="tasks" mode="python"><br />
",".join([str(x) for x in range(1,73) if (x % 6 == 0 and x > 10) or (x % 4 == 0 and x < 10) or x == 2 or x==1 ])<br />
</parameter><br />
--><br />
</parameterset><br />
<br />
<!-- Input files --><br />
<fileset name="gromacs_files"><br />
<link>MD_5NM_WATER.deff</link> <!-- link input file --><br />
</fileset><br />
<br />
<!-- Operation --><br />
<step name="run"><br />
<use>execute_pset</use> <!-- use parameterset --><br />
<use>gromacs_files</use> <!-- use fileset --><br />
<do>srun -n $ntasks gmx_mpi -quiet mdrun -deffnm MD_5NM_WATER -nsteps 10000 -ntomp 1 -pin on</do> <!-- start GROMACS --><br />
</step> <br />
</benchmark><br />
</jube><br />
</syntaxhighlight><br />
<br />
== Further information ==<br />
<br />
* [https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html JUBE Documentation ]<br />
* [https://www.youtube.com/watch?v=CTexZWKhF0I Video: Automated Benchmarking with JUBE ]<br />
* [https://www.youtube.com/watch?v=pC5XZTILt1o Video: Jube by Example ]<br />
* [https://www.youtube.com/watch?v=0u6uKMT79e8 Video: Application Benchmarking with JUBE: Lessons Learned ]<br />
----<br />
'''Next''': [[Benchmarking_%26_Scaling_Tutorial/Results | Plotting and Interpreting Results ]]<br />
<br />
'''Previous''': [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking | Automated Benchmarking using a Job Script ]]</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE&diff=4961Benchmarking & Scaling Tutorial/Automated Benchmarking JUBE2022-11-17T14:39:47Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fixing title</p>
<hr />
<div>{{DISPLAYTITLE:Automated Benchmarking using JUBE}}<nowiki /><br />
{{Syllabus Benchmarking & Scaling}}<nowiki /><br />
__TOC__<br />
<br />
== Introduction ==<br />
<br />
The Jülich Benchmarking Environment is an application that helps you automate your workflow for system and application benchmarking.<br />
<br />
JUBE allows you to define different steps of your workflow with dependencies between them.<br />
<br />
One key advantage of using JUBE, as opposed to manually running an application in different configurations in a job script is that individual run configurations are automatically separated into separate workpackages with individual run directories, while common files and directories (like input files, preprocessing, etc.) can easily be integrated into the workflow.<br />
<br />
Furthermore, application output (such as the runtime of the application) can easily be parsed and output in CSV or human-readable table format.<br />
<br />
== Further information ==<br />
<br />
* [https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html JUBE Documentation ]<br />
* [https://www.youtube.com/watch?v=CTexZWKhF0I Video: Automated Benchmarking with JUBE ]<br />
* [https://www.youtube.com/watch?v=pC5XZTILt1o Video: Jube by Example ]<br />
* [https://www.youtube.com/watch?v=0u6uKMT79e8 Video: Application Benchmarking with JUBE: Lessons Learned ]<br />
----<br />
'''Next''': [[Benchmarking_%26_Scaling_Tutorial/Results | Plotting and Interpreting Results ]]<br />
<br />
'''Previous''': [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking | Automated Benchmarking using a Job Script ]]</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking&diff=4960Benchmarking & Scaling Tutorial/Automated Benchmarking2022-11-17T14:39:06Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Setting 'next' link to JUBE page</p>
<hr />
<div>{{DISPLAYTITLE:Automated Benchmarking using a Job Script}}<nowiki /><br />
{{Syllabus Benchmarking & Scaling}}<nowiki /><br />
__TOC__<br />
<br />
== Writing a Bash script ==<br />
<br />
While still being logged in at our interactive session on the compute node, we can start writing a Bash script to automate running simulations with different amounts of cores. After all we want to know how our simulation scales and determine the speedup.<br />
<br />
We will start by loading all needed modules and defining a variable GMX to hold our complete GROMACS command<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/bash<br />
<br />
# Load all needed modules (adjust to your specific site!)<br />
module load GROMACS<br />
<br />
GMX="gmx_mpi -quiet mdrun -deffnm MD_5NM_WATER -nsteps 10000 -ntomp 1 -pin on "<br />
<br />
</syntaxhighlight><br />
<br />
<br />
Next we will create a loop over different amounts of cores our simulation should run with. It is advisable to start with the highest core count first, as these take the least amount of time. Which core counts you want to test depends on the system you are running on. Make sure to include the serial case (1 core) and the full node. In the first example we will use all ''logical'' cores (i.e. use hyperthreading). It is also a good idea to test a full ''socket'', in this case 36 cores. We will also tell ''srun'' to bind processes to threads to make sure we are actually using all threads of a physical core even with lower core counts.<br />
<br />
<syntaxhighlight lang="bash"><br />
for P in 72 66 60 54 48 42 36 30 24 18 12 8 4 2 1; do<br />
srun --cpu-bind=threads -n $P $GMX<br />
done<br />
</syntaxhighlight><br />
<br />
<br />
We could now run this and collect the performance metrics GROMACS itself provides, however this will neglect the time to spawn all processes. Therefore we will time the runtime ourselves, which should also be useful for codes that do ''not'' provide any metrics directly. To do this we will use the builtin ''date'' function before and after the simulation and calculate the time in between. In addition we will redirect the output of GROMACS to a file. Note that GROMACS writes to <code>stderr</code> so we have to redirect it using <code>2>&1</code><br />
<br />
<syntaxhighlight lang="bash"><br />
for P in 72 66 60 54 48 42 36 30 24 18 12 8 4 2 1; do<br />
START=$(date +%s.%N)<br />
srun --cpu-bind=threads -n $P $GMX > gromacs.log 2>&1<br />
END=$(date +%s.%N)<br />
RUNTIME=$(echo "$END - $START" | bc -l)<br />
done<br />
</syntaxhighlight><br />
<br />
<br />
We also want to write out the used number of cores and the measured time for each run to the console (stdout) using a <code>printf</code> statement. In addition we add a little header before the loop to know want the numbers actually mean<br />
<br />
<syntaxhighlight lang="bash"><br />
echo "# Cores Time/s"<br />
for P in 72 66 60 54 48 42 36 30 24 18 12 8 4 2 1; do<br />
START=$(date +%s.%N)<br />
srun --cpu-bind=threads -n $P $GMX > gromacs.log 2>&1<br />
END=$(date +%s.%N)<br />
RUNTIME=$(echo "$END - $START" | bc -l)<br />
printf "%3d %5.2f\n" $P $RUNTIME<br />
done<br />
</syntaxhighlight><br />
<br />
<br />
As a last step, we want to repeat the simulation for a specific core count five times to account for any outliers. The final script now looks like this<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/bash<br />
<br />
# Load all needed modules (adjust to your specific site!)<br />
module load GROMACS<br />
<br />
GMX="gmx_mpi -quiet mdrun -deffnm MD_5NM_WATER -nsteps 10000 -ntomp 1 -pin on "<br />
<br />
echo "# Cores Time/s"<br />
for P in 72 66 60 54 48 42 36 30 24 18 12 8 4 2 1; do<br />
for i in $(seq 5); do<br />
START=$(date +%s.%N)<br />
srun --cpu-bind=threads -n $P $GMX > gromacs.log 2>&1<br />
END=$(date +%s.%N)<br />
RUNTIME=$(echo "$END - $START" | bc -l)<br />
printf "%3d %5.2f\n" $P $RUNTIME<br />
done<br />
done<br />
<br />
</syntaxhighlight><br />
<br />
<br />
We can save this script in a file called e.g. <code>job.sh</code> and run it via the bash command. To see the output in the terminal and save it to file at the same time we pipe it to the <code>tee</code> command<br />
<br />
bash job.sh | tee timings.dat<br />
<br />
The output will look similar to this<br />
<br />
[[File:Benchmark_tutorial_gromacs_5.png|600px]]<br />
<br />
<br />
== Transform to a job script ==<br />
<br />
We can easily transform this into a SLURM job script by adding the necessary <code>SBATCH</code> pragmas. Here we also show you the job script to only use ''physical'' cores instead of all threads per core by using <code>--cpu-bind=cores</code> and reducing the total amount of cores to 36. Note that we still request ''all logical cores'' to receive a full node. Adjust the <code>SBATCH</code> pragmas for your site!<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/bash<br />
<br />
#SBATCH --nodes=1<br />
#SBATCH --ntasks-per-node=72<br />
#SBATCH --partition=express<br />
#SBATCH --time=01:00:00<br />
#SBATCH --job-name=benchmark<br />
#SBATCH --output=benchmark_results_noHT.out<br />
<br />
# Load all needed modules (adjust to your specific site!)<br />
module load GROMACS<br />
<br />
GMX="gmx_mpi -quiet mdrun -deffnm MD_5NM_WATER -nsteps 10000 -ntomp 1 -pin on "<br />
<br />
echo "# Cores Time/s"<br />
for P in 36 30 24 18 12 8 4 2 1; do<br />
for i in $(seq 5); do<br />
START=$(date +%s.%N)<br />
srun --cpu-bind=core -n $P $GMX > gromacs.log 2>&1<br />
END=$(date +%s.%N)<br />
RUNTIME=$(echo "$END - $START" | bc -l)<br />
printf "%3d %5.2f\n" $P $RUNTIME<br />
done<br />
done<br />
<br />
</syntaxhighlight><br />
<br />
----<br />
'''Next''': [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE | Automated Benchmarking using JUBE ]]<br />
<br />
'''Previous''': [[Benchmarking_%26_Scaling_Tutorial/Manual_Benchmarking | Interactive Manual Benchmarking ]]</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE&diff=4959Benchmarking & Scaling Tutorial/Automated Benchmarking JUBE2022-11-17T14:37:33Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Initial content</p>
<hr />
<div>{{DISPLAYTITLE:Automated Benchmarking using a Job Script}}<nowiki /><br />
{{Syllabus Benchmarking & Scaling}}<nowiki /><br />
__TOC__<br />
<br />
== Introduction ==<br />
<br />
The Jülich Benchmarking Environment is an application that helps you automate your workflow for system and application benchmarking.<br />
<br />
JUBE allows you to define different steps of your workflow with dependencies between them.<br />
<br />
One key advantage of using JUBE, as opposed to manually running an application in different configurations in a job script is that individual run configurations are automatically separated into separate workpackages with individual run directories, while common files and directories (like input files, preprocessing, etc.) can easily be integrated into the workflow.<br />
<br />
Furthermore, application output (such as the runtime of the application) can easily be parsed and output in CSV or human-readable table format.<br />
<br />
== Further information ==<br />
<br />
* [https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html JUBE Documentation ]<br />
* [https://www.youtube.com/watch?v=CTexZWKhF0I Video: Automated Benchmarking with JUBE ]<br />
* [https://www.youtube.com/watch?v=pC5XZTILt1o Video: Jube by Example ]<br />
* [https://www.youtube.com/watch?v=0u6uKMT79e8 Video: Application Benchmarking with JUBE: Lessons Learned ]<br />
----<br />
'''Next''': [[Benchmarking_%26_Scaling_Tutorial/Results | Plotting and Interpreting Results ]]<br />
<br />
'''Previous''': [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking | Automated Benchmarking using a Job Script ]]</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_Benchmarking_%26_Scaling&diff=4956Template:Syllabus Benchmarking & Scaling2022-11-16T16:06:24Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Adding curriculum entry for JUBE page</p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = Benchmarking & Scaling<br />
| provider = [https://hpc.nrw/ HPC.NRW]<br />
| contact = tutorials@hpc.nrw<br />
| type = Online<br />
| topic = Performance Analysis<br />
| license = {{License_CCBYSA}}<br />
| intro = Benchmarking_%26_Scaling_Tutorial<br />
| part1 = [[Benchmarking_%26_Scaling_Tutorial/Introduction | Introduction & Theory]]<br />
| part2 = [[Benchmarking_%26_Scaling_Tutorial/Manual_Benchmarking | Interactive Manual Benchmarking]]<br />
| part3 = [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking | Automated Benchmarking using a Job Script]]<br />
| part4 = [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE | Automated Benchmarking using JUBE]]<br />
| part5 = [[Benchmarking_%26_Scaling_Tutorial/Results | Plotting & Interpreting Results]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Benchmarking_%26_Scaling_Tutorial&diff=4955Benchmarking & Scaling Tutorial2022-11-16T13:38:08Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Added Link to JUBE page</p>
<hr />
<div>[[Category:Tutorials]]<br />
[[Category:Tutorials | Benchmarking & Scaling Tutorial]]<br />
<br />
{{Syllabus Benchmarking & Scaling}}<br />
<br />
This tutorial is meant to help you benchmark your application on an HPC cluster environment and to optimise the use of available resources. We will explain why you should benchmark a software you plan to run on a cluster before doing any productive calculations, what scalability is, tell you about potential bottlenecks and refer to advanced toolkits which can automate the process.<br />
<br />
<br />
__NOTOC__<br />
<br />
== Part I ==<br />
<br />
=== [[Benchmarking_%26_Scaling_Tutorial/Introduction | Introduction and Theory]] ===<br />
<br />
=== [[Benchmarking_%26_Scaling_Tutorial/Manual_Benchmarking | Interactive Manual Benchmarking ]] ===<br />
<br />
=== [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking | Automated Benchmarking using a Job Script ]] ===<br />
<br />
=== [[Benchmarking_%26_Scaling_Tutorial/Automated_Benchmarking_JUBE | Automated Benchmarking using JUBE ]] ===<br />
<br />
=== [[Benchmarking_%26_Scaling_Tutorial/Results | Plotting and Interpreting Results ]] ===<br />
<br />
<!--<br />
== Part II ==<br />
<br />
Jube<br />
--></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Blocking_Point-to-Point_Communication&diff=4951MPI in Small Bites/Blocking Point-to-Point Communication2022-09-23T14:05:59Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Initial page (without quiz)</p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:Blocking MPI Point-to-Point Communication}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video introduces blocking point-to-point communication in MPI.<br />
<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>1w6Bxs4D-y8</youtube><br />
<br />
([[Media:hpc.nrw_01_Introduction-Overview.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Basic_Concepts&diff=4950MPI in Small Bites/Basic Concepts2022-09-23T14:04:11Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Initial page (without quiz)</p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:Basic MPI Concepts}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video provides a brief introduction into basic MPI concepts, such as handles to opaque types and blocking vs. non-blocking.<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>giaIDk2vPxU</youtube><br />
<br />
([[Media:hpc.nrw_01_Introduction-Overview.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites/Overview&diff=4949MPI in Small Bites/Overview2022-09-23T14:01:50Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Initial page (without quiz)</p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
{{DISPLAYTITLE:MPI Introduction and Overview}}<br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
__TOC__<br />
<br />
This video is the introductory video of the series on MPI, providing an initial motivation for message passing in general and MPI in particular.<br />
<br />
=== Video === <!--T:5--><br />
<br />
<youtube width="600" height="340" right>x2e5cfw9fR4</youtube><br />
<br />
([[Media:hpc.nrw_01_Introduction-Overview.pdf | Slides as pdf]])<br />
<br />
=== Quiz === <!--T:5--> <br />
<br />
tbd.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=MPI_in_Small_Bites&diff=4948MPI in Small Bites2022-09-23T10:20:55Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Created page with "Category:Tutorials Category:HPC-Developer<nowiki /> MPI in Small Bites<nowiki /> {{Syllabus MPI in Small Bites}}<nowiki /> == Introduction ==..."</p>
<hr />
<div>[[Category:Tutorials]] [[Category:HPC-Developer]]<nowiki /><br />
[[Category:Tutorials | MPI in Small Bites]]<nowiki /><br />
{{Syllabus MPI in Small Bites}}<nowiki /><br />
<br />
== Introduction ==<br />
<br />
Welcome to the HPC.NRW OpenMP Online Tutorial!<br />
<br />
Using the [[MPI | Message Passing Interface (MPI)]] is the de-facto standard for parallel distributed-memory programming. MPI defines an API for portable and scalable process-based parallelism.<br />
<br />
== How to proceed through this tutorial? ==<br />
<br />
This tutorial is targeted for novice HPC developers as an initial introduction to distributed-memory programming with MPI. <br />
<br />
The tutorial is made up of several sections, each covering a separate stand-alone topic, but they are designed to be worked through '''in order'''.<br />
<br />
Each tutorial consists of a '''short video''', followed by a couple of quiz questions for a self control. Everything in the tutorial is platform-independent and works with every operating system with an OpenMP-compatible compiler available. Although most examples are written in C/C++, the fundamental concepts also work with Fortran.<br />
<br />
If you have any questions or encounter problems, you can contact us via e-mail at [mailto:tutorials@hpc.nrw tutorials@hpc.nrw].<br />
<br />
== Who created this tutorial? ==<br />
<br />
This tutorial has been developed within the framework of the [https://hpc.dh.nrw/ HPC.NRW] project. It is part of a [[:Category:Tutorials|series of online tutorials]] on various HPC-related topics, all of which were created by HPC.NRW members.<br />
<br />
The initial online course is based on the in-person MPI courses developed at the IT Center of RWTH Aachen University. The speaker is '''Dr. Marc-André Hermanns''' from RWTH Aachen University. Marc-André works at the university's IT center and has been an active member of the MPI Forum for many years.<br />
<br />
__NOTOC__<br />
<br />
== Topics ==<br />
<br />
=== [[MPI_in_Small_Bites/Overview | Introduction and Overview]] ===<br />
This session provides a brief introduction of distributed-memory programming and <br />
<br />
=== [[MPI_in_Small_Bites/Basic_Concepts | Basic Concepts ]] ===<br />
This session introduces basic concepts and terminology of MPI.<br />
<br />
=== [[MPI_in_Small_Bites/Scoping |Blocking Point-to-Point Communication ]] ===<br />
This session provides an introduction into the point-to-point communication paradigm as defined by MPI.</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Git&diff=4947Git2022-09-23T09:50:51Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Changing section title from "stuff" to "topics"</p>
<hr />
<div>[[Category:Basics]][[Category:HPC-User]]<br />
[[Category:Tutorials|Git Tutorials: Basic Git Overview]]<nowiki /><br />
{{DISPLAYTITLE:Git Tutorial: Basic Git Overview}}<nowiki /><br />
{{Syllabus Git Tutorials}}<br />
Git is a version-control system, commonly used for managing source code and coordinating the work of multiple contributors on a software project.<br />
<br />
From a user perspective, the workflow is divided into two stages: first, there are the changes you make to your local copy of the project.<br />
This local copy is called the ''local repository''.<br />
Then, there is also the ''remote repository'' to which the contributors ''push'', i.e., upload, their changes or ''pull'' the current version of the project.<br />
The main advantage is that all contributors can work on their part of the project simultaneously and ''merge'' their changes later on.<br />
<br />
The changes are organized as ''commits''.<br />
Whenever you feel that you have reached a certain goal, e.g. you fixed a bug or implemented a new feature, you should commit your changes.<br />
It is good practice to make only few changes per commit.<br />
<br />
You can also organize the work in ''branches'', where each branch has it's own timeline of commits.<br />
One branch can be branched from another, copying the state of the branch at this specific point.<br />
From then on, they can be worked on independently.<br />
Branches can later be merged again.<br />
This feature is used e.g., if a new feature is implemented in your project.<br />
Then, you would create a new branch where this feature is developed and merge it into the master branch as soon as the development is finished.<br />
<br />
== Creating a Repository ==<br />
Before you can start using git productively, you will have to create a git repository first.<br />
You can create a git repository using a hosting service of your choice.<br />
If you are a member of the RWTH Aachen, you can use the [https://git.rwth-aachen.de/ GitLab].<br />
Otherwise, e.g. [https://github.com/ GitHub] is a free and popular hosting service.<br />
Both provide you with a powerful web interface and rights management, so that you can control who can access or make changes to your project.<br />
It might become necessary that you generate an [[SSH]] key to prove your identity when you access the remote repository.<br />
<br />
== Basic Usage==<br />
When you want to start working with your repository, you will have to clone it to your machine first.<br />
Hosting services usually provide a button labeled 'clone' from which you can copy the repository's URL.<br />
<syntaxhighlight lang="bash"><br />
user@cluster.rz.rwth-aachen.de: $ git clone https://github.com/MyRepository.git<br />
</syntaxhighlight><br />
Assuming that your repository is called MyRepository, git will automatically create a directory with this name and download all files in this repository to your machine.<br />
<br />
If you already cloned your repository to your machine and you want to start working after a break, you should pull from the remote repository. <br />
This will ensure that you have the most recent changes on your machine when you start working.<br />
<syntaxhighlight lang="bash"><br />
user@cluster.rz.rwth-aachen.de: $ git pull<br />
</syntaxhighlight><br />
<br />
Before you start working, when you are done with your work or if you want to commit your changes, it is a good idea to request the repository's status from git.<br />
<syntaxhighlight lang="bash"><br />
user@cluster.rz.rwth-aachen.de: $ git status<br />
</syntaxhighlight><br />
<br />
When you have worked on your source code and reached a point where you feel confident to commit your changes, you have to tell git which files you want to commit.<br />
Ask git for the repository status and it will give you a list of all files that have changed.<br />
Then, you can selectively ''stage'' files for your commit, i.e. add them to the list of files for your commit.<br />
<syntaxhighlight lang="bash"><br />
user@cluster.rz.rwth-aachen.de: $ git add File0 [File1 ...]<br />
</syntaxhighlight><br />
<br />
Always confirm that you have staged the correct files by taking a look at the status!<br />
If everything is correct, you can commit your changes and add a description of your changes.<br />
<syntaxhighlight lang="bash"><br />
user@cluster.rz.rwth-aachen.de: $ git commit -m "I changed everything."<br />
</syntaxhighlight><br />
<br />
Git will confirm your commit and then you are ready to push your changes to the remote repository.<br />
<syntaxhighlight lang="bash"><br />
user@cluster.rz.rwth-aachen.de: $ git push<br />
</syntaxhighlight><br />
<br />
== Advanced Topics ==<br />
If you and another contributor have worked on the same files and git cannot automatically resolve these conflicts, the merge conflicts have to be resolved manually.<br />
A good tutorial on how to merge your changes can be found in the GitHub Documentation: [https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line/ Resolving a merge conflict using the command line].<br />
<br />
A more detailed explanation of branches can be found here: [https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is Git - What a Branch Is].<br />
<br />
If you have made a mistake and already commited your changes, you can resort to [https://www.atlassian.com/git/tutorials/undoing-changes/git-revert git revert] or [https://www.atlassian.com/git/tutorials/undoing-changes/git-reset git reset].<br />
The latter should however be used very carefully.<br />
<br />
== Git With GUI ==<br />
For unexperienced users, using the shell can still be difficult.<br />
Then, you might want to use a graphical user interface (GUI) for git.<br />
Some of the most popular git GUIs are [https://tortoisegit.org/ TortoiseGit], the [https://desktop.github.com/ GitHub Desktop Client] or [https://www.sourcetreeapp.com/ SourceTree].<br />
Further, some IDEs have a git integration, e.g. [http://www.vogella.com/tutorials/EclipseGit/article.html Eclipse's EGit]<br />
<br />
== References ==<br />
[https://git-scm.com/docs Git Docs]</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_MPI_in_Small_Bites&diff=4946Template:Syllabus MPI in Small Bites2022-09-23T09:49:36Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Initial MPI Syllabus</p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = MPI in Small Bites<br />
| provider = [https://hpc.nrw/ HPC.NRW]<br />
| contact = tutorials@hpc.nrw<br />
| type = Multi-part video<br />
| topic = Programming Paradigms<br />
| license = {{License_CCBYSA}}<br />
| intro = MPI_in_Small_Bites<br />
| part1 = [[MPI_in_Small_Bites/Overview | Introduction and Overview ]]<br />
| part2 = [[MPI_in_Small_Bites/Basic_Concepts | Basic Concepts ]]<br />
| part3 = [[MPI_in_Small_Bites/Blocking_Point-to-Point_Communication | Blocking Point-to-Point Communication ]]<br />
| # part4 = [[MPI_in_Small_Bites/Non-blocking_Point-to-Point_Communication | Non-blocking Point-to-Point Communication ]]<br />
| # part5 = [[MPI_in_Small_Bites/Blocking_Collective_Communication | Blocking Collective Communication ]]<br />
| # part6 = [[MPI_in_Small_Bites/Non-blocking_Collective_Communication | Blocking Collective Communication ]]<br />
| # part7 = [[MPI_in_Small_Bites/Basic_Derived_Datatypes | Basic Derived Datatypes ]]<br />
| # part8 = [[MPI_in_Small_Bites/Advanced_Derived_Datatypes | Advanced Derived Datatypes ]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Score-P&diff=4811Score-P2022-03-03T16:40:13Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Adding focus element to infobox</p>
<hr />
<div>[[Category:HPC-Developer]]<nowiki /><br />
{{Infobox Software<br />
| name = Score-P<br />
| focus = Performance<br />
| provider = Score-P Development Team<br />
| homepage = https://score-p.org<br />
| email = support@score-p.org<br />
| concurrency = parallel<br />
| pmodel = MPI, SHMEM, OpenMP, Pthreads, CUDA, OpenCL<br />
| lang = C, C++, Fortran, Python<br />
| license = Open Source, BSD-like<br />
}}<nowiki /><br />
Score-P is a performance measurement infrastructure for profiling, event tracing and online analysis of (parallel) HPC applications.<br />
It allows users to instrument and record the behavior of sequential, multi-process ([[MPI]], [[SHMEM]]), thread-parallel ([[OpenMP]], [[Pthreads]]) and accelerator-based ([[CUDA]], [[OpenCL]]) applications as well as hybrid parallel applications. <br />
<br />
== General ==<br />
<br />
Score-P supports a great variety of analysis tools and is open to new ones:<br />
<br />
* Periscope<br />
* [[Scalasca]]<br />
* [[Vampir]]<br />
* [[TAU]]<br />
<br />
It uses the [[OTF2|Open Trace Format Version 2]] for event traces and the [[Cube|Cube4]] profiling format for runtime summaries.<br />
[[OpenMP]] instrumentation is supported through the [[Opari2]] instrumenter.<br />
Score-P is available under the New BSD Open Source license.<br />
<br />
== Instrumentation ==<br />
<br />
Performing automatic instrumentation can simply be done by replacing your compiler command with the appropriate Score-P wrapper.<br />
The following example assumes your C compiler is given by the variable $CC:<br />
<syntaxhighlight lang="bash"><br />
$ scorep $CC <compile_flags><br />
</syntaxhighlight><br />
Score-P also supports MPI applications. Again the corresponding MPI-compiler-wrapper for Score-P needs to be used to ensure correct linking of the MPI libraries. Assuming the MPI C compiler is referenced by the variable $MPICC this looks like:<br />
<syntaxhighlight lang="bash"><br />
$ scorep $MPICC <compile_flags><br />
</syntaxhighlight><br />
<br />
== Measurement ==<br />
<br />
After compiling an instrumented binary it can just be executed and will generate measurement data during its execution.<br />
<br />
Score-P offers several environment variables to control the behavior of the measurement facility within the binary. Some useful environment variables include:<br />
* $SCOREP_ENABLE_PROFILING - enable profiling<br />
* $SCOREP_ENABLE_TRACING - enable tracing<br />
* $SCOREP_TOTAL_MEMORY - total memory in bytes for the measurement system<br />
* $SCOREP_EXPERIMENT_DIRECTORY - name of the experiment directory<br />
* $SCOREP_FILTERING_FILE - a file name which contain the filter rules<br />
* $SCOREP_METRIC_PAPI - PAPI metric names to measure<br />
* $SCOREP_METRIC_RUSAGE - resource usage metric names to measure<br />
Note that tracing is disabled by default because it can cause substantial additional overhead and may produce lots of data, which will ultimately perturb your application runtime behavior during measurement.<br />
More environment variables can be found in the [http://scorepci.pages.jsc.fz-juelich.de/scorep-pipelines/docs/scorep-6.0/pdf/scorep.pdf Score-P documentation] (Appendix G - Score-P Measurement Configuration) or using the command:<br />
<syntaxhighlight lang="bash"><br />
$ scorep-info config-vars --full<br />
</syntaxhighlight><br />
<br />
== Analysis ==<br />
<br />
Score-P produces experiment results in different commonly used formats.<br />
<br />
Call-path profiles are stored in the [[Cube|CUBE4]] format and can be viewed using the [https://www.scalasca.org/scalasca/software/cube-4.x/download.html Cube] tool.<br />
<br />
Event traces are stored in the [https://silc.zih.tu-dresden.de/otf2-current/html/index.html Open Trace Format 2] and can be visualized using tools such as [https://vampir.eu/ Vampir] or automatically analyzed with tools such as [https://www.scalasca.org/ Scalasca].<br />
<br />
== Score-P Plugins == <br />
<br />
Score-P provides two plugin interfaces: metrics, which allows integrating new metric sources, and substrates, which allows adding new event consumers besides profiling and tracing. You can also write your own plugins. <br />
<br />
== Site specific notes ==<br />
=== RWTH ===<br />
In order to use Score-P on the RWTH cluster you need to load the corresponding module.<br />
Performance measurement tools are part of the ''DEV-TOOLS'' module group.<br />
This group can be loaded using the following command:<br />
<syntaxhighlight lang="sh"><br />
$ module load DEV-TOOLS<br />
</syntaxhighlight> <br />
To load the Score-P tool just type and enter:<br />
<syntaxhighlight lang="sh"><br />
$ module load scorep<br />
</syntaxhighlight> <br />
Depending on your currently loaded compiler and MPI implementation this will automatically load the correct version of Score-P for you.<br />
However, if you want to have an overview about all the available Score-P versions use the following command:<br />
<syntaxhighlight lang="sh"><br />
$ module avail scorep<br />
</syntaxhighlight><br />
<br />
=== TU Dresden ===<br />
In order to use Score-P on the Taurus cluster you need to load the corresponding module.<br />
<syntaxhighlight lang="sh"><br />
$ module load Score-P<br />
</syntaxhighlight> <br />
Depending on the compiler tool chain you want to use, you can choose between different available Score-P versions. Use the following command to get a list of all available Score-P versions:<br />
<syntaxhighlight lang="sh"><br />
$ module avail Score-P<br />
</syntaxhighlight><br />
<br />
== References ==<br />
[https://www.vi-hps.org/projects/score-p/ Score-P website].</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Score-P&diff=4810Score-P2022-03-03T14:36:02Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix unnecessary newline at top of page</p>
<hr />
<div>[[Category:HPC-Developer]]<nowiki /><br />
{{Infobox Software<br />
| name = Score-P<br />
| provider = Score-P Development Team<br />
| homepage = https://score-p.org<br />
| email = support@score-p.org<br />
| concurrency = parallel<br />
| pmodel = MPI, SHMEM, OpenMP, Pthreads, CUDA, OpenCL<br />
| lang = C, C++, Fortran, Python<br />
| license = Open Source, BSD-like<br />
}}<nowiki /><br />
Score-P is a performance measurement infrastructure for profiling, event tracing and online analysis of (parallel) HPC applications.<br />
It allows users to instrument and record the behavior of sequential, multi-process ([[MPI]], [[SHMEM]]), thread-parallel ([[OpenMP]], [[Pthreads]]) and accelerator-based ([[CUDA]], [[OpenCL]]) applications as well as hybrid parallel applications. <br />
<br />
== General ==<br />
<br />
Score-P supports a great variety of analysis tools and is open to new ones:<br />
<br />
* Periscope<br />
* [[Scalasca]]<br />
* [[Vampir]]<br />
* [[TAU]]<br />
<br />
It uses the [[OTF2|Open Trace Format Version 2]] for event traces and the [[Cube|Cube4]] profiling format for runtime summaries.<br />
[[OpenMP]] instrumentation is supported through the [[Opari2]] instrumenter.<br />
Score-P is available under the New BSD Open Source license.<br />
<br />
== Instrumentation ==<br />
<br />
Performing automatic instrumentation can simply be done by replacing your compiler command with the appropriate Score-P wrapper.<br />
The following example assumes your C compiler is given by the variable $CC:<br />
<syntaxhighlight lang="bash"><br />
$ scorep $CC <compile_flags><br />
</syntaxhighlight><br />
Score-P also supports MPI applications. Again the corresponding MPI-compiler-wrapper for Score-P needs to be used to ensure correct linking of the MPI libraries. Assuming the MPI C compiler is referenced by the variable $MPICC this looks like:<br />
<syntaxhighlight lang="bash"><br />
$ scorep $MPICC <compile_flags><br />
</syntaxhighlight><br />
<br />
== Measurement ==<br />
<br />
After compiling an instrumented binary it can just be executed and will generate measurement data during its execution.<br />
<br />
Score-P offers several environment variables to control the behavior of the measurement facility within the binary. Some useful environment variables include:<br />
* $SCOREP_ENABLE_PROFILING - enable profiling<br />
* $SCOREP_ENABLE_TRACING - enable tracing<br />
* $SCOREP_TOTAL_MEMORY - total memory in bytes for the measurement system<br />
* $SCOREP_EXPERIMENT_DIRECTORY - name of the experiment directory<br />
* $SCOREP_FILTERING_FILE - a file name which contain the filter rules<br />
* $SCOREP_METRIC_PAPI - PAPI metric names to measure<br />
* $SCOREP_METRIC_RUSAGE - resource usage metric names to measure<br />
Note that tracing is disabled by default because it can cause substantial additional overhead and may produce lots of data, which will ultimately perturb your application runtime behavior during measurement.<br />
More environment variables can be found in the [http://scorepci.pages.jsc.fz-juelich.de/scorep-pipelines/docs/scorep-6.0/pdf/scorep.pdf Score-P documentation] (Appendix G - Score-P Measurement Configuration) or using the command:<br />
<syntaxhighlight lang="bash"><br />
$ scorep-info config-vars --full<br />
</syntaxhighlight><br />
<br />
== Analysis ==<br />
<br />
Score-P produces experiment results in different commonly used formats.<br />
<br />
Call-path profiles are stored in the [[Cube|CUBE4]] format and can be viewed using the [https://www.scalasca.org/scalasca/software/cube-4.x/download.html Cube] tool.<br />
<br />
Event traces are stored in the [https://silc.zih.tu-dresden.de/otf2-current/html/index.html Open Trace Format 2] and can be visualized using tools such as [https://vampir.eu/ Vampir] or automatically analyzed with tools such as [https://www.scalasca.org/ Scalasca].<br />
<br />
== Score-P Plugins == <br />
<br />
Score-P provides two plugin interfaces: metrics, which allows integrating new metric sources, and substrates, which allows adding new event consumers besides profiling and tracing. You can also write your own plugins. <br />
<br />
== Site specific notes ==<br />
=== RWTH ===<br />
In order to use Score-P on the RWTH cluster you need to load the corresponding module.<br />
Performance measurement tools are part of the ''DEV-TOOLS'' module group.<br />
This group can be loaded using the following command:<br />
<syntaxhighlight lang="sh"><br />
$ module load DEV-TOOLS<br />
</syntaxhighlight> <br />
To load the Score-P tool just type and enter:<br />
<syntaxhighlight lang="sh"><br />
$ module load scorep<br />
</syntaxhighlight> <br />
Depending on your currently loaded compiler and MPI implementation this will automatically load the correct version of Score-P for you.<br />
However, if you want to have an overview about all the available Score-P versions use the following command:<br />
<syntaxhighlight lang="sh"><br />
$ module avail scorep<br />
</syntaxhighlight><br />
<br />
=== TU Dresden ===<br />
In order to use Score-P on the Taurus cluster you need to load the corresponding module.<br />
<syntaxhighlight lang="sh"><br />
$ module load Score-P<br />
</syntaxhighlight> <br />
Depending on the compiler tool chain you want to use, you can choose between different available Score-P versions. Use the following command to get a list of all available Score-P versions:<br />
<syntaxhighlight lang="sh"><br />
$ module avail Score-P<br />
</syntaxhighlight><br />
<br />
== References ==<br />
[https://www.vi-hps.org/projects/score-p/ Score-P website].</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Score-P&diff=4809Score-P2022-03-03T14:35:03Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Added Software Infobox</p>
<hr />
<div>[[Category:HPC-Developer]]<br />
{{Infobox Software<br />
| name = Score-P<br />
| provider = Score-P Development Team<br />
| homepage = https://score-p.org<br />
| email = support@score-p.org<br />
| concurrency = parallel<br />
| pmodel = MPI, SHMEM, OpenMP, Pthreads, CUDA, OpenCL<br />
| lang = C, C++, Fortran, Python<br />
| license = Open Source, BSD-like<br />
}}<br />
<br />
Score-P is a performance measurement infrastructure for profiling, event tracing and online analysis of (parallel) HPC applications.<br />
It allows users to instrument and record the behavior of sequential, multi-process ([[MPI]], [[SHMEM]]), thread-parallel ([[OpenMP]], [[Pthreads]]) and accelerator-based ([[CUDA]], [[OpenCL]]) applications as well as hybrid parallel applications. <br />
<br />
== General ==<br />
<br />
Score-P supports a great variety of analysis tools and is open to new ones:<br />
<br />
* Periscope<br />
* [[Scalasca]]<br />
* [[Vampir]]<br />
* [[TAU]]<br />
<br />
It uses the [[OTF2|Open Trace Format Version 2]] for event traces and the [[Cube|Cube4]] profiling format for runtime summaries.<br />
[[OpenMP]] instrumentation is supported through the [[Opari2]] instrumenter.<br />
Score-P is available under the New BSD Open Source license.<br />
<br />
== Instrumentation ==<br />
<br />
Performing automatic instrumentation can simply be done by replacing your compiler command with the appropriate Score-P wrapper.<br />
The following example assumes your C compiler is given by the variable $CC:<br />
<syntaxhighlight lang="bash"><br />
$ scorep $CC <compile_flags><br />
</syntaxhighlight><br />
Score-P also supports MPI applications. Again the corresponding MPI-compiler-wrapper for Score-P needs to be used to ensure correct linking of the MPI libraries. Assuming the MPI C compiler is referenced by the variable $MPICC this looks like:<br />
<syntaxhighlight lang="bash"><br />
$ scorep $MPICC <compile_flags><br />
</syntaxhighlight><br />
<br />
== Measurement ==<br />
<br />
After compiling an instrumented binary it can just be executed and will generate measurement data during its execution.<br />
<br />
Score-P offers several environment variables to control the behavior of the measurement facility within the binary. Some useful environment variables include:<br />
* $SCOREP_ENABLE_PROFILING - enable profiling<br />
* $SCOREP_ENABLE_TRACING - enable tracing<br />
* $SCOREP_TOTAL_MEMORY - total memory in bytes for the measurement system<br />
* $SCOREP_EXPERIMENT_DIRECTORY - name of the experiment directory<br />
* $SCOREP_FILTERING_FILE - a file name which contain the filter rules<br />
* $SCOREP_METRIC_PAPI - PAPI metric names to measure<br />
* $SCOREP_METRIC_RUSAGE - resource usage metric names to measure<br />
Note that tracing is disabled by default because it can cause substantial additional overhead and may produce lots of data, which will ultimately perturb your application runtime behavior during measurement.<br />
More environment variables can be found in the [http://scorepci.pages.jsc.fz-juelich.de/scorep-pipelines/docs/scorep-6.0/pdf/scorep.pdf Score-P documentation] (Appendix G - Score-P Measurement Configuration) or using the command:<br />
<syntaxhighlight lang="bash"><br />
$ scorep-info config-vars --full<br />
</syntaxhighlight><br />
<br />
== Analysis ==<br />
<br />
Score-P produces experiment results in different commonly used formats.<br />
<br />
Call-path profiles are stored in the [[Cube|CUBE4]] format and can be viewed using the [https://www.scalasca.org/scalasca/software/cube-4.x/download.html Cube] tool.<br />
<br />
Event traces are stored in the [https://silc.zih.tu-dresden.de/otf2-current/html/index.html Open Trace Format 2] and can be visualized using tools such as [https://vampir.eu/ Vampir] or automatically analyzed with tools such as [https://www.scalasca.org/ Scalasca].<br />
<br />
== Score-P Plugins == <br />
<br />
Score-P provides two plugin interfaces: metrics, which allows integrating new metric sources, and substrates, which allows adding new event consumers besides profiling and tracing. You can also write your own plugins. <br />
<br />
== Site specific notes ==<br />
=== RWTH ===<br />
In order to use Score-P on the RWTH cluster you need to load the corresponding module.<br />
Performance measurement tools are part of the ''DEV-TOOLS'' module group.<br />
This group can be loaded using the following command:<br />
<syntaxhighlight lang="sh"><br />
$ module load DEV-TOOLS<br />
</syntaxhighlight> <br />
To load the Score-P tool just type and enter:<br />
<syntaxhighlight lang="sh"><br />
$ module load scorep<br />
</syntaxhighlight> <br />
Depending on your currently loaded compiler and MPI implementation this will automatically load the correct version of Score-P for you.<br />
However, if you want to have an overview about all the available Score-P versions use the following command:<br />
<syntaxhighlight lang="sh"><br />
$ module avail scorep<br />
</syntaxhighlight><br />
<br />
=== TU Dresden ===<br />
In order to use Score-P on the Taurus cluster you need to load the corresponding module.<br />
<syntaxhighlight lang="sh"><br />
$ module load Score-P<br />
</syntaxhighlight> <br />
Depending on the compiler tool chain you want to use, you can choose between different available Score-P versions. Use the following command to get a list of all available Score-P versions:<br />
<syntaxhighlight lang="sh"><br />
$ module avail Score-P<br />
</syntaxhighlight><br />
<br />
== References ==<br />
[https://www.vi-hps.org/projects/score-p/ Score-P website].</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_OpenMP_in_Small_Bites&diff=4808Template:Syllabus OpenMP in Small Bites2022-02-14T08:56:25Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Add Part 9</p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = OpenMP in Small Bites<br />
| provider = [https://hpc.nrw/ HPC.NRW]<br />
| contact = tutorials@hpc.nrw<br />
| type = Multi-part video<br />
| topic = Programming Paradigms<br />
| license = {{License_CCBYSA}}<br />
| intro = OpenMP_in_Small_Bites<br />
| part1 = [[OpenMP_in_Small_Bites/Overview | Overview ]]<br />
| part2 = [[OpenMP_in_Small_Bites/Worksharing | Worksharing ]]<br />
| part3 = [[OpenMP_in_Small_Bites/Scoping | Data Scoping ]]<br />
| part4 = [[OpenMP_in_Small_Bites/False_Sharing | False Sharing ]]<br />
| part5 = [[OpenMP_in_Small_Bites/Tasking | Tasking ]]<br />
| part6 = [[OpenMP_in_Small_Bites/Tasking_and_Data_Scoping | Tasking and Data Scoping ]]<br />
| part7 = [[OpenMP_in_Small_Bites/Tasking_and_Synchronization | Tasking and Synchronization ]]<br />
| part8 = [[OpenMP_in_Small_Bites/Loops_and_Tasks |Loops and Tasks ]]<br />
| part9 = [[OpenMP_in_Small_Bites/Tasking_Sudoku_example | Tasking Example: Sudoku Solver ]]<br />
| part10 = [[OpenMP_in_Small_Bites/Task_Scheduling | Task Scheduling ]]<br />
| part11 = [[OpenMP_in_Small_Bites/NUMA | Non-Uniform Memory Access ]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Totalview_in_Segments&diff=4793Totalview in Segments2022-01-24T11:04:43Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Integrating Syllabus Template</p>
<hr />
<div>[[Category:Tutorials]]<nowiki /><br />
[[Category:Tutorials | Totalview in Segments]]<nowiki /><br />
{{Syllabus Totalview in Segments}}<nowiki /><br />
<br />
== Introduction ==<br />
Totalview is a widely used debugger in the field of HPC.<br />
This video series provides an introduction to debugging techniques and methodology, and a practical hands-on tutorial on the Totalview debugger.<br />
<br />
This tutorial is targeted for software developers as an initial introduction to debugging with Totalview. <br />
<br />
== How to proceed through this tutorial? ==<br />
<br />
The tutorial is currently made of '''5 segments''', each detailing on basic debugging techniques. Additional segments, will be added as they are produced.<br />
Each video segment uses practical examples, provided as source files, that can be followed along.<br />
Access to the Totalview debugger is recommended to follow the tutorial along.<br />
<br />
<br />
== Who created this tutorial? ==<br />
This tutorial has been developed by the Competence Center for High Performance Computing in Hessen (HKHLR).<br />
<br />
The speaker is '''Dr. Christian Iwainsky''' from Technische Universiät Darmstadt.<br />
Christian works at the university's IT center.<br />
The slide are a collective effort of the HKHLR, and video editing was done by himself, with support by Laurin Eisenacher in editing the audio.<br />
<br />
<br />
== Videos==<br />
<br />
Each video builds on the previous videos. It is recommended to watch all videos in sequence.<br />
<br />
===== Video 1: Introduction to debugging and Totalview ===== <!--T:1--><br />
This video provides a brief overview of the debugging process and mindset and then introduces the debugger Totalview. <br/><br />
[[File:TotalviewVideos_Part1_AboutPicture.png|500px|Totalview Video Part I]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/Totalview_-_Teil1_-_V1.00.mp4 Totalview Video - Part I]<br/><br />
<br />
Material:<br/><br />
[[Media:HKHLR Totalview OnlineCourseVideo1_Slides.pdf | Totalview - part 1: Slides as pdf]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/demo01.zip Demo01 - Sources] <br />
<br />
===== Video 2: Steering the program control flow ===== <!--T:2--><br />
This video provides basic knowledge managing control-flow in Totalview using the new user interface. Key aspects are running, pausing, stepping, advancing control-flow, run-to and step-out.<br/><br />
[[File:TotalviewVideos_Part2_AboutPicture.png|500px|Totalview Video Part II]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/Totalview_-_Teil2_-_V1.00.mp4 Totalview - part 2]<br/><br />
<br />
Material:<br/><br />
[[File:HKHLR Totalview OnlineCourseVideo2_Slides.pdf | Totalview - part 2: Slides as pdf]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/demo01.zip Demo01 - Sources] <br />
<br />
===== Video 3: Inspecting variables ===== <!--T:3--><br />
This video covers core-dump debugging, basic data inspection techniques and data-transformations within Totalview.<br/><br />
[[File:TotalviewVideos_Part3_AboutPicture.png|500px|Totalview Video Part III]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/Totalview_-_Teil3_-_V1.00.mp4 Totalview - part 3]<br/><br />
<br />
Material:<br/><br />
[[Media:HKHLR Totalview OnlineCourseVideo3_Slides.pdf | Totalview - part 3: Slides as pdf]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/demo02.zip Demo02 - Sources] <br />
<br />
===== Video 4: Comfort features: action-points, and replay engine ===== <!--T:4--><br />
This video covers how to attach to a running program without terminating it, break- watch- and evaluation-points, capable of interrupting execution based on configurable conditions.<br/><br />
[[File:TotalviewVideos_Part4_AboutPicture.png|500px|Totalview Video Part IV]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/Totalview_-_Teil4_-_V1.00.mp4 Totalview - part 4]<br/><br />
<br />
Material:<br/><br />
[[Media:HKHLR Totalview OnlineCourseVideo4_Slides.pdf | Totalview - part 4: Slides as pdf]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/demo03.zip Demo03 - Sources] <br />
<br />
===== Video 5: Debugging parallel programs in Totalview ===== <!--T:5--><br />
This video advances the techniques and methods from videos 1-4 into the parallel domain, covering parallel data inspection, thread and process handling, and using control groups to execute single, and groups of parallel entities.<br/><br />
[[File:TotalviewVideos_Part5_AboutPicture.png|500px|Totalview Video Part V]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/Totalview_-_Teil5_-_V1.00.mp4 Totalview - part 5]<br/><br />
<br />
Material:<br/><br />
[[Media:HKHLR Totalview OnlineCourseVideo5_Slides.pdf | Totalview - part 5: Slides as pdf]]<br/><br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/demo04.zip Demo04 - Sources]<br/> <br />
[https://download.hrz.tu-darmstadt.de/media/HKHLR/demo05.zip Demo05 - Sources]<br/></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_Totalview_in_Segments&diff=4792Template:Syllabus Totalview in Segments2022-01-24T11:03:38Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: </p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = Totalview in Segments<br />
| provider = [https://www.hkhlr.de/ HKHLR]<br />
| contact = <br />
| type = Multi-part video<br />
| topic = Software Correctness<br />
| license = {{License_CCBYSA}}<br />
| intro = Totalview in Segments<br />
| part1 = [[Totalview_in_Segments#Video_1:_Introduction_to_debugging_and_Totalview | Introduction ]]<br />
| part2 = [[Totalview_in_Segments#Video_2:_Steering_the_program_control_flow | Steering Control Flow ]]<br />
| part3 = [[Totalview_in_Segments#Video_3:_Inspecting_variables | Inspecting Variables ]]<br />
| part4 = [[Totalview_in_Segments#Video_4:_Comfort_features:_action-points.2C_and_replay_engine | Action Points & Replay Engine ]]<br />
| part5 = [[Totalview_in_Segments#Video_5:_Debugging_parallel_programs_in_Totalview | Parallel Debugging ]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_Totalview_in_Segments&diff=4791Template:Syllabus Totalview in Segments2022-01-24T11:01:52Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Created page with "{{Tutorial Syllabus | title = Totalview in Segments | provider = [https://www.hkhlr.de/ HKHLR] | contact = | type = Multi-part video | topic = Software Correctness | license..."</p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = Totalview in Segments<br />
| provider = [https://www.hkhlr.de/ HKHLR]<br />
| contact = <br />
| type = Multi-part video<br />
| topic = Software Correctness<br />
| license = {{License_CCBYSA}}<br />
| intro = Totalview in Segments<br />
| part1 = [[https://hpc-wiki.info/hpc/Totalview_in_Segments#Video_1:_Introduction_to_debugging_and_Totalview | Introduction ]]<br />
| part2 = [[https://hpc-wiki.info/hpc/Totalview_in_Segments#Video_2:_Steering_the_program_control_flow | Steering Control Flow ]]<br />
| part3 = [[https://hpc-wiki.info/hpc/Totalview_in_Segments#Video_3:_Inspecting_variables | Inspecting Variables ]]<br />
| part4 = [[https://hpc-wiki.info/hpc/Totalview_in_Segments#Video_4:_Comfort_features:_action-points.2C_and_replay_engine | Action Points & Replay Engine ]]<br />
| part5 = [[https://hpc-wiki.info/hpc/Totalview_in_Segments#Video_5:_Debugging_parallel_programs_in_Totalview | Parallel Debugging ]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_OpenMP_in_Small_Bites&diff=4539Template:Syllabus OpenMP in Small Bites2020-12-21T16:07:42Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Add contact email</p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = OpenMP in Small Bites<br />
| provider = [https://hpc.nrw/ HPC.NRW]<br />
| contact = tutorials@hpc.nrw<br />
| type = Multi-part video<br />
| topic = Programming Paradigms<br />
| license = {{License_CCBYSA}}<br />
| intro = OpenMP_in_Small_Bites<br />
| part1 = [[OpenMP_in_Small_Bites/Overview | Overview ]]<br />
| part2 = [[OpenMP_in_Small_Bites/Worksharing | Worksharing ]]<br />
| part3 = [[OpenMP_in_Small_Bites/Scoping | Data Scoping ]]<br />
| part4 = [[OpenMP_in_Small_Bites/False_Sharing | False Sharing ]]<br />
| part5 = [[OpenMP_in_Small_Bites/Tasking | Tasking ]]<br />
| part6 = [[OpenMP_in_Small_Bites/Tasking_and_Data_Scoping | Tasking and Data Scoping ]]<br />
| part7 = [[OpenMP_in_Small_Bites/Tasking_and_Synchronization | Tasking and Synchronization ]]<br />
| part11 = [[OpenMP_in_Small_Bites/NUMA | Non-Uniform Memory Access ]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Syllabus_Introduction_to_Linux&diff=4538Template:Syllabus Introduction to Linux2020-12-21T16:07:07Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Add contact email</p>
<hr />
<div>{{Tutorial Syllabus<br />
| title = Introduction to Linux in HPC<br />
| provider = [https://hpc.nrw/ HPC.NRW]<br />
| contact = tutorials@hpc.nrw<br />
| type = Multi-part video<br />
| topic = HPC Platforms<br />
| license = {{License_CCBYSA}}<br />
| intro = Introduction_to_Linux_in_HPC<br />
| part1 = [[Introduction_to_Linux_in_HPC/Historical_Background | Background and History]]<br />
| part2 = [[Introduction_to_Linux_in_HPC/The_Command_Line | The Command Line]]<br />
| part3 = [[Introduction_to_Linux_in_HPC/Linux_Directory_Structure | Linux Directory Structure]]<br />
| part4 = [[Introduction_to_Linux_in_HPC/Files | Files]]<br />
| part5 = [[Introduction_to_Linux_in_HPC/Text_display_search | Text display and search]]<br />
| part6 = [[Introduction_to_Linux_in_HPC/Users_and_permissions | Users and permissions]]<br />
| part7 = [[Introduction_to_Linux_in_HPC/Processes | Processes]]<br />
| part8 = [[Introduction_to_Linux_in_HPC/The_vim_text_editor | The vim text editor]]<br />
| part9 = [[Introduction_to_Linux_in_HPC/Shell_scripting | Shell scripting]]<br />
| part10 = [[Introduction_to_Linux_in_HPC/Environment_variables | Environment variables]]<br />
| part11 = [[Introduction_to_Linux_in_HPC/System_configuration_files | System configuration]]<br />
| part12 = [[Introduction_to_Linux_in_HPC/SSH_Connections | SSH Connections]]<br />
| part13 = [[Introduction_to_Linux_in_HPC/SSH_Graphics_File_Transfer | SSH: Graphics and File Transfer]]<br />
| part14 = [[Introduction_to_Linux_in_HPC/Various_tips | Various tips]]<br />
}}</div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Tutorial_Syllabus&diff=4537Template:Tutorial Syllabus2020-12-21T16:06:28Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Add <nowiki /> to suppress linebreak</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact:<br />
{{!}} [mailto:{{{contact}}} {{{contact}}}]<br />
}}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Tutorial_Syllabus&diff=4536Template:Tutorial Syllabus2020-12-21T16:02:35Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Remove empty line</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact:<br />
{{!}} [mailto:{{{contact}}} {{{contact}}}]<br />
}}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Tutorial_Syllabus&diff=4535Template:Tutorial Syllabus2020-12-21T15:59:53Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix optional contact field</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact:<br />
{{!}} [mailto:{{{contact}}} {{{contact}}}]<br />
}}<br />
<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4534Template:Infobox Sandbox2020-12-21T15:58:57Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix contact</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact:<br />
{{!}} [mailto:{{{contact}}} {{{contact}}}]<br />
}}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4533Template:Infobox Sandbox2020-12-21T15:58:13Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Test</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact-2:<br />
{{!}} [mailto:{{{contact}}} {{{contact}}}]<br />
}}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4532Template:Infobox Sandbox2020-12-21T15:56:34Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Test</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
! style="font-weight: bold;" {{!}} Contact-2: {{!}} [mailto:{{{contact}}} {{{contact}}}] }}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4531Template:Infobox Sandbox2020-12-21T15:55:49Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix braces</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact-2: {{!}} [mailto:{{{contact}}} {{{contact}}}] }}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4530Template:Infobox Sandbox2020-12-21T15:54:54Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Fix #if</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if: {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact-2: {{!}} [mailto:{{{contact}}} {{{contact}}}] }} }}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4529Template:Infobox Sandbox2020-12-21T15:54:14Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Test</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact-2: {{!}} [mailto:{{{contact}}} {{{contact}}}] }} }}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4528Template:Infobox Sandbox2020-12-21T15:53:52Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Test</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact: {{!}} [mailto:{{{contact}}} {{{contact}}}] }} }}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.dehttps://hpc-wiki.info/hpc/index.php?title=Template:Infobox_Sandbox&diff=4527Template:Infobox Sandbox2020-12-21T15:29:00Z<p>Marc-andre-hermanns-bc32@rwth-aachen.de: Test</p>
<hr />
<div><noinclude><br />
This template can be used to typeset the specific syllabus of an online tutorial including some meta information.<br />
<br />
As the syllabus should be on the page of every part, one should create a specific template with the details of the tutorial as shown below.<br />
<nowiki><br />
{{Tutorial Syllabus<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}</nowiki><br />
<br />
Then, the specific template can be included on each part of the tutorial, without having to repeat the arguments on each part.<br />
<br />
{{Infobox_Sandbox<br />
| title = Introduction to HPC<br />
| provider = [https://institute.org/ Some Institution]<br />
| contact = contact@provider.org<br />
| type = Multi-part video<br />
| topic = Platform<br />
| license = {{License_CCBYSA}}<br />
| intro = Tutorial<br />
| part1 = [[Tutorial/Part1 | Part 1 ]]<br />
| part2 = [[Tutorial/Part2 | Part 2 ]]<br />
}}<br />
<br />
</noinclude><br />
<includeonly>{| align="right" cellpadding="5" style="border-spacing: 0px; background-color: #fbfbff; font-size: 95%; margin: 0 0 0.5em 1em; width: 25em; border: 1pt solid #dddddd; {{#ifeq:{{NAMESPACE}}|Template||float: right;}}"<br />
|-<br />
! colspan="2" style="background-color:#2e3871; color:white" | Tutorial<br />
|- <br />
| style="font-weight: bold;" | Title:<br />
| {{#if: {{{title|}}} | {{#if: {{{intro|}}} | [[{{{intro}}} | {{{title}}}]] | {{{title}}} }} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Provider:<br />
| {{#if: {{{provider|}}} | {{{provider}}} | Unknown }} <br />
{{#if {{{contact|}}} |<br />
{{!}}- <br />
{{!}} style="font-weight: bold;" {{!}} Contact: {{!}} [mailto:{{{contact}}} {{{contact}}}] }}<br />
|- <br />
| style="font-weight: bold;" | Type:<br />
| {{#if: {{{type|}}} | {{{type}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | Topic Area:<br />
| {{#if: {{{topic|}}} | {{{topic}}} | Unknown }} <br />
|- <br />
| style="font-weight: bold;" | License:<br />
| {{#if: {{{license|}}} | {{{license}}} | Unknown }} <br />
{{#if: {{{part1|}}}{{{part2|}}}{{{part3|}}}{{{part4|}}}{{{part5|}}}{{{part6|}}}{{{part7|}}}{{{part8|}}}{{{part9|}}}{{{part10|}}}{{{part11|}}}{{{part12|}}}{{{part13|}}}{{{part14|}}}{{{part15|}}}{{{part16|}}}{{{part17|}}}{{{part18|}}}{{{part19|}}}{{{part20|}}} | <br />
{{!}}-<br />
! colspan="2" style="background-color:#2e3871; color:white" {{!}} Syllabus }}<br />
{{#if: {{{part1|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">1.</span> {{{part1}}}<br />
}}{{#if: {{{part2|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">2.</span> {{{part2}}}<br />
}}{{#if: {{{part3|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">3.</span> {{{part3}}}<br />
}}{{#if: {{{part4|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">4.</span> {{{part4}}}<br />
}}{{#if: {{{part5|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">5.</span> {{{part5}}}<br />
}}{{#if: {{{part6|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">6.</span> {{{part6}}}<br />
}}{{#if: {{{part7|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">7.</span> {{{part7}}}<br />
}}{{#if: {{{part8|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">8.</span> {{{part8}}}<br />
}}{{#if: {{{part9|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">9.</span> {{{part9}}}<br />
}}{{#if: {{{part10|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">10.</span> {{{part10}}}<br />
}}{{#if: {{{part11|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">11.</span> {{{part11}}}<br />
}}{{#if: {{{part12|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">12.</span> {{{part12}}}<br />
}}{{#if: {{{part13|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">13.</span> {{{part13}}}<br />
}}{{#if: {{{part14|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">14.</span> {{{part14}}}<br />
}}{{#if: {{{part15|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">15.</span> {{{part15}}}<br />
}}{{#if: {{{part16|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">16.</span> {{{part16}}}<br />
}}{{#if: {{{part17|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">17.</span> {{{part17}}}<br />
}}{{#if: {{{part18|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">18.</span> {{{part18}}}<br />
}}{{#if: {{{part19|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">19.</span> {{{part19}}}<br />
}}{{#if: {{{part20|}}} | <nowiki /><br />
{{!}}- <br />
{{!}} colspan="2" style="text-align:left" {{!}} <span style="font-weight:bold">20.</span> {{{part20}}}<br />
}}<br />
|}<br />
</includeonly></div>Marc-andre-hermanns-bc32@rwth-aachen.de