<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bwhpc.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A+Flachmueller</id>
	<title>bwHPC Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bwhpc.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A+Flachmueller"/>
	<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/e/Special:Contributions/A_Flachmueller"/>
	<updated>2026-07-01T00:36:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Hardware_and_Architecture/Filesystem_Details&amp;diff=16072</id>
		<title>BwUniCluster3.0/Hardware and Architecture/Filesystem Details</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Hardware_and_Architecture/Filesystem_Details&amp;diff=16072"/>
		<updated>2026-05-13T08:23:02Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Workspaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= File System Details =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On bwUniCluster 3.0 the parallel file system Lustre is used for most globally visible user data. Lustre is open source and Lustre solutions and support are available from different vendors. Nowadays, most of the biggest HPC systems are using Lustre. An initial home directory on a Lustre file system is created automatically after account activation, and the environment variable $HOME holds its name. Users can create so-called workspaces on another Lustre file system for non-permanent data with temporary lifetime. There is another workspace file system based on flash storage for special requirements available.&lt;br /&gt;
&lt;br /&gt;
Within a batch job further file systems are available: &lt;br /&gt;
* The directory $TMPDIR is only available and visible on the local node. It is located on fast SSD storage devices.&lt;br /&gt;
* On request a parallel on-demand file system (BeeOND) is created which uses the SSDs of the nodes which were allocated to the batch job.&lt;br /&gt;
* On request the external LSDF Online Storage is mounted on the nodes which were allocated to the batch job. This file system is based on the parallel file system IBM Storage Scale. &lt;br /&gt;
&lt;br /&gt;
Some of the characteristics of the file systems are shown in the following table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;width:9%&amp;quot;| Property&lt;br /&gt;
! style=&amp;quot;width:13%&amp;quot;| $TMPDIR&lt;br /&gt;
! style=&amp;quot;width:13%&amp;quot;| BeeOND&lt;br /&gt;
! style=&amp;quot;width:13%&amp;quot;| $HOME&lt;br /&gt;
! style=&amp;quot;width:13%&amp;quot;| Workspace&lt;br /&gt;
! style=&amp;quot;width:13%&amp;quot;| Workspace &amp;lt;br&amp;gt; on flash&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Visibility &lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| local node&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| nodes of batch job&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| global&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| global&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| global&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Lifetime &lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| batch job runtime&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| batch job runtime&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| permanent&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| max. 240 days&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| max. 240 days&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Disk space &lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 960 GB - 6.4 TB &amp;lt;br&amp;gt; details see table 1&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| n*750 GB&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 1.1 PiB&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 4.6 PiB&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 236 TiB&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Capacity Quotas&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes &amp;lt;br&amp;gt; 500 GiB per user, for &amp;lt;br&amp;gt; MA users 250 GiB &amp;lt;br&amp;gt; also per organization&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes &amp;lt;br&amp;gt; 40 TiB per user&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes &amp;lt;br&amp;gt; 1 TiB per user&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Inode Quotas&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes &amp;lt;br&amp;gt; 5 million per user &amp;lt;br&amp;gt; for MA users 2.5 million&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes &amp;lt;br&amp;gt; 20 million per user&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes &amp;lt;br&amp;gt; 5 million per user&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Backup&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| yes&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| no&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Read perf./node&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 500 MB/s - 6 GB/s &amp;lt;br&amp;gt; depends on type of local SSD / job queue&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 400 MB/s - 500 MB/s&amp;lt;br&amp;gt; depends on type of local SSDs / job queue&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 5 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 5 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 1 GB/s&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px; padding:3px&amp;quot;| Write perf./node&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 500 MB/s - 4 GB/s &amp;lt;br&amp;gt; depends on type of local SSD / job queue&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 250 MB/s - 350 MB/s &amp;lt;br&amp;gt; depends on type of local SSDs / job queue&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 5 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 5 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 1 GB/s&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px;padding:3px&amp;quot;| Total read perf.&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| n*500-6000 MB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| n*400-500 MB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 63 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 45 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 45 GB/s&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;column&amp;quot; style=&amp;quot;height=20px;padding:3px&amp;quot;| Total write perf.&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| n*500-4000 MB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| n*250-350 MB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 63 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 40 GB/s&lt;br /&gt;
| style=&amp;quot;height=20px; text-align:left;padding:3px&amp;quot;| 38 GB/s&lt;br /&gt;
|}&lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
  global: all nodes of UniCluster access the same file system;&lt;br /&gt;
  local: each node has its own file system;&lt;br /&gt;
  permanent: files are stored permanently;&lt;br /&gt;
  batch job: files are removed at end of the batch job.&lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Table 2: Properties of the file systems&lt;br /&gt;
&lt;br /&gt;
== Selecting the appropriate file system ==&lt;br /&gt;
&lt;br /&gt;
In general, you should separate your data and store it on the appropriate file system.&lt;br /&gt;
Permanently needed data like software or important results should be stored below $HOME&lt;br /&gt;
but capacity restrictions (quotas) apply. In case you accidentally deleted data on $HOME&lt;br /&gt;
there is a chance that we can restore it from backup. Permanent data which is not needed for months&lt;br /&gt;
or exceeds the capacity restrictions should be sent to the LSDF Online Storage &lt;br /&gt;
or to the archive and deleted from the file systems. Temporary data which is only needed on a single&lt;br /&gt;
node and which does not exceed the disk space shown in [[BwUniCluster3.0/Hardware_and_Architecture#Compute_nodes|Table 1]] &lt;br /&gt;
should be stored below $TMPDIR. Data which is read many times on a single node, e.g. if you are doing AI training, &lt;br /&gt;
should be copied to $TMPDIR and read from there. Temporary data which is used from many nodes &lt;br /&gt;
of your batch job and which is only needed during job runtime should be stored on a &lt;br /&gt;
parallel on-demand file system. Temporary data which can be recomputed or which is the &lt;br /&gt;
result of one job and input for another job should be stored in workspaces. The lifetime &lt;br /&gt;
of data in workspaces is limited and depends on the lifetime of the workspace which can be &lt;br /&gt;
several months.&lt;br /&gt;
&lt;br /&gt;
For further details please check the chapters below.&lt;br /&gt;
&lt;br /&gt;
== $HOME ==&lt;br /&gt;
&lt;br /&gt;
The home directories of bwUniCluster 3.0 (uc3) users are located in the parallel file system Lustre.&lt;br /&gt;
You have access to your home directory from all nodes of uc3. A regular backup of these directories &lt;br /&gt;
to a tape library is done automatically. The directory $HOME should be used to hold permanently used data like &lt;br /&gt;
source code, configuration files, executable programs etc. &lt;br /&gt;
&lt;br /&gt;
On uc3 there is a default user quota limit of 500 GiB and 5 million inodes (files and directories) per user. &lt;br /&gt;
For users of University of Mannheim the limit is 250 GiB and 2.5 million inodes.&lt;br /&gt;
You can check your current usage and limits with the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lfs quota -uh $(whoami) $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the quota limits mentioned above are soft quota limits. The hard limits (shown on the &#039;&#039;limits&#039;&#039; &lt;br /&gt;
columns) are 10 percent higher. If you are above the soft limit and below the hard limit &lt;br /&gt;
during the grace period (7 days) your I/O operations will show a warning message. If the grace period has &lt;br /&gt;
passed or if you are above the hard limit your I/O operations will abort. &lt;br /&gt;
&lt;br /&gt;
In addition to the user limit there is a limit of your organization (e.g. university) which depends on the financial share. This limit is enforced with so-called Lustre project quotas. You can show the current usage and limits of your organization with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lfs quota -ph $(grep $(echo $HOME | sed -e &amp;quot;s|/[^/]*/[^/]*$||&amp;quot;) /pfs/data6/project_ids.txt | cut -f 1 -d\ ) $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workspaces ==&lt;br /&gt;
&lt;br /&gt;
On uc3 workspaces can be used to store large non-permanent data sets, e.g. restart files or output&lt;br /&gt;
data that has to be post-processed. The file system used for workspaces is also the parallel file system Lustre. This file system is especially designed for parallel access and for a high throughput to large&lt;br /&gt;
files. It is able to provide high data transfer rates of up to 40 GB/s write and read performance when data access is parallel. &lt;br /&gt;
&lt;br /&gt;
On uc3 there is a default user quota limit of 40 TiB and 20 million inodes (files and directories) per user. &lt;br /&gt;
You can chek your current usage and limits with the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lfs quota -uh $(whoami) /pfs/work9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the quotas include data and inodes for all of your workspaces and all of your expired workspaces (as long as they are not yet completely removed).&lt;br /&gt;
&lt;br /&gt;
Workspaces have a lifetime and the data on a workspace expires as a whole after a fixed period. The &#039;&#039;&#039;maximum lifetime&#039;&#039;&#039; of a workspace on uc3 is &#039;&#039;&#039;60 days&#039;&#039;&#039;, but it can be &#039;&#039;&#039;renewed&#039;&#039;&#039; at the end of that period &#039;&#039;&#039;3 times to a total maximum of 240 days&#039;&#039;&#039; after workspace generation.&lt;br /&gt;
&lt;br /&gt;
Creating, deleting, finding, extending and sharing workspaces is explained on the [[workspace]] page.&lt;br /&gt;
&lt;br /&gt;
=== Reminder for workspace deletion ===&lt;br /&gt;
&lt;br /&gt;
Normally you will get an email every day starting 7 days before a workspace expires. You can send yourself a calender entry which reminds you when a workspace will be automatically deleted:&lt;br /&gt;
&lt;br /&gt;
 $ ws_send_ical &amp;lt;workspace&amp;gt; &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Restoring expired Workspaces ===&lt;br /&gt;
&lt;br /&gt;
At expiration time your workspace will be moved to a special, hidden directory. On uc3 expired workspaces are currently kept for 30 days. During this time you can still restore your data into a valid workspace. The same is true for released workspaces but they are only kept until the next night. In order to restore an expired workspace, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ws_restore -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to get a list of your expired workspaces, and then restore them into an &#039;&#039;&#039;existing, active workspace&#039;&#039;&#039; (here with name &amp;lt;code&amp;gt;my_restored&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ws_restore &amp;lt;full_name_of_expired_workspace&amp;gt; my_restored&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NOTE: The expired workspace has to be specified using the full name as listed by &amp;lt;code&amp;gt;ws_restore -l&amp;lt;/code&amp;gt;, including username prefix and timestamp suffix (otherwise, it cannot be uniquely identified).&lt;br /&gt;
The target workspace, on the other hand, must be given with just its short name as listed by &amp;lt;code&amp;gt;ws_list&amp;lt;/code&amp;gt;, without the username prefix.&lt;br /&gt;
&lt;br /&gt;
NOTE: &amp;lt;code&amp;gt;ws_restore&amp;lt;/code&amp;gt; can only work on the same filesystem. So you have to ensure that the new workspace allocated with &amp;lt;code&amp;gt;ws_allocate&amp;lt;/code&amp;gt; is placed on the same filesystem as the expired workspace. Therefore, you can use &amp;lt;code&amp;gt;-F &amp;lt;filesystem&amp;gt;&amp;lt;/code&amp;gt; flag if needed.&lt;br /&gt;
&lt;br /&gt;
=== Linking workspaces in Home ===&lt;br /&gt;
&lt;br /&gt;
It might be valuable to have links to personal workspaces within a certain directory, e.g. below the user home directory. The command &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ws_register &amp;lt;DIR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will create and manage links to all personal workspaces within in the directory &amp;lt;DIR&amp;gt;. Calling this command will do the following:&lt;br /&gt;
&lt;br /&gt;
* The directory &amp;lt;DIR&amp;gt; will be created if necessary&lt;br /&gt;
* Links to all personal workspaces will be managed:&lt;br /&gt;
** Creates links to all available workspaces if not already present&lt;br /&gt;
** Removes links to released or expired workspaces&lt;br /&gt;
&lt;br /&gt;
== Improving Performance on $HOME and workspaces ==&lt;br /&gt;
&lt;br /&gt;
The following recommendations might help to improve throughput and metadata&lt;br /&gt;
performance on Lustre filesystems.&lt;br /&gt;
&lt;br /&gt;
=== Improving Throughput Performance ===&lt;br /&gt;
&lt;br /&gt;
Depending on your application some adaptations might be necessary if you want to reach&lt;br /&gt;
the full bandwidth of the filesystems. &lt;br /&gt;
&lt;br /&gt;
When you are designing your application you should consider that the performance of&lt;br /&gt;
parallel filesystems is generally better if data is transferred in large blocks and stored in&lt;br /&gt;
few large files. In more detail, to increase throughput performance of a parallel application&lt;br /&gt;
following aspects should be considered:&lt;br /&gt;
&lt;br /&gt;
* collect large chunks of data and write them sequentially at once,&lt;br /&gt;
&lt;br /&gt;
* to exploit complete filesystem bandwidth use several clients,&lt;br /&gt;
&lt;br /&gt;
* avoid competitive file access by different tasks or use blocks with boundaries at stripe size (default is 1MB),&lt;br /&gt;
&lt;br /&gt;
* if files are small enough for the SSDs and are only used from one node store them on $TMPDIR.&lt;br /&gt;
&lt;br /&gt;
Parallel filesystems typically stripe files over storage subsystems, i.e. large files are separated into stripes and distributed to different storage subsystems. In Lustre, the size of these stripes (sometimes also mentioned as chunks) is called stripe size and the number of used storage subsystems is called stripe count.&lt;br /&gt;
&lt;br /&gt;
With previous Lustre versions adapting the Lustre stripe count was the most important optimization. However, for the workspaces of uc3 the Lustre feature Progressive File Layout is used to define file striping parameters. This means that the stripe count is adapted if the file size is growing. In normal cases users no longer need to adapt file striping parameters in case they have very huge files or in order to reach better performance. If you know what you are doing you can still change striping parameters but further explanation is beyond the scope of this documentation.&lt;br /&gt;
&lt;br /&gt;
=== Improving Metadata Performance ===&lt;br /&gt;
&lt;br /&gt;
Metadata performance on parallel file systems is usually not as good as with local&lt;br /&gt;
filesystems. In addition, it is usually not scalable, i.e. a limited resource. Therefore,&lt;br /&gt;
you should omit metadata operations whenever possible. For example, it is much better&lt;br /&gt;
to have few large files than lots of small files. In more detail, to increase metadata&lt;br /&gt;
performance of a parallel application following aspects should be considered:&lt;br /&gt;
&lt;br /&gt;
* avoid creating many small files&lt;br /&gt;
&lt;br /&gt;
* avoid competitive directory access, e.g. by creating files in separate subdirectories for each task&lt;br /&gt;
&lt;br /&gt;
* if many small files are only used within a batch job and accessed by one node store them on $TMPDIR&lt;br /&gt;
&lt;br /&gt;
== Workspaces on flash storage ==&lt;br /&gt;
&lt;br /&gt;
There is another workspace file system for special requirements available. The file system is called &#039;&#039;full flash pfs&#039;&#039; and is based on the parallel file system Lustre.&lt;br /&gt;
&lt;br /&gt;
=== Advantages of this file system ===&lt;br /&gt;
&lt;br /&gt;
# From the Ice Lake nodes of bwUniCluster 3.0 (queue &#039;&#039;cpu_il&#039;&#039;) the network distance and latency is low compared to the normal workspace file system.&lt;br /&gt;
# All storage devices are based on flash (no hard disks) with low access times. Hence performance is better compared to other parallel file systems for read and write access with small blocks and with small files, i.e. IOPS rates are improved.&lt;br /&gt;
# The file system is mounted on bwUniCluster 3.0 and HoreKa, i.e. it can be used to share data between these clusters.&lt;br /&gt;
&lt;br /&gt;
=== Access restrictions ===&lt;br /&gt;
&lt;br /&gt;
Only HoreKa users or KIT users of bwUniCluster 3.0 can use this file system.&lt;br /&gt;
&lt;br /&gt;
=== Using the file system ===&lt;br /&gt;
&lt;br /&gt;
As KIT or HoreKa user you can use the file system in the same way as a normal workspace. You just have to specify the name of the flash-based workspace file system using the option &#039;&#039;-F&#039;&#039; to all the commands that manage workspaces. On bwUniCluster 3.0 it is called &#039;&#039;ffuc&#039;&#039;, on HoreKa it is &#039;&#039;ffhk&#039;&#039;. For example, to create a workspace with name myws and a lifetime of 60 days on bwUniCluster 3.0 execute:&lt;br /&gt;
 ws_allocate -F ffuc myws 60&lt;br /&gt;
&lt;br /&gt;
If you want to use the full flash pfs on bwUniCluster 3.0 &#039;&#039;&#039;and&#039;&#039;&#039; HoreKa at the same time, please note that you only have to manage a particular workspace on one of the clusters since the name of the workspace directory is different. However, the path to each workspace is visible and can be used on both clusters.&lt;br /&gt;
&lt;br /&gt;
Other features are similar to normal workspaces. For example, you can restore expired workspaces during 30 days after workspace expiration. There are quota limits with a default limit of 1 TiB capacity and 5 millions inodes per user. You can check your current usage with&lt;br /&gt;
 lfs quota -uh $(whoami) /pfs/work8&lt;br /&gt;
&lt;br /&gt;
== $TMPDIR ==&lt;br /&gt;
&lt;br /&gt;
The environment variable $TMPDIR contains the name of a directory which is located on the local SSD of each node. This means &lt;br /&gt;
that different tasks of a parallel application use different directories when they do not utilize the same node. &lt;br /&gt;
Although $TMPDIR points to the same path name for different nodes of a batch job, the physical location and the &lt;br /&gt;
content of this directory path on these nodes is different.&lt;br /&gt;
&lt;br /&gt;
This directory should be used for temporary files being accessed from the local node during job runtime. It should &lt;br /&gt;
also be used if you read the same data many times from a single node, e.g. if you are doing AI training. In this &lt;br /&gt;
case you should copy the data at the beginning of your batch job to $TMPDIR and read the data from there, see usage example below.&lt;br /&gt;
&lt;br /&gt;
The $TMPDIR directory is located on extremely fast local SSD storage devices. This means that performance &lt;br /&gt;
on small files is much better than on the parallel file systems. The capacity of the local SSDs for each node type &lt;br /&gt;
is different and can be checked in [[BwUniCluster3.0/Hardware_and_Architecture#Compute_nodes|Table 1]]. &lt;br /&gt;
The capacity of $TMPDIR is at least 1400 GB.&lt;br /&gt;
&lt;br /&gt;
Each time a batch job is started, a subdirectory is created on the SSD of each node and assigned to the job. &lt;br /&gt;
$TMPDIR is set to the name of the subdirectory and this name contains the job ID so that it is unique &lt;br /&gt;
for each job. At the end of the job the subdirectory is removed.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#ffa500; text-align:left&amp;quot;|&lt;br /&gt;
[[Image:Attention.svg|center|25px]]&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#ffa500; text-align:left&amp;quot;|&lt;br /&gt;
&#039;&#039;&#039;All data on $TMPDIR will be deleted when your job completes.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Make sure you have copied your results back to a global filesystem, e.g., $HOME or a workspace, within your job.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On login nodes $TMPDIR also points to a fast directory on a local SSD disk but this directory is not unique. &lt;br /&gt;
It is recommended to create your own unique subdirectory on these nodes. This directory should be used for the &lt;br /&gt;
installation of software packages. This means that the software package to be installed should be unpacked, &lt;br /&gt;
compiled and linked in a subdirectory of $TMPDIR. The real installation of the package (e.g. make install) &lt;br /&gt;
should be made into the $HOME folder.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;background:#ffdeee; width:100%;&amp;quot;&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#f2cece; text-align:left&amp;quot;|&lt;br /&gt;
[[Image:Attention.svg|center|25px]]&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#f2cece; text-align:left&amp;quot;|&lt;br /&gt;
Note that you should &#039;&#039;&#039;not&#039;&#039;&#039; use /tmp or /scratch! Please use &#039;&#039;&#039;$TMPDIR&#039;&#039;&#039; instead.&amp;lt;br/&amp;gt;&lt;br /&gt;
The reason is that an automatic cleanup on /tmp or /scratch is not possible because another job could be still using data below these directories. Hence the corresponding file systems could fill up and this can cause issues for you and for other users. On the other hand, $TMPDIR is created when the job starts and removed when the job completes, i.e. a cleanup is automatically done.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Usage example for $TMPDIR ===&lt;br /&gt;
&lt;br /&gt;
We will provide an example for using $TMPDIR and describe efficient data transfer to and from $TMPDIR. &lt;br /&gt;
&lt;br /&gt;
If you have a data set with many files which is frequently used by batch jobs you should create &lt;br /&gt;
a compressed archive on a workspace. This archive can be extracted on $TMPDIR inside your batch jobs. &lt;br /&gt;
Such an archive can be read efficiently from a parallel file system since it is a single huge file. &lt;br /&gt;
On a login node you can create such an archive with the following steps: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Create a workspace to store the archive&lt;br /&gt;
[ab1234@uc3n991 ~]$ ws_allocate data-ssd 60&lt;br /&gt;
# Create the archive from a local dataset folder (example)&lt;br /&gt;
[ab1234@uc3n991 ~]$ tar -cvzf $(ws_find data-ssd)/dataset.tgz dataset/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside a batch job extract the archive on $TMPDIR, read input data from $TMPDIR, store results on $TMPDIR &lt;br /&gt;
and save the results on a workspace: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# very simple example on how to use local $TMPDIR&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -t 24:00:00&lt;br /&gt;
&lt;br /&gt;
# Extract compressed input dataset on local SSD&lt;br /&gt;
tar -C $TMPDIR/ -xvzf $(ws_find data-ssd)/dataset.tgz&lt;br /&gt;
&lt;br /&gt;
# The application reads data from dataset on $TMPDIR and writes results to $TMPDIR&lt;br /&gt;
myapp -input $TMPDIR/dataset/myinput.csv -outputdir $TMPDIR/results&lt;br /&gt;
&lt;br /&gt;
# Before job completes save results on a workspace&lt;br /&gt;
rsync -av $TMPDIR/results $(ws_find data-ssd)/results-${SLURM_JOB_ID}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LSDF Online Storage ==&lt;br /&gt;
&lt;br /&gt;
The LSDF Online Storage allows dedicated users to store scientific measurement data and simulation results. BwUniCluster 3.0 has an extremely fast network connection to the LSDF Online Storage. This file system provides external access via different protocols. It is only available for certain users. For information how request storage projects on the LSDF Online Storage see [[https://www.scc.kit.edu/en/services/lsdf]].&lt;br /&gt;
&lt;br /&gt;
The LSDF Online Storage is mounted on the login nodes. It will also be mounted on the compute nodes of your batch job request it with the constraint flag &#039;&#039;LSDF&#039;&#039;. You have one of the following options:&lt;br /&gt;
&lt;br /&gt;
1. Add after the initial lines of your script job.sh the line &amp;lt;code&amp;gt;#SBATCH --constraint=LSDF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --time=120&lt;br /&gt;
#SBATCH --mem=200&lt;br /&gt;
#SBATCH --constraint=LSDF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Add the constraint on command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch -p &amp;lt;queue&amp;gt; -n 1 -t 2:00:00 --mem 200 job.sh -C LSDF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to access the LSDF Online Storage the following environment variables are available: &lt;br /&gt;
&amp;lt;code&amp;gt;$LSDF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$LSDFPROJECTS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$LSDFHOME&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==BeeOND (BeeGFS On-Demand)==&lt;br /&gt;
&lt;br /&gt;
Users have the possibility to request a private BeeOND (on-demand BeeGFS) parallel filesystem for each job. The file system is created during job startup and purged when your job completes. &lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#ffa500; text-align:left&amp;quot;|&lt;br /&gt;
[[Image:Attention.svg|center|25px]]&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#ffa500; text-align:left&amp;quot;|&lt;br /&gt;
&#039;&#039;&#039;All data on the private BeeOND filesystem will be deleted when your job completes.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Make sure you have copied your results back to a global filesystem, e.g., $HOME or a workspace, within your job.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BeeOND/BeeGFS can be used like any other parallel file system. All nodes of the batch job have acess to the same data below the same path. Tools like cp or rsync can be used to copy data in and out. &lt;br /&gt;
&lt;br /&gt;
Starting and stopping BeeOND is integrated in the prolog and epilog of the cluster batch system Slurm. It can be used during job runtime if compute nodes are exclusive used, meaning that no other jobs are running on the same node. To achieve this, use the batch option &amp;quot;--exclusive&amp;quot; in your batch script or on command line. This is particularly important in shared partitions.&lt;br /&gt;
&lt;br /&gt;
You can request the creation of a BeeOND file system with the constraint flags &#039;&#039;BEEOND&#039;&#039;, &#039;&#039;BEEOND_4MDS&#039;&#039; or &#039;&#039;BEEOND_MAXMDS&#039;&#039;.&lt;br /&gt;
* BEEOND: one metadata server is started on the first node&lt;br /&gt;
* BEEOND_4MDS: 4 metadata servers are started within your job. If you have less than 4 nodes less metadata servers are started.&lt;br /&gt;
* BEEOND_MAXMDS: on every node of your job a metadata server for the on_demand file system is started&lt;br /&gt;
&lt;br /&gt;
As starting point we recommend using the constraint &#039;&#039;BEEOND&#039;&#039;. You have one of the following options to request the constraint:&lt;br /&gt;
&lt;br /&gt;
1. Add the line &amp;lt;code&amp;gt;#SBATCH --constraint=BEEOND&amp;lt;/code&amp;gt; to your job script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH ...&lt;br /&gt;
#SBATCH --constraint=BEEOND   # or BEEOND_4MDS or BEEOND_MAXMDS&lt;br /&gt;
#SBATCH --exclusive&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2. Add the constraint on command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch -p &amp;lt;queue&amp;gt; -N &amp;lt;# of nodes&amp;gt; -t &amp;lt;runtime&amp;gt; --mem &amp;lt;mem&amp;gt; --exclusive -C BEEOND job.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After your job has started you can find the private on-demand file system in &#039;&#039;&#039;/mnt/odfs/${SLURM_JOB_ID}&#039;&#039;&#039; directory. The mountpoint comes with five pre-configured directories:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# For small files (stripe count = 1)&lt;br /&gt;
/mnt/odfs/${SLURM_JOB_ID}/stripe_1&lt;br /&gt;
# Stripe count = 4&lt;br /&gt;
/mnt/odfs/${SLURM_JOB_ID}/stripe_default &lt;br /&gt;
# or &lt;br /&gt;
/mnt/odfs/${SLURM_JOB_ID}/stripe_4&lt;br /&gt;
# Stripe count = 8, 16 or 32, use this directories for medium sized and large files or when using MPI-IO&lt;br /&gt;
/mnt/odfs/${SLURM_JOB_ID}/stripe_8&lt;br /&gt;
/mnt/odfs/${SLURM_JOB_ID}/stripe_16 &lt;br /&gt;
# or &lt;br /&gt;
/mnt/odfs/${SLURM_JOB_ID}/stripe_32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you request less nodes than stripe count, the stripe count will be the number of nodes. For example, if you only request 8 nodes the directory stripe_16 has only a stripe count 8.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;font color=red&amp;gt;&#039;&#039;&#039;Attention:&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:Use always the directory with the greatest stripe count for large files. E.g. if your largest file is 3.1 Tb, then you have to use a stripe count greater than 4 (4 x 750 GB), otherwise the used disk space is exceeded.  &lt;br /&gt;
&lt;br /&gt;
The capacity of the private file system depends on the number of nodes. For each node you get 750 Gbyte.&lt;br /&gt;
If you request 100 nodes for your job, the private file system is 100 * 750 Gbyte ~ 75 Tbyte (approx) capacity.&lt;br /&gt;
&lt;br /&gt;
==Backup and Archiving==&lt;br /&gt;
&lt;br /&gt;
There are regular backups of all data of the home directories, whereas ACLs and extended attributes will&lt;br /&gt;
not be saved in backups. &lt;br /&gt;
&lt;br /&gt;
Please open a ticket if you have the need to restore backup data.&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Support&amp;diff=16065</id>
		<title>BwUniCluster3.0/Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Support&amp;diff=16065"/>
		<updated>2026-05-12T13:53:52Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Registration ==&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top;background:#f5fffa;border:2px solid #000000;&amp;quot;&lt;br /&gt;
| The primary support channel for all inquiries is the ticket system at&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://www.bwhpc.de/supportportal bwSupport Portal]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are having issues connected to your local home institution, e.g. getting the entitlement for registration on bwUniCluster 3.0, you may also contact your local hotline:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
! University !! Hotline&lt;br /&gt;
|-&lt;br /&gt;
| Albert Ludwig University of Freiburg  ||  hpc-support (ät) hpc.uni-freiburg.de &lt;br /&gt;
|-&lt;br /&gt;
| Eberhard Karls University, Tübingen || hpcmaster (ät) uni-tuebingen.de&lt;br /&gt;
|-&lt;br /&gt;
| Hochschule Esslingen || cluster-support (ät) hs-esslingen.de&lt;br /&gt;
|-&lt;br /&gt;
| Karlsruhe Institute of Technology || servicedesk (ät) scc.kit.edu&lt;br /&gt;
|-&lt;br /&gt;
| Ruprecht-Karls-Universität Heidelberg || hpc-support (ät) urz.uni-heidelberg.de&lt;br /&gt;
|-&lt;br /&gt;
| Ulm University || helpdesk (ät) uni-ulm.de &lt;br /&gt;
|-&lt;br /&gt;
| University of Hohenheim || kim-bw-projekt (ät) uni-hohenheim.de &lt;br /&gt;
|-&lt;br /&gt;
| University of Konstanz || bwhpc (ät) uni-konstanz.de &lt;br /&gt;
|-&lt;br /&gt;
| University of Mannheim ||hpc-support (ät) mailman.uni-mannheim.de &lt;br /&gt;
|-&lt;br /&gt;
| University of Stuttgart || bwunicluster (ät) hlrs.de &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Problems with Login/2-Factor-Authentication ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: How do I register/deactivate a token?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Please refer to the [[Registration/2FA|2FA documentation wiki page]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: I have lost my 2FA device or can no longer generate One-Time Passwords using my software token.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: KIT users can contact the [https://www.scc.kit.edu/en/services/servicedesk.php KIT ServiceDesk], users from all other institutions should open a support ticket via the [https://www.bwhpc.de/supportportal bwSupport Portal].&lt;br /&gt;
&lt;br /&gt;
== Deregistration ==&lt;br /&gt;
&lt;br /&gt;
If you are no longer using the bwUniCluster 3.0 and want to deregister yourself, please follow the [[Registration/Deregistration|Deregistration instructions]]. This will also automatically remove your e-mail address from the user mailing list and you will no longer receive user announcements for this system.&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_User_Access_Members_Uni_Konstanz&amp;diff=16064</id>
		<title>BwForCluster User Access Members Uni Konstanz</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_User_Access_Members_Uni_Konstanz&amp;diff=16064"/>
		<updated>2026-05-12T13:48:35Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;A valid account for the University of Konstanz is required to access to bwForCluster. So you need at least an employee- or student ID (Matrikelnummer).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==  ==&lt;br /&gt;
&lt;br /&gt;
Your [[Registration/bwForCluster/RV | registration request]] for a new &#039;&#039;rechenvorhaben&#039;&#039; will be delivered to your local support team at the University of Konstanz. They will automatically proof your request and set the bwForCluster-Entitlement or contact you directly if further information is necessary.&lt;br /&gt;
&lt;br /&gt;
In case of joining an existing &#039;&#039;rechenvorhaben&#039;&#039;, please contact the [https://www.kim.uni-konstanz.de/services/forschen-und-lehren/high-performance-computing/ local support] to obtain the bwForCluster-Entitlement.&lt;br /&gt;
&lt;br /&gt;
==   ==&lt;br /&gt;
&lt;br /&gt;
For more information about registration visit the related web pages and follow the instructions documented on this page.&lt;br /&gt;
&lt;br /&gt;
German version: [https://www.kim.uni-konstanz.de/services/forschen-und-lehren/high-performance-computing/zugang-bwforcluster/ Zugang bwForCluster]&lt;br /&gt;
&lt;br /&gt;
English version: [https://www.kim.uni-konstanz.de/en/services/research-and-teaching/high-performance-computing/access-bwforcluster/ Access bwForCluster]&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Software_Modules&amp;diff=16056</id>
		<title>BwUniCluster3.0/Software Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Software_Modules&amp;diff=16056"/>
		<updated>2026-05-11T09:51:05Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Build individual EasyBuild packages as a user */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;introduction&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software (Environment) Modules&#039;&#039;&#039;, or short &#039;&#039;&#039;modules&#039;&#039;&#039; are the means by which most of the installed scientific software is provided on &#039;&#039;bwUniCluster 3.0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Different compilers, libraries and software packages requires users to set up a specific session environment suited for the program they want to run. &#039;&#039;bwUniCluster 3.0&#039;&#039; provides users with the possibility to load and unload complete environments for compilers, libraries and software packages using a single command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;basics&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Basics =&lt;br /&gt;
&lt;br /&gt;
The Environment &#039;&#039;modules&#039;&#039; package enables dynamic modification of shell environments. Typically, a modulefile contains instructions that alter or set shell environment variables, such as PATH and MANPATH, to enable access to various installed software.&lt;br /&gt;
&lt;br /&gt;
One of the key features of Environment &#039;&#039;Modules&#039;&#039; is the ability to have multiple versions of the same software available in a controlled manner. For example, two different versions of the Intel C compiler can be installed on the system at the same time - the version used is based upon which Intel C compiler modulefile is loaded.&lt;br /&gt;
&lt;br /&gt;
The software stack of bwUniCluster 3.0 provides a number of modules. Users can also provide modules for their own software. &#039;&#039;Modules&#039;&#039; may be shared between users on a system, and users may have their own collection of &#039;&#039;modules&#039;&#039; to supplement or replace the global &#039;&#039;modules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To see which modules are currently loaded/enabled one must execute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
No modules loaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the user has just logged in no &#039;&#039;modules&#039;&#039; should be loaded.&lt;br /&gt;
&lt;br /&gt;
If a user has setup his/her environment for an Intel toolchain the output may look like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
&lt;br /&gt;
Currently Loaded Modules:&lt;br /&gt;
  1) compiler/intel/2023.1.0   2) numlib/mkl/2022.2.1   3) mpi/impi/2021.11&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
bwUniCluster 3.0 has been set up to use the &#039;&#039;Lmod&#039;&#039; module system. &#039;&#039;Lmod&#039;&#039; is a modern replacement of the older tcl-based environment modules. The complete &#039;&#039;Lmod&#039;&#039; documentation can be found [[&amp;lt;nowiki/&amp;gt;http://lmod.readthedocs.org/en/latest/][here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;documentation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Getting help ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Lmod&#039;&#039; module command provides a manual page (man module) and a help command line option. Execute &#039;&#039;&#039;&#039;module help&#039;&#039;&#039;&#039; or &#039;&#039;&#039;&#039;man module&#039;&#039;&#039;&#039; for help on how to use &#039;&#039;Lmod&#039;&#039; software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module help&lt;br /&gt;
Usage: module [options] sub-command [args ...]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -h -? -H --help                   This help message&lt;br /&gt;
...&lt;br /&gt;
a lot of help&lt;br /&gt;
...&lt;br /&gt;
Lmod Web Sites&lt;br /&gt;
&lt;br /&gt;
  Documentation:    https://lmod.readthedocs.org&lt;br /&gt;
  GitHub:           https://github.com/TACC/Lmod&lt;br /&gt;
  SourceForge:      https://lmod.sf.net&lt;br /&gt;
  TACC Homepage:    https://www.tacc.utexas.edu/research-development/tacc-projects/lmod&lt;br /&gt;
&lt;br /&gt;
  To report a bug please read https://lmod.readthedocs.io/en/latest/075_bug_reporting.html&lt;br /&gt;
&lt;br /&gt;
Modules based on Lua: Version 8.7.55 2024-12-13 12:24 -07:00&lt;br /&gt;
    by Robert McLay mclay@tacc.utexas.edu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get help for a particular &#039;&#039;module&#039;&#039;, e.g. the default GNU compiler, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module help compiler/gnu&lt;br /&gt;
&lt;br /&gt;
------------- Module Specific Help for &amp;amp;quot;compiler/gnu/14.2&amp;amp;quot; -------------------------------&lt;br /&gt;
This module provides the GNU compiler collection version 14.2.0 via commands&lt;br /&gt;
gcc, g++, gfortran and gccgo. The GNU compiler has been build with the libraries&lt;br /&gt;
gmp (6.3.0), mpfr (4.2.1), mpc (1.3.1) and isl (0.27).&lt;br /&gt;
This compiler supports offloating OpenACC and OpenMP to NVIDIA CUDA using -foffload.&lt;br /&gt;
&lt;br /&gt;
cpp      - GNU pre processor&lt;br /&gt;
gcc      - GNU C compiler&lt;br /&gt;
g++      - GNU C++ compiler&lt;br /&gt;
gfortran - GNU Fortran compiler (Fortran 95/2003/2008 plus legacy Fortran 77)&lt;br /&gt;
gccgo    - GNU Google&#039;s Go language&lt;br /&gt;
&lt;br /&gt;
Libraries can be found in&lt;br /&gt;
  \$GNU_HOME/lib64 = $env(GNU_HOME)/lib64&lt;br /&gt;
One may require additionally libraries installed in&lt;br /&gt;
  \$GNU_HOME/lib   = $env(GNU_HOME)/lib&lt;br /&gt;
&lt;br /&gt;
Local documentation:&lt;br /&gt;
  See commands &#039;man cpp&#039;, &#039;man gcc&#039;, &#039;man g++&#039; and &#039;man gfortran&#039;.&lt;br /&gt;
&lt;br /&gt;
Online documentation:&lt;br /&gt;
  https://gcc.gnu.org/onlinedocs/&lt;br /&gt;
&lt;br /&gt;
For details on library and include dirs please call&lt;br /&gt;
    module show&lt;br /&gt;
&lt;br /&gt;
The man pages, environment variables and compiler commands&lt;br /&gt;
are available after loading &#039;[module-info name]&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of problems, submit a trouble ticket at &#039;https://bw-support.scc.kit.edu&#039;.&lt;br /&gt;
&lt;br /&gt;
The full version is: compiler/gnu/14.2.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayallavailablemodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display all available Modules ==&lt;br /&gt;
&lt;br /&gt;
bwUniCluster3.0 comes with a variety of modules pre-installed. Some of these modules may not be available for all users of all institutions, due to licensing restrictions. You can display all available &#039;&#039;modules&#039;&#039; by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Due to the fact that some modules depend on other modules, some modules may not be shown as available all the time. To get a complete list of all possible modules use the [[#displayallmodules|module spider command]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;module_categories_versions_and_defaults&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Module categories, versions and defaults ==&lt;br /&gt;
&lt;br /&gt;
The bwHPC clusters traditionally provide a large variety of software and software versions. Therefore &#039;&#039;modules&#039;&#039; are divided into category folders containing subfolders of modulefiles again containing modulefile versions, and must be addressed as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category/softwarename/version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For instance all versions of the Intel compiler belong to the category compiler, thus the corresponding modulefiles are placed under the category &#039;&#039;compiler&#039;&#039; and &#039;&#039;intel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of multiple software versions, one version will be defined as the &#039;&#039;&#039;default&#039;&#039;&#039; version. The &#039;&#039;Module&#039;&#039; of the default can be addressed by simply omitting the version number:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category/softwarename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware, that the &#039;&#039;&#039;default&#039;&#039;&#039; version may change over time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;findingsoftwaremodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Finding software Modules ==&lt;br /&gt;
&lt;br /&gt;
Currently all bwUniCluster 3.0 software packages are assigned to the following &#039;&#039;Module&#039;&#039; categories:&lt;br /&gt;
&lt;br /&gt;
* bio&lt;br /&gt;
* cae&lt;br /&gt;
* chem&lt;br /&gt;
* compiler&lt;br /&gt;
* devel&lt;br /&gt;
* lib&lt;br /&gt;
* math&lt;br /&gt;
* mpi&lt;br /&gt;
* numlib&lt;br /&gt;
* phys&lt;br /&gt;
* system&lt;br /&gt;
* toolkit&lt;br /&gt;
* vis&lt;br /&gt;
&lt;br /&gt;
You can selectively list software in one of those categories using, e.g. for the category &amp;amp;quot;compiler&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module avail compiler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Searches with module avail are substring searches and will return any module with the string in its name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;loadingmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Loading Modules ==&lt;br /&gt;
&lt;br /&gt;
To use a software provided through modules in your environment, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module load category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module add category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Loading a &#039;&#039;Module&#039;&#039; in this manner affects your environment only for the current session or until you [[#unloadingmodules|unload]] the module again&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;module-conflicts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== module conflicts ===&lt;br /&gt;
&lt;br /&gt;
For some software, it doesn&#039;t make sense to provide multiple versions of the same software in the same environment. For this reason, module will automatically unload a conflicting version of the same software, e.g. loading the Intel compiler in version X while Intel compiler in version Y is loaded leads to an automatic unloading of Intel compiler in version Y.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;showingchanges&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Showing the changes introduced by a Module ===&lt;br /&gt;
&lt;br /&gt;
Loading a module will change the environment of the current shell session. For instance the $PATH variable will be expanded by the software&#039;s bin directory. Other module variables may even change the behavior of the current shell session or the software program(s) in a more drastic way.&lt;br /&gt;
&lt;br /&gt;
All the changes to the current shell session to be invoked by loading the module can be reviewed using &#039;module show category/softwarename/version&#039;, if version is omitted, information for the default version will be shown, e.g. for the default GNU compiler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module show compiler/gnu&lt;br /&gt;
-------------------------------------------------------------------------------------------------------&lt;br /&gt;
   /opt/bwhpc/common/modulefiles/Core/compiler/gnu/13.3.lua:&lt;br /&gt;
-------------------------------------------------------------------------------------------------------&lt;br /&gt;
setenv(&amp;amp;quot;GNU_VERSION&amp;amp;quot;,&amp;amp;quot;13.3.0&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_HOME&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_BIN_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/bin&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_LIB_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/lib64&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_INC_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/include&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_MAN_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/share/man&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;PATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/bin&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;LD_LIBRARY_PATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/lib64&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;MANPATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/share/man&amp;amp;quot;)&lt;br /&gt;
conflict(&amp;amp;quot;compiler/intel&amp;amp;quot;)&lt;br /&gt;
conflict(&amp;amp;quot;compiler/pgi&amp;amp;quot;)&lt;br /&gt;
whatis(&amp;amp;quot;GNU compiler suite version 13.3.0  (gcc, g++, gfortran, gccgo) including LTO and JIT &amp;amp;quot;)&lt;br /&gt;
help([[This module provides the GNU compiler collection version 13.3.0 via commands&lt;br /&gt;
gcc, g++, gfortran and gccgo. The GNU compiler has been build with the libraries&lt;br /&gt;
gmp (6.3.0), mpfr (4.2.1), mpc (1.3.1) and isl (0.26).&lt;br /&gt;
This compiler supports offloating OpenACC and OpenMP to NVIDIA CUDA using -foffload.&lt;br /&gt;
&lt;br /&gt;
cpp      - GNU pre processor&lt;br /&gt;
gcc      - GNU C compiler&lt;br /&gt;
g++      - GNU C++ compiler&lt;br /&gt;
gfortran - GNU Fortran compiler (Fortran 95/2003/2008 plus legacy Fortran 77)&lt;br /&gt;
gccgo    - GNU Google&#039;s Go language&lt;br /&gt;
&lt;br /&gt;
Libraries can be found in&lt;br /&gt;
  \$GNU_HOME/lib64 = $env(GNU_HOME)/lib64&lt;br /&gt;
One may require additionally libraries installed in&lt;br /&gt;
  \$GNU_HOME/lib   = $env(GNU_HOME)/lib&lt;br /&gt;
&lt;br /&gt;
Local documentation:&lt;br /&gt;
  See commands &#039;man cpp&#039;, &#039;man gcc&#039;, &#039;man g++&#039; and &#039;man gfortran&#039;.&lt;br /&gt;
&lt;br /&gt;
Online documentation:&lt;br /&gt;
  https://gcc.gnu.org/onlinedocs/&lt;br /&gt;
&lt;br /&gt;
For details on library and include dirs please call&lt;br /&gt;
    module show [module-info name]&lt;br /&gt;
&lt;br /&gt;
The man pages, environment variables and compiler commands&lt;br /&gt;
are available after loading &#039;[module-info name]&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of problems, submit a trouble ticket at &#039;https://bw-support.scc.kit.edu&#039;.&lt;br /&gt;
&lt;br /&gt;
The full version is: compiler/gnu/13.3.0&lt;br /&gt;
&lt;br /&gt;
]])&lt;br /&gt;
prepend_path(&amp;amp;quot;MODULEPATH&amp;amp;quot;,&amp;amp;quot;/software/bwhpc/common/modulefiles/Compiler/gnu/13.3&amp;amp;quot;)&lt;br /&gt;
family(&amp;amp;quot;compiler&amp;amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;modules_depending_on_modules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Dependencies between modules ===&lt;br /&gt;
&lt;br /&gt;
Most modern software depends on shared libraries. Shared libraries must be accesible during the runtime of the software. This is true for basic OS libraries as well as for more specialized libraries like math or communication libraries. For basic OS libraries, one version is usually enough for all software running on a system. For the more specialized libraries, different user may prefer different versions or even implementations of these libraries. Theses situations can be represented using modules. The modules contain the information, what tools are necessary to run a specific software and load all required software automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unloadingmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Unloading Modules ==&lt;br /&gt;
&lt;br /&gt;
To unload or remove a module run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module unload category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module remove category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;unloadingallmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Unloading all loaded modules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Purge&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Loading different modules may lead to a expansive list of modules, especially when using [[#EasyBuild|EasyBuild]]. To unload all currently loaded modules use the &#039;module purge&#039; command like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
Currently Loaded Modules:&lt;br /&gt;
  1) compiler/intel/19.1   2) mpi/impi/2019   3) numlib/mkl/2019&lt;br /&gt;
$ module purge&lt;br /&gt;
$ module list&lt;br /&gt;
No modules loaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Be aware that &#039;module purge&#039; is working without any further inquiry.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayyourloadedmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display your loaded Modules ==&lt;br /&gt;
&lt;br /&gt;
All currently loaded modules can be displayed using the &#039;module list&#039; command. [[#basics|See example above]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayallmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display all possible Modules ==&lt;br /&gt;
&lt;br /&gt;
Some of the modules may not be visible with the &#039;module avail&#039; command to due to unmet dependencies. All available and currently not available modules can be listed using the &#039;module spider&#039; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
The following is a list of the modules and extensions currently available:&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  compiler/gnu: compiler/gnu/11.4, compiler/gnu/14.2&lt;br /&gt;
&lt;br /&gt;
  devel/code-server: devel/code-server/4.96.4&lt;br /&gt;
&lt;br /&gt;
  devel/cuda: devel/cuda/12.8&lt;br /&gt;
&lt;br /&gt;
  ... long list of modules and versions ...&lt;br /&gt;
&lt;br /&gt;
To learn more about a package execute:&lt;br /&gt;
&lt;br /&gt;
   $ module spider Foo&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;quot;Foo&amp;amp;quot; is the name of a module.&lt;br /&gt;
&lt;br /&gt;
To find detailed information about a particular package you&lt;br /&gt;
must specify the version if there is more than one version:&lt;br /&gt;
&lt;br /&gt;
   $ module spider Foo/11.1&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To see all versions of a software in a category use &#039;module spider category/name/&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider compiler/gnu&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  compiler/gnu:&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
     Versions:&lt;br /&gt;
        compiler/gnu/11.4&lt;br /&gt;
        compiler/gnu/14.2&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  For detailed information about a specific &amp;amp;quot;compiler/gnu&amp;amp;quot; package (including how to load the modules) use the module&#039;s full name.&lt;br /&gt;
  Note that names that have a trailing (E) are extensions provided by other modules.&lt;br /&gt;
  For example:&lt;br /&gt;
&lt;br /&gt;
     $ module spider compiler/gnu/14.2&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
module spider may be used to show the dependencies of the module. For example, you can see which modules need to be loaded before loading the module mpi/impi/2021.11 is possible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider mpi/impi/2021.11&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
  mpi/impi: mpi/impi/2021.11&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    You will need to load all module(s) on any one of the lines below before the &amp;amp;quot;mpi/impi/2021.11&amp;amp;quot; module is available to load.&lt;br /&gt;
&lt;br /&gt;
      compiler/intel/2021.4.0&lt;br /&gt;
      compiler/intel/2021.4.0_llvm&lt;br /&gt;
      compiler/intel/2022.2.1&lt;br /&gt;
      compiler/intel/2022.2.1_llvm&lt;br /&gt;
      compiler/intel/2023.1.0&lt;br /&gt;
      compiler/intel/2023.1.0_llvm&lt;br /&gt;
      compiler/intel/2024.0_llvm&lt;br /&gt;
&lt;br /&gt;
    Help:&lt;br /&gt;
      Intel MPI Library version 2021.11&lt;br /&gt;
&lt;br /&gt;
      From the product website&lt;br /&gt;
      (https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html):&lt;br /&gt;
&lt;br /&gt;
      Intel MPI Library&lt;br /&gt;
      Deliver flexible, efficient, and scalable cluster messaging.&lt;br /&gt;
&lt;br /&gt;
      One Library with Multiple Fabric Support&lt;br /&gt;
      Intel MPI Library is a multifabric message-passing library that implements the&lt;br /&gt;
      open-source MPICH specification. Use the library to create, maintain, and test&lt;br /&gt;
      advanced, complex applications that perform better on high-performance&lt;br /&gt;
      computing (HPC) clusters based on Intel processors.&lt;br /&gt;
&lt;br /&gt;
      * Develop applications that can run on multiple cluster interconnects that you&lt;br /&gt;
        choose at run time.&lt;br /&gt;
      * Quickly deliver maximum end-user performance without having to change the&lt;br /&gt;
        software or operating environment.&lt;br /&gt;
      * Achieve the best latency, bandwidth, and scalability through automatic tuning&lt;br /&gt;
        for the latest Intel platforms.&lt;br /&gt;
      * Reduce the time to market by linking to one library and deploying on the&lt;br /&gt;
        latest optimized fabrics.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;EasyBuild&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= EasyBuild modules =&lt;br /&gt;
&lt;br /&gt;
With bwUniCluster 3.0 we start an official beta-test to provide toolchains and scientific software built with [https://docs.easybuild.io/ EasyBuild]. EasyBuild is a well established and consistent way to provide scientific software at many HPC sites all over the world. Since the naming of EasyBuild modules is consistent users can use modules with the same name at different sites. To make this possible, Easybuild software minimizes the resources used by the local operating system and provides most software independently. This makes scientific results more reproducible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;using-easybuild-modules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Using EasyBuild modules ==&lt;br /&gt;
&lt;br /&gt;
Users interested in using EasyBuild modules need to add the EasyBuild module paths to their module environment. This can be done using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/enable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now users have acces to a complete EasyBuild module tree, providing compiler toolchains, libraries, and scientific software. The same module commands described above (Lmod) can be used for EasyBuild modules. They can be loaded and unloaded in the same way. Please try not to mix EasyBuild modules with the standard modules. There may be unintended consequences. It&#039;s always a good idea to [[#purge|purge]] all modules before loading new ones. If you want to use EasyBuild modules in your job scripts, please make sure to enable them in your job script as well.&lt;br /&gt;
&lt;br /&gt;
To hide the EasyBuild modules again, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/disable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or start again with a clean shell.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;easybuild-conventions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EasyBuild conventions ==&lt;br /&gt;
&lt;br /&gt;
In theory one could build every software against every library and every compiler. This would lead to an unmaintainable amount of combinations. For this reason the EasyBuild team has decided to provide two so called toolchains a year for the most common compiler suits. Each toolchain defines one version of compiler, MPI library, math libraries and other packages as default for all software built aginst this toolchain. On bwUniCluster 3.0 we start with 3 FOSS, 3 Intel and one NVHPC toolchains. For a complete list of EasyBuild toolchains, please see [https://docs.easybuild.io/version-specific/toolchains/ the EasyBuild website]. Currently the 2023a, 2023b, and 2024a toolchains are available, with 2024a being the default one. Some software may not be available for the latest toolchain yet, but may be available for an older toolchain.&lt;br /&gt;
&lt;br /&gt;
EasyBuild currently supports almost 4000 software packages. We can and will only provide a subset, of course. As a start, we provide current versions of popular software packages from bwUniCluster 2.0. Updating and extending EasyBuild packages is a community effort, which should make providing new software easier. We try to provide additional packages if users request the installation. If we can&#039;t provide the software you can still use the advantages of EasyBuild by using it to build your private version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;build-individual-easybuild-packages-as-a-user&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Build individual EasyBuild packages as a user ==&lt;br /&gt;
&lt;br /&gt;
EasyBuild can also be used to compile your own or niche software, based on the available EasyBuild files by creating an independent EasyBuild software and module tree. The bwUnicluster 3.0 EasyBuild tree can be used as a base to build additional software in your HOME directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We assume the following&lt;br /&gt;
&lt;br /&gt;
* the sofware will be installed in your HOME directory in the sub-directory &amp;lt;code&amp;gt;eb&amp;lt;/code&amp;gt;&lt;br /&gt;
* you have already cloned the git repository from https://github.com/easybuilders/easybuild-easyconfigs to &amp;lt;code&amp;gt;~/eb/easybuild-easyconfigs&amp;lt;/code&amp;gt;&lt;br /&gt;
* create an EasyBuild configuration file in your home at &amp;lt;code&amp;gt;~/.config/easybuild/config.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;[basic]&lt;br /&gt;
robot=&amp;amp;lt;path_to_your_home&amp;amp;gt;/eb/easybuild-easyconfigs/easybuild/easyconfigs&lt;br /&gt;
[config]&lt;br /&gt;
modules-tool: Lmod&lt;br /&gt;
prefix=&amp;amp;lt;path_to_your_home&amp;amp;gt;/eb&lt;br /&gt;
buildpath=/scratch/build&lt;br /&gt;
[override]&lt;br /&gt;
allow-modules-tool-mismatch=True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* add system-wide EasyBuild module path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/enable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Check provided EasyBuild installations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;module spider EasyBuild&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*You have to load an EasyBuild module, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;module load EasyBuild/5.3.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add local module path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;mkdir -p ~/eb/modules/all&lt;br /&gt;
module use ~/eb/modules/all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* find or create EasyBuild file, you can use any of the EasyBuild&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;ls ~/eb/easybuild-easyconfigs/easybuild/easyconfigs/*/* | grep eb$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* build your software with EasyBuild&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;eb cowsay-3.04.eb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* use your software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module load cowsay&lt;br /&gt;
$ cowsay &amp;amp;quot;Hello EasyBuild&amp;amp;quot;&lt;br /&gt;
 _________________&lt;br /&gt;
&amp;amp;lt; Hello EasyBuild &amp;amp;gt;&lt;br /&gt;
 -----------------&lt;br /&gt;
        \   ^__^&lt;br /&gt;
         \  (oo)\_______&lt;br /&gt;
            (__)\       )\/\&lt;br /&gt;
                ||----w |&lt;br /&gt;
                ||     ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;how_do_modules_work&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= How do Modules work? =&lt;br /&gt;
&lt;br /&gt;
The default shell on the bwUniCluster 3.0 is bash, so explanations and examples will be shown for bash. In general, programs cannot modify the environment of the shell they are being run from, so how can the module command do exactly that? The module command is not a program, but a bash-function. You can view its content using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ type module&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you will get the following result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ type module&lt;br /&gt;
module is a function&lt;br /&gt;
module ()&lt;br /&gt;
{&lt;br /&gt;
    eval $($LMOD_CMD bash &amp;amp;quot;$@&amp;amp;quot;);&lt;br /&gt;
    [ $? = 0 ] &amp;amp;amp;&amp;amp;amp; eval $(${LMOD_SETTARG_CMD:-:} -s sh)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this function, lmod is called. Its output to stdout is then executed inside your current shell using the bash-internal &#039;&#039;eval&#039;&#039; command. As a consequence, all output that you see from the module is transmitted via stderr (output handle 2) or in some cases even stdin (output handle 0). [[#introduction|back to top]]&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Software_Modules&amp;diff=16055</id>
		<title>BwUniCluster3.0/Software Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Software_Modules&amp;diff=16055"/>
		<updated>2026-05-11T09:29:54Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Build individual EasyBuild packages as a user */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;introduction&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software (Environment) Modules&#039;&#039;&#039;, or short &#039;&#039;&#039;modules&#039;&#039;&#039; are the means by which most of the installed scientific software is provided on &#039;&#039;bwUniCluster 3.0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Different compilers, libraries and software packages requires users to set up a specific session environment suited for the program they want to run. &#039;&#039;bwUniCluster 3.0&#039;&#039; provides users with the possibility to load and unload complete environments for compilers, libraries and software packages using a single command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;basics&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Basics =&lt;br /&gt;
&lt;br /&gt;
The Environment &#039;&#039;modules&#039;&#039; package enables dynamic modification of shell environments. Typically, a modulefile contains instructions that alter or set shell environment variables, such as PATH and MANPATH, to enable access to various installed software.&lt;br /&gt;
&lt;br /&gt;
One of the key features of Environment &#039;&#039;Modules&#039;&#039; is the ability to have multiple versions of the same software available in a controlled manner. For example, two different versions of the Intel C compiler can be installed on the system at the same time - the version used is based upon which Intel C compiler modulefile is loaded.&lt;br /&gt;
&lt;br /&gt;
The software stack of bwUniCluster 3.0 provides a number of modules. Users can also provide modules for their own software. &#039;&#039;Modules&#039;&#039; may be shared between users on a system, and users may have their own collection of &#039;&#039;modules&#039;&#039; to supplement or replace the global &#039;&#039;modules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To see which modules are currently loaded/enabled one must execute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
No modules loaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the user has just logged in no &#039;&#039;modules&#039;&#039; should be loaded.&lt;br /&gt;
&lt;br /&gt;
If a user has setup his/her environment for an Intel toolchain the output may look like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
&lt;br /&gt;
Currently Loaded Modules:&lt;br /&gt;
  1) compiler/intel/2023.1.0   2) numlib/mkl/2022.2.1   3) mpi/impi/2021.11&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
bwUniCluster 3.0 has been set up to use the &#039;&#039;Lmod&#039;&#039; module system. &#039;&#039;Lmod&#039;&#039; is a modern replacement of the older tcl-based environment modules. The complete &#039;&#039;Lmod&#039;&#039; documentation can be found [[&amp;lt;nowiki/&amp;gt;http://lmod.readthedocs.org/en/latest/][here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;documentation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Getting help ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Lmod&#039;&#039; module command provides a manual page (man module) and a help command line option. Execute &#039;&#039;&#039;&#039;module help&#039;&#039;&#039;&#039; or &#039;&#039;&#039;&#039;man module&#039;&#039;&#039;&#039; for help on how to use &#039;&#039;Lmod&#039;&#039; software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module help&lt;br /&gt;
Usage: module [options] sub-command [args ...]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -h -? -H --help                   This help message&lt;br /&gt;
...&lt;br /&gt;
a lot of help&lt;br /&gt;
...&lt;br /&gt;
Lmod Web Sites&lt;br /&gt;
&lt;br /&gt;
  Documentation:    https://lmod.readthedocs.org&lt;br /&gt;
  GitHub:           https://github.com/TACC/Lmod&lt;br /&gt;
  SourceForge:      https://lmod.sf.net&lt;br /&gt;
  TACC Homepage:    https://www.tacc.utexas.edu/research-development/tacc-projects/lmod&lt;br /&gt;
&lt;br /&gt;
  To report a bug please read https://lmod.readthedocs.io/en/latest/075_bug_reporting.html&lt;br /&gt;
&lt;br /&gt;
Modules based on Lua: Version 8.7.55 2024-12-13 12:24 -07:00&lt;br /&gt;
    by Robert McLay mclay@tacc.utexas.edu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get help for a particular &#039;&#039;module&#039;&#039;, e.g. the default GNU compiler, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module help compiler/gnu&lt;br /&gt;
&lt;br /&gt;
------------- Module Specific Help for &amp;amp;quot;compiler/gnu/14.2&amp;amp;quot; -------------------------------&lt;br /&gt;
This module provides the GNU compiler collection version 14.2.0 via commands&lt;br /&gt;
gcc, g++, gfortran and gccgo. The GNU compiler has been build with the libraries&lt;br /&gt;
gmp (6.3.0), mpfr (4.2.1), mpc (1.3.1) and isl (0.27).&lt;br /&gt;
This compiler supports offloating OpenACC and OpenMP to NVIDIA CUDA using -foffload.&lt;br /&gt;
&lt;br /&gt;
cpp      - GNU pre processor&lt;br /&gt;
gcc      - GNU C compiler&lt;br /&gt;
g++      - GNU C++ compiler&lt;br /&gt;
gfortran - GNU Fortran compiler (Fortran 95/2003/2008 plus legacy Fortran 77)&lt;br /&gt;
gccgo    - GNU Google&#039;s Go language&lt;br /&gt;
&lt;br /&gt;
Libraries can be found in&lt;br /&gt;
  \$GNU_HOME/lib64 = $env(GNU_HOME)/lib64&lt;br /&gt;
One may require additionally libraries installed in&lt;br /&gt;
  \$GNU_HOME/lib   = $env(GNU_HOME)/lib&lt;br /&gt;
&lt;br /&gt;
Local documentation:&lt;br /&gt;
  See commands &#039;man cpp&#039;, &#039;man gcc&#039;, &#039;man g++&#039; and &#039;man gfortran&#039;.&lt;br /&gt;
&lt;br /&gt;
Online documentation:&lt;br /&gt;
  https://gcc.gnu.org/onlinedocs/&lt;br /&gt;
&lt;br /&gt;
For details on library and include dirs please call&lt;br /&gt;
    module show&lt;br /&gt;
&lt;br /&gt;
The man pages, environment variables and compiler commands&lt;br /&gt;
are available after loading &#039;[module-info name]&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of problems, submit a trouble ticket at &#039;https://bw-support.scc.kit.edu&#039;.&lt;br /&gt;
&lt;br /&gt;
The full version is: compiler/gnu/14.2.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayallavailablemodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display all available Modules ==&lt;br /&gt;
&lt;br /&gt;
bwUniCluster3.0 comes with a variety of modules pre-installed. Some of these modules may not be available for all users of all institutions, due to licensing restrictions. You can display all available &#039;&#039;modules&#039;&#039; by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Due to the fact that some modules depend on other modules, some modules may not be shown as available all the time. To get a complete list of all possible modules use the [[#displayallmodules|module spider command]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;module_categories_versions_and_defaults&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Module categories, versions and defaults ==&lt;br /&gt;
&lt;br /&gt;
The bwHPC clusters traditionally provide a large variety of software and software versions. Therefore &#039;&#039;modules&#039;&#039; are divided into category folders containing subfolders of modulefiles again containing modulefile versions, and must be addressed as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category/softwarename/version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For instance all versions of the Intel compiler belong to the category compiler, thus the corresponding modulefiles are placed under the category &#039;&#039;compiler&#039;&#039; and &#039;&#039;intel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of multiple software versions, one version will be defined as the &#039;&#039;&#039;default&#039;&#039;&#039; version. The &#039;&#039;Module&#039;&#039; of the default can be addressed by simply omitting the version number:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category/softwarename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware, that the &#039;&#039;&#039;default&#039;&#039;&#039; version may change over time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;findingsoftwaremodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Finding software Modules ==&lt;br /&gt;
&lt;br /&gt;
Currently all bwUniCluster 3.0 software packages are assigned to the following &#039;&#039;Module&#039;&#039; categories:&lt;br /&gt;
&lt;br /&gt;
* bio&lt;br /&gt;
* cae&lt;br /&gt;
* chem&lt;br /&gt;
* compiler&lt;br /&gt;
* devel&lt;br /&gt;
* lib&lt;br /&gt;
* math&lt;br /&gt;
* mpi&lt;br /&gt;
* numlib&lt;br /&gt;
* phys&lt;br /&gt;
* system&lt;br /&gt;
* toolkit&lt;br /&gt;
* vis&lt;br /&gt;
&lt;br /&gt;
You can selectively list software in one of those categories using, e.g. for the category &amp;amp;quot;compiler&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module avail compiler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Searches with module avail are substring searches and will return any module with the string in its name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;loadingmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Loading Modules ==&lt;br /&gt;
&lt;br /&gt;
To use a software provided through modules in your environment, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module load category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module add category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Loading a &#039;&#039;Module&#039;&#039; in this manner affects your environment only for the current session or until you [[#unloadingmodules|unload]] the module again&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;module-conflicts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== module conflicts ===&lt;br /&gt;
&lt;br /&gt;
For some software, it doesn&#039;t make sense to provide multiple versions of the same software in the same environment. For this reason, module will automatically unload a conflicting version of the same software, e.g. loading the Intel compiler in version X while Intel compiler in version Y is loaded leads to an automatic unloading of Intel compiler in version Y.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;showingchanges&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Showing the changes introduced by a Module ===&lt;br /&gt;
&lt;br /&gt;
Loading a module will change the environment of the current shell session. For instance the $PATH variable will be expanded by the software&#039;s bin directory. Other module variables may even change the behavior of the current shell session or the software program(s) in a more drastic way.&lt;br /&gt;
&lt;br /&gt;
All the changes to the current shell session to be invoked by loading the module can be reviewed using &#039;module show category/softwarename/version&#039;, if version is omitted, information for the default version will be shown, e.g. for the default GNU compiler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module show compiler/gnu&lt;br /&gt;
-------------------------------------------------------------------------------------------------------&lt;br /&gt;
   /opt/bwhpc/common/modulefiles/Core/compiler/gnu/13.3.lua:&lt;br /&gt;
-------------------------------------------------------------------------------------------------------&lt;br /&gt;
setenv(&amp;amp;quot;GNU_VERSION&amp;amp;quot;,&amp;amp;quot;13.3.0&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_HOME&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_BIN_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/bin&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_LIB_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/lib64&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_INC_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/include&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_MAN_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/share/man&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;PATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/bin&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;LD_LIBRARY_PATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/lib64&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;MANPATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/share/man&amp;amp;quot;)&lt;br /&gt;
conflict(&amp;amp;quot;compiler/intel&amp;amp;quot;)&lt;br /&gt;
conflict(&amp;amp;quot;compiler/pgi&amp;amp;quot;)&lt;br /&gt;
whatis(&amp;amp;quot;GNU compiler suite version 13.3.0  (gcc, g++, gfortran, gccgo) including LTO and JIT &amp;amp;quot;)&lt;br /&gt;
help([[This module provides the GNU compiler collection version 13.3.0 via commands&lt;br /&gt;
gcc, g++, gfortran and gccgo. The GNU compiler has been build with the libraries&lt;br /&gt;
gmp (6.3.0), mpfr (4.2.1), mpc (1.3.1) and isl (0.26).&lt;br /&gt;
This compiler supports offloating OpenACC and OpenMP to NVIDIA CUDA using -foffload.&lt;br /&gt;
&lt;br /&gt;
cpp      - GNU pre processor&lt;br /&gt;
gcc      - GNU C compiler&lt;br /&gt;
g++      - GNU C++ compiler&lt;br /&gt;
gfortran - GNU Fortran compiler (Fortran 95/2003/2008 plus legacy Fortran 77)&lt;br /&gt;
gccgo    - GNU Google&#039;s Go language&lt;br /&gt;
&lt;br /&gt;
Libraries can be found in&lt;br /&gt;
  \$GNU_HOME/lib64 = $env(GNU_HOME)/lib64&lt;br /&gt;
One may require additionally libraries installed in&lt;br /&gt;
  \$GNU_HOME/lib   = $env(GNU_HOME)/lib&lt;br /&gt;
&lt;br /&gt;
Local documentation:&lt;br /&gt;
  See commands &#039;man cpp&#039;, &#039;man gcc&#039;, &#039;man g++&#039; and &#039;man gfortran&#039;.&lt;br /&gt;
&lt;br /&gt;
Online documentation:&lt;br /&gt;
  https://gcc.gnu.org/onlinedocs/&lt;br /&gt;
&lt;br /&gt;
For details on library and include dirs please call&lt;br /&gt;
    module show [module-info name]&lt;br /&gt;
&lt;br /&gt;
The man pages, environment variables and compiler commands&lt;br /&gt;
are available after loading &#039;[module-info name]&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of problems, submit a trouble ticket at &#039;https://bw-support.scc.kit.edu&#039;.&lt;br /&gt;
&lt;br /&gt;
The full version is: compiler/gnu/13.3.0&lt;br /&gt;
&lt;br /&gt;
]])&lt;br /&gt;
prepend_path(&amp;amp;quot;MODULEPATH&amp;amp;quot;,&amp;amp;quot;/software/bwhpc/common/modulefiles/Compiler/gnu/13.3&amp;amp;quot;)&lt;br /&gt;
family(&amp;amp;quot;compiler&amp;amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;modules_depending_on_modules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Dependencies between modules ===&lt;br /&gt;
&lt;br /&gt;
Most modern software depends on shared libraries. Shared libraries must be accesible during the runtime of the software. This is true for basic OS libraries as well as for more specialized libraries like math or communication libraries. For basic OS libraries, one version is usually enough for all software running on a system. For the more specialized libraries, different user may prefer different versions or even implementations of these libraries. Theses situations can be represented using modules. The modules contain the information, what tools are necessary to run a specific software and load all required software automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unloadingmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Unloading Modules ==&lt;br /&gt;
&lt;br /&gt;
To unload or remove a module run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module unload category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module remove category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;unloadingallmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Unloading all loaded modules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Purge&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Loading different modules may lead to a expansive list of modules, especially when using [[#EasyBuild|EasyBuild]]. To unload all currently loaded modules use the &#039;module purge&#039; command like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
Currently Loaded Modules:&lt;br /&gt;
  1) compiler/intel/19.1   2) mpi/impi/2019   3) numlib/mkl/2019&lt;br /&gt;
$ module purge&lt;br /&gt;
$ module list&lt;br /&gt;
No modules loaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Be aware that &#039;module purge&#039; is working without any further inquiry.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayyourloadedmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display your loaded Modules ==&lt;br /&gt;
&lt;br /&gt;
All currently loaded modules can be displayed using the &#039;module list&#039; command. [[#basics|See example above]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayallmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display all possible Modules ==&lt;br /&gt;
&lt;br /&gt;
Some of the modules may not be visible with the &#039;module avail&#039; command to due to unmet dependencies. All available and currently not available modules can be listed using the &#039;module spider&#039; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
The following is a list of the modules and extensions currently available:&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  compiler/gnu: compiler/gnu/11.4, compiler/gnu/14.2&lt;br /&gt;
&lt;br /&gt;
  devel/code-server: devel/code-server/4.96.4&lt;br /&gt;
&lt;br /&gt;
  devel/cuda: devel/cuda/12.8&lt;br /&gt;
&lt;br /&gt;
  ... long list of modules and versions ...&lt;br /&gt;
&lt;br /&gt;
To learn more about a package execute:&lt;br /&gt;
&lt;br /&gt;
   $ module spider Foo&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;quot;Foo&amp;amp;quot; is the name of a module.&lt;br /&gt;
&lt;br /&gt;
To find detailed information about a particular package you&lt;br /&gt;
must specify the version if there is more than one version:&lt;br /&gt;
&lt;br /&gt;
   $ module spider Foo/11.1&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To see all versions of a software in a category use &#039;module spider category/name/&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider compiler/gnu&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  compiler/gnu:&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
     Versions:&lt;br /&gt;
        compiler/gnu/11.4&lt;br /&gt;
        compiler/gnu/14.2&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  For detailed information about a specific &amp;amp;quot;compiler/gnu&amp;amp;quot; package (including how to load the modules) use the module&#039;s full name.&lt;br /&gt;
  Note that names that have a trailing (E) are extensions provided by other modules.&lt;br /&gt;
  For example:&lt;br /&gt;
&lt;br /&gt;
     $ module spider compiler/gnu/14.2&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
module spider may be used to show the dependencies of the module. For example, you can see which modules need to be loaded before loading the module mpi/impi/2021.11 is possible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider mpi/impi/2021.11&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
  mpi/impi: mpi/impi/2021.11&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    You will need to load all module(s) on any one of the lines below before the &amp;amp;quot;mpi/impi/2021.11&amp;amp;quot; module is available to load.&lt;br /&gt;
&lt;br /&gt;
      compiler/intel/2021.4.0&lt;br /&gt;
      compiler/intel/2021.4.0_llvm&lt;br /&gt;
      compiler/intel/2022.2.1&lt;br /&gt;
      compiler/intel/2022.2.1_llvm&lt;br /&gt;
      compiler/intel/2023.1.0&lt;br /&gt;
      compiler/intel/2023.1.0_llvm&lt;br /&gt;
      compiler/intel/2024.0_llvm&lt;br /&gt;
&lt;br /&gt;
    Help:&lt;br /&gt;
      Intel MPI Library version 2021.11&lt;br /&gt;
&lt;br /&gt;
      From the product website&lt;br /&gt;
      (https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html):&lt;br /&gt;
&lt;br /&gt;
      Intel MPI Library&lt;br /&gt;
      Deliver flexible, efficient, and scalable cluster messaging.&lt;br /&gt;
&lt;br /&gt;
      One Library with Multiple Fabric Support&lt;br /&gt;
      Intel MPI Library is a multifabric message-passing library that implements the&lt;br /&gt;
      open-source MPICH specification. Use the library to create, maintain, and test&lt;br /&gt;
      advanced, complex applications that perform better on high-performance&lt;br /&gt;
      computing (HPC) clusters based on Intel processors.&lt;br /&gt;
&lt;br /&gt;
      * Develop applications that can run on multiple cluster interconnects that you&lt;br /&gt;
        choose at run time.&lt;br /&gt;
      * Quickly deliver maximum end-user performance without having to change the&lt;br /&gt;
        software or operating environment.&lt;br /&gt;
      * Achieve the best latency, bandwidth, and scalability through automatic tuning&lt;br /&gt;
        for the latest Intel platforms.&lt;br /&gt;
      * Reduce the time to market by linking to one library and deploying on the&lt;br /&gt;
        latest optimized fabrics.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;EasyBuild&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= EasyBuild modules =&lt;br /&gt;
&lt;br /&gt;
With bwUniCluster 3.0 we start an official beta-test to provide toolchains and scientific software built with [https://docs.easybuild.io/ EasyBuild]. EasyBuild is a well established and consistent way to provide scientific software at many HPC sites all over the world. Since the naming of EasyBuild modules is consistent users can use modules with the same name at different sites. To make this possible, Easybuild software minimizes the resources used by the local operating system and provides most software independently. This makes scientific results more reproducible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;using-easybuild-modules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Using EasyBuild modules ==&lt;br /&gt;
&lt;br /&gt;
Users interested in using EasyBuild modules need to add the EasyBuild module paths to their module environment. This can be done using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/enable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now users have acces to a complete EasyBuild module tree, providing compiler toolchains, libraries, and scientific software. The same module commands described above (Lmod) can be used for EasyBuild modules. They can be loaded and unloaded in the same way. Please try not to mix EasyBuild modules with the standard modules. There may be unintended consequences. It&#039;s always a good idea to [[#purge|purge]] all modules before loading new ones. If you want to use EasyBuild modules in your job scripts, please make sure to enable them in your job script as well.&lt;br /&gt;
&lt;br /&gt;
To hide the EasyBuild modules again, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/disable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or start again with a clean shell.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;easybuild-conventions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EasyBuild conventions ==&lt;br /&gt;
&lt;br /&gt;
In theory one could build every software against every library and every compiler. This would lead to an unmaintainable amount of combinations. For this reason the EasyBuild team has decided to provide two so called toolchains a year for the most common compiler suits. Each toolchain defines one version of compiler, MPI library, math libraries and other packages as default for all software built aginst this toolchain. On bwUniCluster 3.0 we start with 3 FOSS, 3 Intel and one NVHPC toolchains. For a complete list of EasyBuild toolchains, please see [https://docs.easybuild.io/version-specific/toolchains/ the EasyBuild website]. Currently the 2023a, 2023b, and 2024a toolchains are available, with 2024a being the default one. Some software may not be available for the latest toolchain yet, but may be available for an older toolchain.&lt;br /&gt;
&lt;br /&gt;
EasyBuild currently supports almost 4000 software packages. We can and will only provide a subset, of course. As a start, we provide current versions of popular software packages from bwUniCluster 2.0. Updating and extending EasyBuild packages is a community effort, which should make providing new software easier. We try to provide additional packages if users request the installation. If we can&#039;t provide the software you can still use the advantages of EasyBuild by using it to build your private version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;build-individual-easybuild-packages-as-a-user&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Build individual EasyBuild packages as a user ==&lt;br /&gt;
&lt;br /&gt;
EasyBuild can also be used to compile your own or niche software, based on the available EasyBuild files by creating an independent EasyBuild software and module tree. The bwUnicluster 3.0 EasyBuild tree can be used as a base to build additional software in your HOME directory.&lt;br /&gt;
&lt;br /&gt;
Check provided EasyBuild installations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;module spider EasyBuild&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have to load an EasyBuild module, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;module load EasyBuild/5.3.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We assume the following&lt;br /&gt;
&lt;br /&gt;
* the sofware will be installed in your HOME directory in the sub-directory &amp;lt;code&amp;gt;eb&amp;lt;/code&amp;gt;&lt;br /&gt;
* you have already cloned the git repository from https://github.com/easybuilders/easybuild-easyconfigs to &amp;lt;code&amp;gt;~/eb/easybuild-easyconfigs&amp;lt;/code&amp;gt;&lt;br /&gt;
* create an EasyBuild configuration file in your home at &amp;lt;code&amp;gt;~/.config/easybuild/config.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;[basic]&lt;br /&gt;
robot=&amp;amp;lt;path_to_your_home&amp;amp;gt;/eb/easybuild-easyconfigs/easybuild/easyconfigs&lt;br /&gt;
[config]&lt;br /&gt;
modules-tool: Lmod&lt;br /&gt;
prefix=&amp;amp;lt;path_to_your_home&amp;amp;gt;/eb&lt;br /&gt;
buildpath=/scratch/build&lt;br /&gt;
[override]&lt;br /&gt;
allow-modules-tool-mismatch=True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* add system-wide EasyBuild module path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/enable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* add local module path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;mkdir -p ~/eb/modules/all&lt;br /&gt;
module use ~/eb/modules/all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* find or create EasyBuild file, you can use any of the EasyBuild&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;ls ~/eb/easybuild-easyconfigs/easybuild/easyconfigs/*/* | grep eb$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* build your software with EasyBuild&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;eb cowsay-3.04.eb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* use your software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module load cowsay&lt;br /&gt;
$ cowsay &amp;amp;quot;Hello EasyBuild&amp;amp;quot;&lt;br /&gt;
 _________________&lt;br /&gt;
&amp;amp;lt; Hello EasyBuild &amp;amp;gt;&lt;br /&gt;
 -----------------&lt;br /&gt;
        \   ^__^&lt;br /&gt;
         \  (oo)\_______&lt;br /&gt;
            (__)\       )\/\&lt;br /&gt;
                ||----w |&lt;br /&gt;
                ||     ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;how_do_modules_work&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= How do Modules work? =&lt;br /&gt;
&lt;br /&gt;
The default shell on the bwUniCluster 3.0 is bash, so explanations and examples will be shown for bash. In general, programs cannot modify the environment of the shell they are being run from, so how can the module command do exactly that? The module command is not a program, but a bash-function. You can view its content using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ type module&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you will get the following result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ type module&lt;br /&gt;
module is a function&lt;br /&gt;
module ()&lt;br /&gt;
{&lt;br /&gt;
    eval $($LMOD_CMD bash &amp;amp;quot;$@&amp;amp;quot;);&lt;br /&gt;
    [ $? = 0 ] &amp;amp;amp;&amp;amp;amp; eval $(${LMOD_SETTARG_CMD:-:} -s sh)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this function, lmod is called. Its output to stdout is then executed inside your current shell using the bash-internal &#039;&#039;eval&#039;&#039; command. As a consequence, all output that you see from the module is transmitted via stderr (output handle 2) or in some cases even stdin (output handle 0). [[#introduction|back to top]]&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Software_Modules&amp;diff=16054</id>
		<title>BwUniCluster3.0/Software Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwUniCluster3.0/Software_Modules&amp;diff=16054"/>
		<updated>2026-05-11T09:29:30Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Build individual EasyBuild packages as a user */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;introduction&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software (Environment) Modules&#039;&#039;&#039;, or short &#039;&#039;&#039;modules&#039;&#039;&#039; are the means by which most of the installed scientific software is provided on &#039;&#039;bwUniCluster 3.0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Different compilers, libraries and software packages requires users to set up a specific session environment suited for the program they want to run. &#039;&#039;bwUniCluster 3.0&#039;&#039; provides users with the possibility to load and unload complete environments for compilers, libraries and software packages using a single command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;basics&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Basics =&lt;br /&gt;
&lt;br /&gt;
The Environment &#039;&#039;modules&#039;&#039; package enables dynamic modification of shell environments. Typically, a modulefile contains instructions that alter or set shell environment variables, such as PATH and MANPATH, to enable access to various installed software.&lt;br /&gt;
&lt;br /&gt;
One of the key features of Environment &#039;&#039;Modules&#039;&#039; is the ability to have multiple versions of the same software available in a controlled manner. For example, two different versions of the Intel C compiler can be installed on the system at the same time - the version used is based upon which Intel C compiler modulefile is loaded.&lt;br /&gt;
&lt;br /&gt;
The software stack of bwUniCluster 3.0 provides a number of modules. Users can also provide modules for their own software. &#039;&#039;Modules&#039;&#039; may be shared between users on a system, and users may have their own collection of &#039;&#039;modules&#039;&#039; to supplement or replace the global &#039;&#039;modules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To see which modules are currently loaded/enabled one must execute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
No modules loaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the user has just logged in no &#039;&#039;modules&#039;&#039; should be loaded.&lt;br /&gt;
&lt;br /&gt;
If a user has setup his/her environment for an Intel toolchain the output may look like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
&lt;br /&gt;
Currently Loaded Modules:&lt;br /&gt;
  1) compiler/intel/2023.1.0   2) numlib/mkl/2022.2.1   3) mpi/impi/2021.11&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
bwUniCluster 3.0 has been set up to use the &#039;&#039;Lmod&#039;&#039; module system. &#039;&#039;Lmod&#039;&#039; is a modern replacement of the older tcl-based environment modules. The complete &#039;&#039;Lmod&#039;&#039; documentation can be found [[&amp;lt;nowiki/&amp;gt;http://lmod.readthedocs.org/en/latest/][here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;documentation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Getting help ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Lmod&#039;&#039; module command provides a manual page (man module) and a help command line option. Execute &#039;&#039;&#039;&#039;module help&#039;&#039;&#039;&#039; or &#039;&#039;&#039;&#039;man module&#039;&#039;&#039;&#039; for help on how to use &#039;&#039;Lmod&#039;&#039; software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module help&lt;br /&gt;
Usage: module [options] sub-command [args ...]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -h -? -H --help                   This help message&lt;br /&gt;
...&lt;br /&gt;
a lot of help&lt;br /&gt;
...&lt;br /&gt;
Lmod Web Sites&lt;br /&gt;
&lt;br /&gt;
  Documentation:    https://lmod.readthedocs.org&lt;br /&gt;
  GitHub:           https://github.com/TACC/Lmod&lt;br /&gt;
  SourceForge:      https://lmod.sf.net&lt;br /&gt;
  TACC Homepage:    https://www.tacc.utexas.edu/research-development/tacc-projects/lmod&lt;br /&gt;
&lt;br /&gt;
  To report a bug please read https://lmod.readthedocs.io/en/latest/075_bug_reporting.html&lt;br /&gt;
&lt;br /&gt;
Modules based on Lua: Version 8.7.55 2024-12-13 12:24 -07:00&lt;br /&gt;
    by Robert McLay mclay@tacc.utexas.edu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get help for a particular &#039;&#039;module&#039;&#039;, e.g. the default GNU compiler, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module help compiler/gnu&lt;br /&gt;
&lt;br /&gt;
------------- Module Specific Help for &amp;amp;quot;compiler/gnu/14.2&amp;amp;quot; -------------------------------&lt;br /&gt;
This module provides the GNU compiler collection version 14.2.0 via commands&lt;br /&gt;
gcc, g++, gfortran and gccgo. The GNU compiler has been build with the libraries&lt;br /&gt;
gmp (6.3.0), mpfr (4.2.1), mpc (1.3.1) and isl (0.27).&lt;br /&gt;
This compiler supports offloating OpenACC and OpenMP to NVIDIA CUDA using -foffload.&lt;br /&gt;
&lt;br /&gt;
cpp      - GNU pre processor&lt;br /&gt;
gcc      - GNU C compiler&lt;br /&gt;
g++      - GNU C++ compiler&lt;br /&gt;
gfortran - GNU Fortran compiler (Fortran 95/2003/2008 plus legacy Fortran 77)&lt;br /&gt;
gccgo    - GNU Google&#039;s Go language&lt;br /&gt;
&lt;br /&gt;
Libraries can be found in&lt;br /&gt;
  \$GNU_HOME/lib64 = $env(GNU_HOME)/lib64&lt;br /&gt;
One may require additionally libraries installed in&lt;br /&gt;
  \$GNU_HOME/lib   = $env(GNU_HOME)/lib&lt;br /&gt;
&lt;br /&gt;
Local documentation:&lt;br /&gt;
  See commands &#039;man cpp&#039;, &#039;man gcc&#039;, &#039;man g++&#039; and &#039;man gfortran&#039;.&lt;br /&gt;
&lt;br /&gt;
Online documentation:&lt;br /&gt;
  https://gcc.gnu.org/onlinedocs/&lt;br /&gt;
&lt;br /&gt;
For details on library and include dirs please call&lt;br /&gt;
    module show&lt;br /&gt;
&lt;br /&gt;
The man pages, environment variables and compiler commands&lt;br /&gt;
are available after loading &#039;[module-info name]&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of problems, submit a trouble ticket at &#039;https://bw-support.scc.kit.edu&#039;.&lt;br /&gt;
&lt;br /&gt;
The full version is: compiler/gnu/14.2.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayallavailablemodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display all available Modules ==&lt;br /&gt;
&lt;br /&gt;
bwUniCluster3.0 comes with a variety of modules pre-installed. Some of these modules may not be available for all users of all institutions, due to licensing restrictions. You can display all available &#039;&#039;modules&#039;&#039; by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Due to the fact that some modules depend on other modules, some modules may not be shown as available all the time. To get a complete list of all possible modules use the [[#displayallmodules|module spider command]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;module_categories_versions_and_defaults&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Module categories, versions and defaults ==&lt;br /&gt;
&lt;br /&gt;
The bwHPC clusters traditionally provide a large variety of software and software versions. Therefore &#039;&#039;modules&#039;&#039; are divided into category folders containing subfolders of modulefiles again containing modulefile versions, and must be addressed as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category/softwarename/version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For instance all versions of the Intel compiler belong to the category compiler, thus the corresponding modulefiles are placed under the category &#039;&#039;compiler&#039;&#039; and &#039;&#039;intel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of multiple software versions, one version will be defined as the &#039;&#039;&#039;default&#039;&#039;&#039; version. The &#039;&#039;Module&#039;&#039; of the default can be addressed by simply omitting the version number:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category/softwarename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware, that the &#039;&#039;&#039;default&#039;&#039;&#039; version may change over time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;findingsoftwaremodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Finding software Modules ==&lt;br /&gt;
&lt;br /&gt;
Currently all bwUniCluster 3.0 software packages are assigned to the following &#039;&#039;Module&#039;&#039; categories:&lt;br /&gt;
&lt;br /&gt;
* bio&lt;br /&gt;
* cae&lt;br /&gt;
* chem&lt;br /&gt;
* compiler&lt;br /&gt;
* devel&lt;br /&gt;
* lib&lt;br /&gt;
* math&lt;br /&gt;
* mpi&lt;br /&gt;
* numlib&lt;br /&gt;
* phys&lt;br /&gt;
* system&lt;br /&gt;
* toolkit&lt;br /&gt;
* vis&lt;br /&gt;
&lt;br /&gt;
You can selectively list software in one of those categories using, e.g. for the category &amp;amp;quot;compiler&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module avail compiler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Searches with module avail are substring searches and will return any module with the string in its name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;loadingmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Loading Modules ==&lt;br /&gt;
&lt;br /&gt;
To use a software provided through modules in your environment, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module load category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module add category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Loading a &#039;&#039;Module&#039;&#039; in this manner affects your environment only for the current session or until you [[#unloadingmodules|unload]] the module again&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;module-conflicts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== module conflicts ===&lt;br /&gt;
&lt;br /&gt;
For some software, it doesn&#039;t make sense to provide multiple versions of the same software in the same environment. For this reason, module will automatically unload a conflicting version of the same software, e.g. loading the Intel compiler in version X while Intel compiler in version Y is loaded leads to an automatic unloading of Intel compiler in version Y.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;showingchanges&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Showing the changes introduced by a Module ===&lt;br /&gt;
&lt;br /&gt;
Loading a module will change the environment of the current shell session. For instance the $PATH variable will be expanded by the software&#039;s bin directory. Other module variables may even change the behavior of the current shell session or the software program(s) in a more drastic way.&lt;br /&gt;
&lt;br /&gt;
All the changes to the current shell session to be invoked by loading the module can be reviewed using &#039;module show category/softwarename/version&#039;, if version is omitted, information for the default version will be shown, e.g. for the default GNU compiler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module show compiler/gnu&lt;br /&gt;
-------------------------------------------------------------------------------------------------------&lt;br /&gt;
   /opt/bwhpc/common/modulefiles/Core/compiler/gnu/13.3.lua:&lt;br /&gt;
-------------------------------------------------------------------------------------------------------&lt;br /&gt;
setenv(&amp;amp;quot;GNU_VERSION&amp;amp;quot;,&amp;amp;quot;13.3.0&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_HOME&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_BIN_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/bin&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_LIB_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/lib64&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_INC_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/include&amp;amp;quot;)&lt;br /&gt;
setenv(&amp;amp;quot;GNU_MAN_DIR&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/share/man&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;PATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/bin&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;LD_LIBRARY_PATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/lib64&amp;amp;quot;)&lt;br /&gt;
prepend_path(&amp;amp;quot;MANPATH&amp;amp;quot;,&amp;amp;quot;/opt/bwhpc/common/compiler/gnu/13.3.0/share/man&amp;amp;quot;)&lt;br /&gt;
conflict(&amp;amp;quot;compiler/intel&amp;amp;quot;)&lt;br /&gt;
conflict(&amp;amp;quot;compiler/pgi&amp;amp;quot;)&lt;br /&gt;
whatis(&amp;amp;quot;GNU compiler suite version 13.3.0  (gcc, g++, gfortran, gccgo) including LTO and JIT &amp;amp;quot;)&lt;br /&gt;
help([[This module provides the GNU compiler collection version 13.3.0 via commands&lt;br /&gt;
gcc, g++, gfortran and gccgo. The GNU compiler has been build with the libraries&lt;br /&gt;
gmp (6.3.0), mpfr (4.2.1), mpc (1.3.1) and isl (0.26).&lt;br /&gt;
This compiler supports offloating OpenACC and OpenMP to NVIDIA CUDA using -foffload.&lt;br /&gt;
&lt;br /&gt;
cpp      - GNU pre processor&lt;br /&gt;
gcc      - GNU C compiler&lt;br /&gt;
g++      - GNU C++ compiler&lt;br /&gt;
gfortran - GNU Fortran compiler (Fortran 95/2003/2008 plus legacy Fortran 77)&lt;br /&gt;
gccgo    - GNU Google&#039;s Go language&lt;br /&gt;
&lt;br /&gt;
Libraries can be found in&lt;br /&gt;
  \$GNU_HOME/lib64 = $env(GNU_HOME)/lib64&lt;br /&gt;
One may require additionally libraries installed in&lt;br /&gt;
  \$GNU_HOME/lib   = $env(GNU_HOME)/lib&lt;br /&gt;
&lt;br /&gt;
Local documentation:&lt;br /&gt;
  See commands &#039;man cpp&#039;, &#039;man gcc&#039;, &#039;man g++&#039; and &#039;man gfortran&#039;.&lt;br /&gt;
&lt;br /&gt;
Online documentation:&lt;br /&gt;
  https://gcc.gnu.org/onlinedocs/&lt;br /&gt;
&lt;br /&gt;
For details on library and include dirs please call&lt;br /&gt;
    module show [module-info name]&lt;br /&gt;
&lt;br /&gt;
The man pages, environment variables and compiler commands&lt;br /&gt;
are available after loading &#039;[module-info name]&#039;.&lt;br /&gt;
&lt;br /&gt;
In case of problems, submit a trouble ticket at &#039;https://bw-support.scc.kit.edu&#039;.&lt;br /&gt;
&lt;br /&gt;
The full version is: compiler/gnu/13.3.0&lt;br /&gt;
&lt;br /&gt;
]])&lt;br /&gt;
prepend_path(&amp;amp;quot;MODULEPATH&amp;amp;quot;,&amp;amp;quot;/software/bwhpc/common/modulefiles/Compiler/gnu/13.3&amp;amp;quot;)&lt;br /&gt;
family(&amp;amp;quot;compiler&amp;amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;modules_depending_on_modules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Dependencies between modules ===&lt;br /&gt;
&lt;br /&gt;
Most modern software depends on shared libraries. Shared libraries must be accesible during the runtime of the software. This is true for basic OS libraries as well as for more specialized libraries like math or communication libraries. For basic OS libraries, one version is usually enough for all software running on a system. For the more specialized libraries, different user may prefer different versions or even implementations of these libraries. Theses situations can be represented using modules. The modules contain the information, what tools are necessary to run a specific software and load all required software automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unloadingmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Unloading Modules ==&lt;br /&gt;
&lt;br /&gt;
To unload or remove a module run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module unload category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module remove category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;unloadingallmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Unloading all loaded modules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Purge&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Loading different modules may lead to a expansive list of modules, especially when using [[#EasyBuild|EasyBuild]]. To unload all currently loaded modules use the &#039;module purge&#039; command like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module list&lt;br /&gt;
Currently Loaded Modules:&lt;br /&gt;
  1) compiler/intel/19.1   2) mpi/impi/2019   3) numlib/mkl/2019&lt;br /&gt;
$ module purge&lt;br /&gt;
$ module list&lt;br /&gt;
No modules loaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Be aware that &#039;module purge&#039; is working without any further inquiry.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayyourloadedmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display your loaded Modules ==&lt;br /&gt;
&lt;br /&gt;
All currently loaded modules can be displayed using the &#039;module list&#039; command. [[#basics|See example above]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displayallmodules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Display all possible Modules ==&lt;br /&gt;
&lt;br /&gt;
Some of the modules may not be visible with the &#039;module avail&#039; command to due to unmet dependencies. All available and currently not available modules can be listed using the &#039;module spider&#039; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
The following is a list of the modules and extensions currently available:&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  compiler/gnu: compiler/gnu/11.4, compiler/gnu/14.2&lt;br /&gt;
&lt;br /&gt;
  devel/code-server: devel/code-server/4.96.4&lt;br /&gt;
&lt;br /&gt;
  devel/cuda: devel/cuda/12.8&lt;br /&gt;
&lt;br /&gt;
  ... long list of modules and versions ...&lt;br /&gt;
&lt;br /&gt;
To learn more about a package execute:&lt;br /&gt;
&lt;br /&gt;
   $ module spider Foo&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;quot;Foo&amp;amp;quot; is the name of a module.&lt;br /&gt;
&lt;br /&gt;
To find detailed information about a particular package you&lt;br /&gt;
must specify the version if there is more than one version:&lt;br /&gt;
&lt;br /&gt;
   $ module spider Foo/11.1&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To see all versions of a software in a category use &#039;module spider category/name/&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider compiler/gnu&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  compiler/gnu:&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
     Versions:&lt;br /&gt;
        compiler/gnu/11.4&lt;br /&gt;
        compiler/gnu/14.2&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
  For detailed information about a specific &amp;amp;quot;compiler/gnu&amp;amp;quot; package (including how to load the modules) use the module&#039;s full name.&lt;br /&gt;
  Note that names that have a trailing (E) are extensions provided by other modules.&lt;br /&gt;
  For example:&lt;br /&gt;
&lt;br /&gt;
     $ module spider compiler/gnu/14.2&lt;br /&gt;
-----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
module spider may be used to show the dependencies of the module. For example, you can see which modules need to be loaded before loading the module mpi/impi/2021.11 is possible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module spider mpi/impi/2021.11&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
  mpi/impi: mpi/impi/2021.11&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    You will need to load all module(s) on any one of the lines below before the &amp;amp;quot;mpi/impi/2021.11&amp;amp;quot; module is available to load.&lt;br /&gt;
&lt;br /&gt;
      compiler/intel/2021.4.0&lt;br /&gt;
      compiler/intel/2021.4.0_llvm&lt;br /&gt;
      compiler/intel/2022.2.1&lt;br /&gt;
      compiler/intel/2022.2.1_llvm&lt;br /&gt;
      compiler/intel/2023.1.0&lt;br /&gt;
      compiler/intel/2023.1.0_llvm&lt;br /&gt;
      compiler/intel/2024.0_llvm&lt;br /&gt;
&lt;br /&gt;
    Help:&lt;br /&gt;
      Intel MPI Library version 2021.11&lt;br /&gt;
&lt;br /&gt;
      From the product website&lt;br /&gt;
      (https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html):&lt;br /&gt;
&lt;br /&gt;
      Intel MPI Library&lt;br /&gt;
      Deliver flexible, efficient, and scalable cluster messaging.&lt;br /&gt;
&lt;br /&gt;
      One Library with Multiple Fabric Support&lt;br /&gt;
      Intel MPI Library is a multifabric message-passing library that implements the&lt;br /&gt;
      open-source MPICH specification. Use the library to create, maintain, and test&lt;br /&gt;
      advanced, complex applications that perform better on high-performance&lt;br /&gt;
      computing (HPC) clusters based on Intel processors.&lt;br /&gt;
&lt;br /&gt;
      * Develop applications that can run on multiple cluster interconnects that you&lt;br /&gt;
        choose at run time.&lt;br /&gt;
      * Quickly deliver maximum end-user performance without having to change the&lt;br /&gt;
        software or operating environment.&lt;br /&gt;
      * Achieve the best latency, bandwidth, and scalability through automatic tuning&lt;br /&gt;
        for the latest Intel platforms.&lt;br /&gt;
      * Reduce the time to market by linking to one library and deploying on the&lt;br /&gt;
        latest optimized fabrics.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;EasyBuild&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= EasyBuild modules =&lt;br /&gt;
&lt;br /&gt;
With bwUniCluster 3.0 we start an official beta-test to provide toolchains and scientific software built with [https://docs.easybuild.io/ EasyBuild]. EasyBuild is a well established and consistent way to provide scientific software at many HPC sites all over the world. Since the naming of EasyBuild modules is consistent users can use modules with the same name at different sites. To make this possible, Easybuild software minimizes the resources used by the local operating system and provides most software independently. This makes scientific results more reproducible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;using-easybuild-modules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Using EasyBuild modules ==&lt;br /&gt;
&lt;br /&gt;
Users interested in using EasyBuild modules need to add the EasyBuild module paths to their module environment. This can be done using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/enable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now users have acces to a complete EasyBuild module tree, providing compiler toolchains, libraries, and scientific software. The same module commands described above (Lmod) can be used for EasyBuild modules. They can be loaded and unloaded in the same way. Please try not to mix EasyBuild modules with the standard modules. There may be unintended consequences. It&#039;s always a good idea to [[#purge|purge]] all modules before loading new ones. If you want to use EasyBuild modules in your job scripts, please make sure to enable them in your job script as well.&lt;br /&gt;
&lt;br /&gt;
To hide the EasyBuild modules again, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/disable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or start again with a clean shell.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;easybuild-conventions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EasyBuild conventions ==&lt;br /&gt;
&lt;br /&gt;
In theory one could build every software against every library and every compiler. This would lead to an unmaintainable amount of combinations. For this reason the EasyBuild team has decided to provide two so called toolchains a year for the most common compiler suits. Each toolchain defines one version of compiler, MPI library, math libraries and other packages as default for all software built aginst this toolchain. On bwUniCluster 3.0 we start with 3 FOSS, 3 Intel and one NVHPC toolchains. For a complete list of EasyBuild toolchains, please see [https://docs.easybuild.io/version-specific/toolchains/ the EasyBuild website]. Currently the 2023a, 2023b, and 2024a toolchains are available, with 2024a being the default one. Some software may not be available for the latest toolchain yet, but may be available for an older toolchain.&lt;br /&gt;
&lt;br /&gt;
EasyBuild currently supports almost 4000 software packages. We can and will only provide a subset, of course. As a start, we provide current versions of popular software packages from bwUniCluster 2.0. Updating and extending EasyBuild packages is a community effort, which should make providing new software easier. We try to provide additional packages if users request the installation. If we can&#039;t provide the software you can still use the advantages of EasyBuild by using it to build your private version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;build-individual-easybuild-packages-as-a-user&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Build individual EasyBuild packages as a user ==&lt;br /&gt;
&lt;br /&gt;
EasyBuild can also be used to compile your own or niche software, based on the available EasyBuild files by creating an independent EasyBuild software and module tree. The bwUnicluster 3.0 EasyBuild tree can be used as a base to build additional software in your HOME directory.&lt;br /&gt;
&lt;br /&gt;
Check provided EasyBuild installations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;module spider EasyBuild&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have to load the EasyBuild module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;module load EasyBuild/5.3.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We assume the following&lt;br /&gt;
&lt;br /&gt;
* the sofware will be installed in your HOME directory in the sub-directory &amp;lt;code&amp;gt;eb&amp;lt;/code&amp;gt;&lt;br /&gt;
* you have already cloned the git repository from https://github.com/easybuilders/easybuild-easyconfigs to &amp;lt;code&amp;gt;~/eb/easybuild-easyconfigs&amp;lt;/code&amp;gt;&lt;br /&gt;
* create an EasyBuild configuration file in your home at &amp;lt;code&amp;gt;~/.config/easybuild/config.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;[basic]&lt;br /&gt;
robot=&amp;amp;lt;path_to_your_home&amp;amp;gt;/eb/easybuild-easyconfigs/easybuild/easyconfigs&lt;br /&gt;
[config]&lt;br /&gt;
modules-tool: Lmod&lt;br /&gt;
prefix=&amp;amp;lt;path_to_your_home&amp;amp;gt;/eb&lt;br /&gt;
buildpath=/scratch/build&lt;br /&gt;
[override]&lt;br /&gt;
allow-modules-tool-mismatch=True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* add system-wide EasyBuild module path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;source /opt/bwhpc/common/etc/easybuild/enable_eb_modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* add local module path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;mkdir -p ~/eb/modules/all&lt;br /&gt;
module use ~/eb/modules/all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* find or create EasyBuild file, you can use any of the EasyBuild&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;ls ~/eb/easybuild-easyconfigs/easybuild/easyconfigs/*/* | grep eb$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* build your software with EasyBuild&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;eb cowsay-3.04.eb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* use your software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ module load cowsay&lt;br /&gt;
$ cowsay &amp;amp;quot;Hello EasyBuild&amp;amp;quot;&lt;br /&gt;
 _________________&lt;br /&gt;
&amp;amp;lt; Hello EasyBuild &amp;amp;gt;&lt;br /&gt;
 -----------------&lt;br /&gt;
        \   ^__^&lt;br /&gt;
         \  (oo)\_______&lt;br /&gt;
            (__)\       )\/\&lt;br /&gt;
                ||----w |&lt;br /&gt;
                ||     ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;how_do_modules_work&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= How do Modules work? =&lt;br /&gt;
&lt;br /&gt;
The default shell on the bwUniCluster 3.0 is bash, so explanations and examples will be shown for bash. In general, programs cannot modify the environment of the shell they are being run from, so how can the module command do exactly that? The module command is not a program, but a bash-function. You can view its content using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ type module&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you will get the following result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;example&amp;quot;&amp;gt;$ type module&lt;br /&gt;
module is a function&lt;br /&gt;
module ()&lt;br /&gt;
{&lt;br /&gt;
    eval $($LMOD_CMD bash &amp;amp;quot;$@&amp;amp;quot;);&lt;br /&gt;
    [ $? = 0 ] &amp;amp;amp;&amp;amp;amp; eval $(${LMOD_SETTARG_CMD:-:} -s sh)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this function, lmod is called. Its output to stdout is then executed inside your current shell using the bash-internal &#039;&#039;eval&#039;&#039; command. As a consequence, all output that you see from the module is transmitted via stderr (output handle 2) or in some cases even stdin (output handle 0). [[#introduction|back to top]]&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwForCluster/Entitlement&amp;diff=16026</id>
		<title>Registration/bwForCluster/Entitlement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwForCluster/Entitlement&amp;diff=16026"/>
		<updated>2026-04-28T15:18:31Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Request an Entitlement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 3px solid #e2e3e5; padding: 15px; background-color: #ffffff; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
The bwForCluster Entitlement is issued by the university you are a member of. It tells the cluster-operator that you are currently a member of this university. It also means that the university checked that your actions comply with the German Foreign Trade Act (Außenwirtschaftsgesetz - AWG) and German Foreign Trade Regulations (Außenwirtschaftsverordnung - AWV)  (see [https://www.bwidm.de/attribute.php#Berechtigung eduPersonEntitlement]).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Step A: bwForCluster Entitlement =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #0066cc; padding: 15px; background-color: #e7f3ff; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
To register for a bwForCluster you need the  &#039;&#039;&#039;bwForCluster Entitlement&#039;&#039;&#039; issued by your university.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full name of the entitlement is &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://bwidm.de/entitlement/bwForCluster&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Note that this is the name of an identity management attribute and not a link. &lt;br /&gt;
&lt;br /&gt;
More informations on Entitlements and other attributes in general: [https://www.bwidm.de/dienste.php Entitlement (Dienste)]&lt;br /&gt;
&lt;br /&gt;
== Check your Entitlements ==&lt;br /&gt;
&lt;br /&gt;
First check if you already have the Entitlement, some universities automatically assign the entitlement to some accounts:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[https://login.bwidm.de/user/index.xhtml?show=entitlement&amp;amp;highlight=bwForCluster Registration Server bwForCluster Entitlement Check]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- image can be deleted [[File:BwIDM-idp.png|center|600px|thumb|Verify Entitlement.]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Request an Entitlement == &lt;br /&gt;
&lt;br /&gt;
If you need the entitlement, please follow the link for your institution or contact your local service desk if no information is provided:&lt;br /&gt;
&amp;lt;!--* [https://www.hs-esslingen.de/informatik-und-informationstechnik/forschung-labore/projekte/forschungsprojekte/high-performance-computing/ Hochschule Esslingen]--&amp;gt;&lt;br /&gt;
* [[Registration/bwIDM-Entitlements-Uni-Freiburg|Universität Freiburg]]&lt;br /&gt;
* [https://heiservices.uni-heidelberg.de/entitlement Universität Heidelberg] (access only within Uni Heidelberg network)&lt;br /&gt;
* [https://kim.uni-hohenheim.de/bwhpc-account/ Universität Hohenheim]&lt;br /&gt;
* [https://www.scc.kit.edu/downloads/ISM/SD-HPC-Formulare/Accessform_bwForCluster_v1_DE_EN_2026.pdf Karlsruhe Institute of Technology (KIT)]&lt;br /&gt;
* [https://www.kim.uni-konstanz.de/services/forschen-und-lehren/high-performance-computing/zugang-bwforcluster/ Universität Konstanz]&lt;br /&gt;
* [[BwForCluster User Access Members Uni Mannheim|Universität Mannheim]]&lt;br /&gt;
* [https://www.hlrs.de/apply-for-computing-time/bwforcluster Universität Stuttgart]&lt;br /&gt;
* [[BwForCluster User Access Members Uni Tübingen|Universität Tübingen]]&lt;br /&gt;
* [[BwForCluster User Access Members Uni Ulm|Universität Ulm]]&lt;br /&gt;
* [[Registration/HAW|HAW BW e.V.]]: Please contact your local service desk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #ffc107; padding: 15px; background-color: #fff3cd; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Entitlement Synchronization:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After your university assigns the entitlement, it takes some time for it to synchronize across the system.&lt;br /&gt;
* &#039;&#039;&#039;If the entitlement does not appear within 24 hours,&#039;&#039;&#039; contact your local service desk&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:right;&amp;quot;&amp;gt;[[Registration/bwForCluster/RV|Go to step B]]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Energy_Efficient_Cluster_Usage&amp;diff=15996</id>
		<title>Energy Efficient Cluster Usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Energy_Efficient_Cluster_Usage&amp;diff=15996"/>
		<updated>2026-04-22T10:35:53Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* What do I want to do and why do I need an HPC Cluster for it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Energy consumption of data centers has been increasing continuously throughout the last decade. In 2020, the energy consumption of all data centers in Germany amounted to around  [https://www.bundestag.de/resource/blob/863850/423c11968fcb5c9995e9ef9090edf9e6/WD-8-070-21-pdf-data.pdf 3 percent] of the total electricity produced. Accompanying this large energy consumption are large-scale emissions of CO2 to the atmosphere and thus significant contributions to climate change.&lt;br /&gt;
To illustrate this, an average compute job running on a single node for one day may easily consume 10 kWh or even more. That translates roughly to brewing 700 cups of coffee.&lt;br /&gt;
Assuming that a typical bwHPC cluster has a few hundred compute nodes, this amounts to the energy consumption of a village for each cluster. &lt;br /&gt;
&lt;br /&gt;
Although a large amount of this energy consumption is an intrinsic requirement of running large HPC clusters (even when it&#039;s processors are idle, a cluster uses a lot of energy), efficient use of the available resources is important. Using as many resources as possible does not make a power user. Using them wisely does.&lt;br /&gt;
In the following, a basic introduction to some of the most important aspects of energy-efficient HPC usage from a user perspective is given. &lt;br /&gt;
&lt;br /&gt;
We can generally distinguish three tasks when optimizing for running HPC jobs efficiently.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  What do I want to do and why do I need an HPC Cluster for it?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  How many and which kind of hardware resources do I require for it?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  How do I optimize my code to use these resources most efficiently?&lt;br /&gt;
&lt;br /&gt;
= What do I want to do and why do I need an HPC Cluster for it? =&lt;br /&gt;
&lt;br /&gt;
The bwHPC clusters are used to almost full capacity, and running a job on an HPC node consumes a lot of energy, as shown above. &lt;br /&gt;
Therefore, users are requested to run only necessary jobs.&lt;br /&gt;
&lt;br /&gt;
Please consider testing new setups and their output for validity prior to submitting jobs that require lots of resources. This also includes projects where a lot of (smaller) similar jobs are submitted. &lt;br /&gt;
&lt;br /&gt;
Make sure to double-check your jobs prior to the submission, as having to discard the output data of an HPC project due to faulty input files is wasting a lot of computational resources.&lt;br /&gt;
&lt;br /&gt;
Finally, identifying the specific resource requirements for a given job is important to allocate the optimal amount for your compute job, and to decide if an HPC cluster is needed at all.&lt;br /&gt;
&lt;br /&gt;
= How many and which kind of hardware resources do I require for it =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resource allocation is a crucial part when working on an HPC cluster. &lt;br /&gt;
As this is dependent on both the job as well as the specific cluster hardware and architecture available. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
A small number of jobs and few resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Submit to the scheduler. No extended testing and resource scaling analysis are needed. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Medium-sized projects&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Run only necessary jobs: Please consider testing new setups and their output for validity prior to submitting a huge amount of similar jobs&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Start small: Run your problem on a small set of resources first.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Use the proper tools for development: If you develop your own code, please use the proper tools for debugging and parallel performance analysis. See: [[Development#Documentation_in_the_Wiki|Development]].&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  A look at the job feedback can help you determine if you are using the cluster efficiently&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Large projects&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Same approach as for medium-sized projects. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Run a scaling analysis for your project with regard to how many resources work best. See: [[Scaling]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Many short jobs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Handling via the scheduler is inefficient. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Simple parallelization by hand is advisable. See: A basic introduction to [[Development/Parallel_Programming | Parallel Programming]].&lt;br /&gt;
&lt;br /&gt;
= How do I optimize my code to use these resources most efficiently? =&lt;br /&gt;
&lt;br /&gt;
The above recommendations will help use the cluster resources more efficiently.&lt;br /&gt;
Regarding software development, power efficiency correlates obviously heavily with &#039;&#039;&#039;computing performance&#039;&#039;&#039;, but also with memory usage, i.e. the amount of memory used, but also memory efficiency.&lt;br /&gt;
&lt;br /&gt;
Here, we have gathered a few results based on other research:&lt;br /&gt;
&amp;amp;rarr;  Use an efficient programming language such as Rust, C, and C++ -- well any compiled language. Do not use any interpreted language like Perl or Python. Since Machine Learning is a hot topic, this deserves a few words: Any ML-Python code using Tensorflow or other libraries will make heavy usage of NumPy and other math packages, which will use C-based implementations. Please make sure, you use the provided Python modules, which are optimized to use Intel MKL and other mathematical libraries.&lt;br /&gt;
&lt;br /&gt;
Further reading:&lt;br /&gt;
Rui Pereira, et al: &amp;quot;&#039;&#039;Energy efficiency across programming languages: how do energy, time, and memory relate?&#039;&#039;&amp;quot;, SLE 2017: Proc. of the 10th ACM SIGPLAN Int. Conf. on SW Language Eng., Oct. 2017, pp. 256–267, [https://doi.org/10.1145/3136014.3136031 doi:10.1145/3136014.3136031]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Analyse memory access patterns&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  For small tight loops checking for locks, use the &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; instruction.&lt;br /&gt;
&lt;br /&gt;
= Summary: General Recommendations =&lt;br /&gt;
&lt;br /&gt;
* Choose the most &#039;&#039;&#039;efficient algorithms&#039;&#039;&#039; for the given problem&lt;br /&gt;
* Run only &#039;&#039;&#039;necessary&#039;&#039;&#039; jobs: Please consider testing new setups and their output for validity prior to submitting a huge amount of similar jobs&lt;br /&gt;
* Start &#039;&#039;&#039;small&#039;&#039;&#039;: Run Your problem on a small number of parallel entities (be it processes or threads) first.&lt;br /&gt;
* &#039;&#039;&#039;Estimate&#039;&#039;&#039; the runtime of the parallel job as &#039;&#039;&#039;exactly&#039;&#039;&#039; as possible to increase the efficiency of the scheduling of the whole system&lt;br /&gt;
* Use the proper tools for development: If You develop your own code, please use the proper tools for debugging and parallel performance analysis. More information is available on the bwHPC Wiki.&lt;br /&gt;
* A look at the &#039;&#039;&#039;job feedback&#039;&#039;&#039; can help you determine if you are using the cluster efficiently&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Energy_Efficient_Cluster_Usage&amp;diff=15995</id>
		<title>Energy Efficient Cluster Usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Energy_Efficient_Cluster_Usage&amp;diff=15995"/>
		<updated>2026-04-22T10:30:03Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Energy consumption of data centers has been increasing continuously throughout the last decade. In 2020, the energy consumption of all data centers in Germany amounted to around  [https://www.bundestag.de/resource/blob/863850/423c11968fcb5c9995e9ef9090edf9e6/WD-8-070-21-pdf-data.pdf 3 percent] of the total electricity produced. Accompanying this large energy consumption are large-scale emissions of CO2 to the atmosphere and thus significant contributions to climate change.&lt;br /&gt;
To illustrate this, an average compute job running on a single node for one day may easily consume 10 kWh or even more. That translates roughly to brewing 700 cups of coffee.&lt;br /&gt;
Assuming that a typical bwHPC cluster has a few hundred compute nodes, this amounts to the energy consumption of a village for each cluster. &lt;br /&gt;
&lt;br /&gt;
Although a large amount of this energy consumption is an intrinsic requirement of running large HPC clusters (even when it&#039;s processors are idle, a cluster uses a lot of energy), efficient use of the available resources is important. Using as many resources as possible does not make a power user. Using them wisely does.&lt;br /&gt;
In the following, a basic introduction to some of the most important aspects of energy-efficient HPC usage from a user perspective is given. &lt;br /&gt;
&lt;br /&gt;
We can generally distinguish three tasks when optimizing for running HPC jobs efficiently.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  What do I want to do and why do I need an HPC Cluster for it?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  How many and which kind of hardware resources do I require for it?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  How do I optimize my code to use these resources most efficiently?&lt;br /&gt;
&lt;br /&gt;
= What do I want to do and why do I need an HPC Cluster for it? =&lt;br /&gt;
&lt;br /&gt;
The bwHPC clusters are used to almost full capacity, and running a job on an HPC node consumes a lot of energy, as shown above. &lt;br /&gt;
Therefore, users are requested to run only necessary jobs.&lt;br /&gt;
&lt;br /&gt;
Please consider testing new setups and their output for validity prior to submitting jobs that require lots of resources. This also includes projects where a lot of (smaller) similar jobs are submitted. &lt;br /&gt;
&lt;br /&gt;
Make sure to double-check your jobs prior to the submission, having to discard the output data of an HPC project due to faulty input files is wasting a lot of computational resources.&lt;br /&gt;
&lt;br /&gt;
Finally, identifying the specific resource requirements for a given job is important to allocate the optimal your compute job, and to decide if an HPC cluster is needed at all. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How many and which kind of hardware resources do I require for it =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resource allocation is a crucial part when working on an HPC cluster. &lt;br /&gt;
As this is dependent on both the job as well as the specific cluster hardware and architecture available. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
A small number of jobs and few resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Submit to the scheduler. No extended testing and resource scaling analysis are needed. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Medium-sized projects&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Run only necessary jobs: Please consider testing new setups and their output for validity prior to submitting a huge amount of similar jobs&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Start small: Run your problem on a small set of resources first.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Use the proper tools for development: If you develop your own code, please use the proper tools for debugging and parallel performance analysis. See: [[Development#Documentation_in_the_Wiki|Development]].&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  A look at the job feedback can help you determine if you are using the cluster efficiently&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Large projects&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Same approach as for medium-sized projects. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Run a scaling analysis for your project with regard to how many resources work best. See: [[Scaling]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Many short jobs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Handling via the scheduler is inefficient. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Simple parallelization by hand is advisable. See: A basic introduction to [[Development/Parallel_Programming | Parallel Programming]].&lt;br /&gt;
&lt;br /&gt;
= How do I optimize my code to use these resources most efficiently? =&lt;br /&gt;
&lt;br /&gt;
The above recommendations will help use the cluster resources more efficiently.&lt;br /&gt;
Regarding software development, power efficiency correlates obviously heavily with &#039;&#039;&#039;computing performance&#039;&#039;&#039;, but also with memory usage, i.e. the amount of memory used, but also memory efficiency.&lt;br /&gt;
&lt;br /&gt;
Here, we have gathered a few results based on other research:&lt;br /&gt;
&amp;amp;rarr;  Use an efficient programming language such as Rust, C, and C++ -- well any compiled language. Do not use any interpreted language like Perl or Python. Since Machine Learning is a hot topic, this deserves a few words: Any ML-Python code using Tensorflow or other libraries will make heavy usage of NumPy and other math packages, which will use C-based implementations. Please make sure, you use the provided Python modules, which are optimized to use Intel MKL and other mathematical libraries.&lt;br /&gt;
&lt;br /&gt;
Further reading:&lt;br /&gt;
Rui Pereira, et al: &amp;quot;&#039;&#039;Energy efficiency across programming languages: how do energy, time, and memory relate?&#039;&#039;&amp;quot;, SLE 2017: Proc. of the 10th ACM SIGPLAN Int. Conf. on SW Language Eng., Oct. 2017, pp. 256–267, [https://doi.org/10.1145/3136014.3136031 doi:10.1145/3136014.3136031]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  Analyse memory access patterns&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  For small tight loops checking for locks, use the &amp;lt;code&amp;gt;pause&amp;lt;/code&amp;gt; instruction.&lt;br /&gt;
&lt;br /&gt;
= Summary: General Recommendations =&lt;br /&gt;
&lt;br /&gt;
* Choose the most &#039;&#039;&#039;efficient algorithms&#039;&#039;&#039; for the given problem&lt;br /&gt;
* Run only &#039;&#039;&#039;necessary&#039;&#039;&#039; jobs: Please consider testing new setups and their output for validity prior to submitting a huge amount of similar jobs&lt;br /&gt;
* Start &#039;&#039;&#039;small&#039;&#039;&#039;: Run Your problem on a small number of parallel entities (be it processes or threads) first.&lt;br /&gt;
* &#039;&#039;&#039;Estimate&#039;&#039;&#039; the runtime of the parallel job as &#039;&#039;&#039;exactly&#039;&#039;&#039; as possible to increase the efficiency of the scheduling of the whole system&lt;br /&gt;
* Use the proper tools for development: If You develop your own code, please use the proper tools for debugging and parallel performance analysis. More information is available on the bwHPC Wiki.&lt;br /&gt;
* A look at the &#039;&#039;&#039;job feedback&#039;&#039;&#039; can help you determine if you are using the cluster efficiently&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Running_Calculations&amp;diff=15797</id>
		<title>Running Calculations</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Running_Calculations&amp;diff=15797"/>
		<updated>2026-03-11T11:46:16Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Life Cycle of a Calculation (Job) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;← This page is used in the [[HPC Glossary]] to explain the term &amp;quot;Batch Scheduler&amp;quot; and &amp;quot;Batch System&amp;quot;&lt;br /&gt;
== Life Cycle of a Calculation (Job) ==&lt;br /&gt;
[[File:running_calculations_on_cluster.svg|thumb|upright=0.4]]&lt;br /&gt;
On your desktop computer you start your calculations and they start immediately, running until they are finished. Then your desktop does mostly nothing, until you start another calculation. A compute cluster has several hundred, maybe a thousand computers (compute nodes), all of them are busy most of the time and many people want to run a great number of calculations. So running your job has to include some extra steps:&lt;br /&gt;
&lt;br /&gt;
# prepare a script (a set commands to run - usually as a shell script), with all the commands that are necessary to run your calculation from start to finish. In addition to the commands necessary to run the calculation, this &#039;&#039;[[batch script]]&#039;&#039; has a header section, in which you specify details like required compute cores (processing units witin a computer), estimated runtime, memory requirements, disk space needed, etc.&lt;br /&gt;
# &#039;&#039;Submit&#039;&#039; the script into a queue, where your &#039;&#039;job&#039;&#039; (calculation) &lt;br /&gt;
# gets asigned an inital priority, is queued and waits in row with other compute jobs until the resources you requested in the header become available. (Requested time is also a resource!) &lt;br /&gt;
# Execution: Once a suitable resource slot is available and your job is in the front of the queue of suitable jobs (suitable with regards to the resource slot), your script is executed on (a) compute node(s). Your calculation runs on that/those node(s) until it is finished or reaches the specified time limit. &lt;br /&gt;
# Save results: Include commands to save the calculation results back to a long term storage (e.g. your home directory), at least at the end of your script. What you have not saved until the job finishes won&#039;t be saved!&lt;br /&gt;
# If your job reaches the specified time limit, all your running processes will be killed and the resources get cleared. So any data that has not been saved will be lost!&lt;br /&gt;
&lt;br /&gt;
The software that distributes jobs on compute nodes is called a &#039;&#039;&#039;[[batch system]]&#039;&#039;&#039; or &#039;&#039;&#039;batch scheduler&#039;&#039;&#039;. The software currently used as a [[batch system]] on bwHPC clusters is &amp;quot;Slurm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Learn more about the functioning of job distribution in&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[batch system]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Example Jobs ==&lt;br /&gt;
&lt;br /&gt;
For most software that a bwHPC project installed on the cluster, we have prepared an example job script running some example calculation with that exact software.&lt;br /&gt;
&lt;br /&gt;
How to access these examples is described in the &amp;quot;Software job examples&amp;quot; section of the page&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[Environment Modules]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Link to Batch System per Cluster ==&lt;br /&gt;
&lt;br /&gt;
Because of differences in configuration (partly due to different available hardware), each cluster has their own batch system documentation:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[BwUniCluster3.0/Running_Jobs|Slurm bwUniCluster 3.0]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS2/Jobscripts: Running Your Calculations | Slurm JUSTUS 2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[Helix/Slurm   | Slurm Helix]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[NEMO2/Slurm | Slurm NEMO2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[BinAC2/Slurm | Slurm BinAC2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How to Use Computing Ressources Efficiently ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are running your calculations, you will have to decide on how many compute-cores your job will be simultaneously calculated. &lt;br /&gt;
For this, your computational problem will have to be divided into pieces, which always causes some overhead. &lt;br /&gt;
&lt;br /&gt;
How to find a reasonable number of how many compute cores to use for your calculation can be found under&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[Scaling]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Running calculations on an HPC node consumes a lot of energy. To make the most of the available resources and keep cluster and energy use as efficient as possible please also see our advice for &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[Energy Efficient Cluster Usage]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Running_Calculations&amp;diff=15796</id>
		<title>Running Calculations</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Running_Calculations&amp;diff=15796"/>
		<updated>2026-03-11T11:15:34Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: /* Life Cycle of a Calculation (Job) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;← This page is used in the [[HPC Glossary]] to explain the term &amp;quot;Batch Scheduler&amp;quot; and &amp;quot;Batch System&amp;quot;&lt;br /&gt;
== Life Cycle of a Calculation (Job) ==&lt;br /&gt;
[[File:running_calculations_on_cluster.svg|thumb|upright=0.4]]&lt;br /&gt;
On your desktop computer you start your calculations and they start immediately, running until they are finished. Then your desktop does mostly nothing, until you start another calculation. A compute cluster has several hundred, maybe a thousand computers (compute nodes), all of them are busy most of the time and many people want to run a great number of calculations. So running your job has to include some extra steps:&lt;br /&gt;
&lt;br /&gt;
# prepare a script (a set commands to run - usually as a shell script), with all the commands that are necessary to run your calculation from start to finish. In addition to the commands necessary to run the calculation, this &#039;&#039;[[batch script]]&#039;&#039; has a header section, in which you specify details like required compute cores (processing units witin a computer), estimated runtime, memory requirements, disk space needed, etc.&lt;br /&gt;
# &#039;&#039;Submit&#039;&#039; the script into a queue, where your &#039;&#039;job&#039;&#039; (calculation) &lt;br /&gt;
# is queued and waits in row with other compute jobs until the resources you requested in the header become available. &lt;br /&gt;
# Execution: Once a suitable resource slot is available and your job is in the front of the queue of suitable jobs (suitable with regards to the resource slot), your script is executed on (a) compute node(s). Your calculation runs on that/those node(s) until it is finished or reaches the specified time limit. &lt;br /&gt;
# Save results: Include commands to save the calculation results back to a long term storage (e.g. your home directory), at least at the end of your script. What you have not saved until the job finishes won&#039;t be saved!&lt;br /&gt;
# If your job reaches the specified time limit, all your running processes will be killed and the resources get cleared. So any data that has not been saved will be lost!&lt;br /&gt;
&lt;br /&gt;
The software that distributes jobs on compute nodes is called a &#039;&#039;&#039;[[batch system]]&#039;&#039;&#039; or &#039;&#039;&#039;batch scheduler&#039;&#039;&#039;. The software currently used as a [[batch system]] on bwHPC clusters is &amp;quot;Slurm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Learn more about the functioning of job distribution in&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[batch system]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Example Jobs ==&lt;br /&gt;
&lt;br /&gt;
For most software that a bwHPC project installed on the cluster, we have prepared an example job script running some example calculation with that exact software.&lt;br /&gt;
&lt;br /&gt;
How to access these examples is described in the &amp;quot;Software job examples&amp;quot; section of the page&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[Environment Modules]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Link to Batch System per Cluster ==&lt;br /&gt;
&lt;br /&gt;
Because of differences in configuration (partly due to different available hardware), each cluster has their own batch system documentation:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[BwUniCluster3.0/Running_Jobs|Slurm bwUniCluster 3.0]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS2/Jobscripts: Running Your Calculations | Slurm JUSTUS 2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[Helix/Slurm   | Slurm Helix]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[NEMO2/Slurm | Slurm NEMO2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[BinAC2/Slurm | Slurm BinAC2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How to Use Computing Ressources Efficiently ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are running your calculations, you will have to decide on how many compute-cores your job will be simultaneously calculated. &lt;br /&gt;
For this, your computational problem will have to be divided into pieces, which always causes some overhead. &lt;br /&gt;
&lt;br /&gt;
How to find a reasonable number of how many compute cores to use for your calculation can be found under&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[Scaling]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Running calculations on an HPC node consumes a lot of energy. To make the most of the available resources and keep cluster and energy use as efficient as possible please also see our advice for &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[Energy Efficient Cluster Usage]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Running_Calculations&amp;diff=15795</id>
		<title>Running Calculations</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Running_Calculations&amp;diff=15795"/>
		<updated>2026-03-10T16:34:04Z</updated>

		<summary type="html">&lt;p&gt;A Flachmueller: Execution step is expressed more broadly + minor corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;← This page is used in the [[HPC Glossary]] to explain the term &amp;quot;Batch Scheduler&amp;quot; and &amp;quot;Batch System&amp;quot;&lt;br /&gt;
== Life Cycle of a Calculation (Job) ==&lt;br /&gt;
[[File:running_calculations_on_cluster.svg|thumb|upright=0.4]]&lt;br /&gt;
On your desktop computer you start your calculations and they start immediately, running until they are finished. Then your desktop does mostly nothing, until you start another calculation. A compute cluster has several hundred, maybe a thousand computers (compute nodes), all of them are busy most of the time and many people want to run a great number of calculations. So running your job has to include some extra steps:&lt;br /&gt;
&lt;br /&gt;
# prepare a script (a set commands to run - usually as a shell script), with all the commands that are necessary to run your calculation from start to finish. In addition to the commands necessary to run the calculation, this &#039;&#039;[[batch script]]&#039;&#039; has a header section, in which you specify details like required compute cores (processing units witin a computer), estimated runtime, memory requirements, disk space needed, etc.&lt;br /&gt;
# &#039;&#039;Submit&#039;&#039; the script into a queue, where your &#039;&#039;job&#039;&#039; (calculation) &lt;br /&gt;
# is queued and waits in row with other compute jobs until the resources you requested in the header become available. &lt;br /&gt;
# Execution: Once a suitable resource slot is available and your job is in the front of the queue of suitable jobs (suitable with regards to the resource slot), your script is executed on (a) compute node(s). Your calculation runs on that/those node(s) until it is finished or reaches the specified time limit. &lt;br /&gt;
# Save results: Include commands to save the calculation results back to a long term storage (e.g. your home directory), at least at the end of your script.&lt;br /&gt;
&lt;br /&gt;
The software that distributes jobs on compute nodes is called a &#039;&#039;&#039;[[batch system]]&#039;&#039;&#039; or &#039;&#039;&#039;batch scheduler&#039;&#039;&#039;. The software currently used as a [[batch system]] on bwHPC clusters is &amp;quot;Slurm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Learn more about the functioning of job distribution in&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[batch system]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Example Jobs ==&lt;br /&gt;
&lt;br /&gt;
For most software that a bwHPC project installed on the cluster, we have prepared an example job script running some example calculation with that exact software.&lt;br /&gt;
&lt;br /&gt;
How to access these examples is described in the &amp;quot;Software job examples&amp;quot; section of the page&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[Environment Modules]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Link to Batch System per Cluster ==&lt;br /&gt;
&lt;br /&gt;
Because of differences in configuration (partly due to different available hardware), each cluster has their own batch system documentation:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[BwUniCluster3.0/Running_Jobs|Slurm bwUniCluster 3.0]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS2/Jobscripts: Running Your Calculations | Slurm JUSTUS 2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[Helix/Slurm   | Slurm Helix]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[NEMO2/Slurm | Slurm NEMO2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[BinAC2/Slurm | Slurm BinAC2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How to Use Computing Ressources Efficiently ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are running your calculations, you will have to decide on how many compute-cores your job will be simultaneously calculated. &lt;br /&gt;
For this, your computational problem will have to be divided into pieces, which always causes some overhead. &lt;br /&gt;
&lt;br /&gt;
How to find a reasonable number of how many compute cores to use for your calculation can be found under&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;  &#039;&#039;&#039;[[Scaling]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Running calculations on an HPC node consumes a lot of energy. To make the most of the available resources and keep cluster and energy use as efficient as possible please also see our advice for &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[Energy Efficient Cluster Usage]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>A Flachmueller</name></author>
	</entry>
</feed>