<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://oldwiki.scinet.utoronto.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rzon</id>
	<title>oldwiki.scinet.utoronto.ca - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://oldwiki.scinet.utoronto.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rzon"/>
	<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php/Special:Contributions/Rzon"/>
	<updated>2026-05-08T02:53:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.12</generator>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Using_Paraview&amp;diff=9421</id>
		<title>Using Paraview</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Using_Paraview&amp;diff=9421"/>
		<updated>2018-09-11T18:38:42Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.paraview.org/ ParaView] is a powerful, parallel, client-server based visualization system that allows you to use SciNet's GPC nodes to render data on SciNet, and manipulate the results interactively on your own desktop.   To use the paraview server on SciNet is much like using it locally, but there is an additional step in setting up a connection directly between your desktop and the compute nodes.&lt;br /&gt;
&lt;br /&gt;
[[Image:Paraview.png|thumb|right|320px|The ParaView Client GUI]]&lt;br /&gt;
&lt;br /&gt;
===Installing ParaView===&lt;br /&gt;
&lt;br /&gt;
To use Paraview, you will have to have the client software installed on your system; you will need ParaView from [http://www.paraview.org/paraview/resources/software.html the Paraview website].  Binaries exist for Linux, Mac, and Windows systems.   The client version must exactly match the version installed on the server, currently 3.12 or 3.14.1.   The client version has all the functionality of the server, and can analyze data locally.&lt;br /&gt;
&lt;br /&gt;
===SSH Forwarding For ParaView===&lt;br /&gt;
&lt;br /&gt;
To interactively use the ParaView server on GPC, you will have to work some ssh magic to allow the client on your desktop to connect to the server through the scinet login nodes.  The steps required are&lt;br /&gt;
&lt;br /&gt;
* Have an SSH key that you can use to log into SciNet&lt;br /&gt;
* Submit an interactive job, with a shell on the head node that you'll be running the server on&lt;br /&gt;
* Start ssh forwarding&lt;br /&gt;
* Start paraview server&lt;br /&gt;
* Connecting client and server&lt;br /&gt;
&lt;br /&gt;
====SSH Keys====&lt;br /&gt;
&lt;br /&gt;
To be able to log into the compute nodes where ParaView will be running, you'll have to have an [[Ssh_keys | SSH key]] set up, as password authentication won't work.    Our [[Ssh_keys | SSH Keys and SciNet]] page describes how to do this.&lt;br /&gt;
&lt;br /&gt;
====Log into node====&lt;br /&gt;
&lt;br /&gt;
The first thing to do is to go to the node from which you'll start the ParaView server.   This is typically done by starting an interactive job on the GPC, perhaps on the [[Moab#debug | debug ]] queue or sandybridge [[GPC_Quickstart#Memory_Configuration | large memory]] nodes.   Paraview can in principle make use of as many nodes as you throw at it.  So one might  begin jobs as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub -l nodes=1:m128g:ppn=16,walltime=1:00:00 -q sandy -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub -l nodes=2:ppn=8,walltime=1:00:00 -q debug -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once this job has started, you'll be placed in a shell on the head node of the job; typing `&amp;lt;pre&amp;gt;hostname&amp;lt;/pre&amp;gt;' will tell you the name of the host, eg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hostname&lt;br /&gt;
gpc-f148n089-ib0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hostname&lt;br /&gt;
gpc-f107n045-ib0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
you will need this hostname in the following steps.&lt;br /&gt;
&lt;br /&gt;
====Start SSH port forwarding====&lt;br /&gt;
&lt;br /&gt;
Once the ssh configuration is set, the port forwarding can be started with the command (on your local machine in a terminal window), using the local host name from above - here we'll take the example of gpc-f148n089-ib0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ export gpcnode=&amp;quot;gpc-f148n089-ib0&amp;quot;&lt;br /&gt;
$ ssh -N -L 20080:${gpcnode}:22 -L 20090:${gpcnode}:11111 login.scinet.utoronto.ca&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this command will not return anything until the forwarding is terminated, and will just look like it's sitting there.  It doesn't start a remote shell or command (-N), but it will connect to login.scinet.utoronto.ca, and from there it will redirect your local (-L) port 20080 to &amp;lt;tt&amp;gt;${gpcnode}&amp;lt;/tt&amp;gt; port 22, and similarly local port 20090 to &amp;lt;tt&amp;gt;${gpcnode}&amp;lt;/tt&amp;gt; port 11111.  We'll use the first for ssh'ing to the remote node (mainly for testing), and the second to conect the local paraview client to the remote paraview server.&lt;br /&gt;
&lt;br /&gt;
To make sure the port forwarding is working correctly, in another window try sshing directly to the compute node from your desktop:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh -p 20080 [your-scinet-username]@localhost&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and this should land you directly on the compute node.   If it does not, then something is wrong with the ssh forwarding.&lt;br /&gt;
&lt;br /&gt;
====Start Server====&lt;br /&gt;
&lt;br /&gt;
Now that the tunnel is set up, on the compute node you can start the paraview server.    To do this, you will have to have the following modules loaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load Xlibraries intel gcc python openmpi paraview&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(You can replace intelmpi with openmpi, and of course any module that is already loaded does have to be loaded again.)&lt;br /&gt;
&lt;br /&gt;
Then start the paraview server with the intel mpirun as with any MPI job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpirun -np [NP] pvserver --use-offscreen-rendering&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where NP is the number of processors; 16 processors per node on the largemem nodes, or 8 per node otherwise.    &lt;br /&gt;
&lt;br /&gt;
Once running, the ParaView server should output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen on port: 11111&lt;br /&gt;
Waiting for client...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Connect Client and Server====&lt;br /&gt;
&lt;br /&gt;
[[Image:Configure.png|thumb|right|320px|Configuring the client]]&lt;br /&gt;
&lt;br /&gt;
Once the server is running, you can connect the client.   Start the ParaView client on your desktop, and choose File-&amp;gt;Connect.   Click `Add Server', give the server a name (say, GPC), and give the port number 20090.   The other values should be correct by default; host is &amp;lt;tt&amp;gt;localhost&amp;lt;/tt&amp;gt;, and the server type is Client/Server.  Click `Configure'.&lt;br /&gt;
&lt;br /&gt;
On the next window, you'll be asked for a command to start up the server; select `Manual', and ok.&lt;br /&gt;
&lt;br /&gt;
Once the server is selected, click `Connect'.  On the compute node, the server should respond `Client connected'.   In the client window, when you (for instance) select File-&amp;gt;Open, you will be seeing the files on the GPC, rather than the local host.&lt;br /&gt;
&lt;br /&gt;
From here, the [http://paraview.org/Wiki/ParaView ParaView Wiki] can give you instructions as to how to plot your data.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Ssh_keys&amp;diff=9420</id>
		<title>Ssh keys</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Ssh_keys&amp;diff=9420"/>
		<updated>2018-08-31T23:42:14Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Ssh | SSH]] has an alternative to passwords to authenticate your login; you can generate a key file on a trusted machine and tell a remote machine to trust logins from a machine that presents that key.   This can be both convenient and secure, and may be necessary for some tasks (such as connecting directly to compute nodes to use [[Using_Paraview | some visualization packages]]).  Here we describe how to setup keys for logging into SciNet.&lt;br /&gt;
&lt;br /&gt;
==SSH Keys and SciNet==&lt;br /&gt;
&lt;br /&gt;
[[Ssh | SSH]] is a secure protocol for logging into or copying data to/from remote machines.  In addition to using passwords to [http://en.wikipedia.org/wiki/Authentication authenticate] users, one can use cryptographically secure keys to guarantee that a login request is coming from a trusted account on a remote machine, and automatically allow such requests.   Done properly, this is as secure as requiring a password, but can be more convenient, and is necessary for some operations.&lt;br /&gt;
&lt;br /&gt;
On this page, we will assume you are using Linux, Mac OS X, or a similar environment such as [http://www.cygwin.com/ Cygwin] under Windows.  If not, the steps will be the same, but how they are done (for instance, generating keys) may differ; look up the documentation for your ssh package for details.&lt;br /&gt;
&lt;br /&gt;
==Using SSH keys==&lt;br /&gt;
===How SSH keys work===&lt;br /&gt;
&lt;br /&gt;
SSH relies on [http://en.wikipedia.org/wiki/Public-key_cryptography public key cryptography] for its encryption.  These cryptosystems have a private key, which must be kept secret, and a public key, which may be disseminated freely.   In these systems, anyone may use the public key to encode a message; but only the owner of the private key can decode the message.  This can also be used to verify identities; if someone is claiming to be Alice, the owner of some private key, Bob can send Alice a message encoded with Alice's well-known public key.  If the person claiming to be Alice can then tell Bob what the message really was, then that person at the very least has access to Alice's private key.&lt;br /&gt;
&lt;br /&gt;
To use keys for authentication, we:&lt;br /&gt;
* Generate a key pair (Private and Public)&lt;br /&gt;
* Copy the public keys to remote sites we wish to be able to login to, and mark it as an authorized key for that system&lt;br /&gt;
* Ensure permissions are set properly&lt;br /&gt;
* Test.&lt;br /&gt;
&lt;br /&gt;
===Generating an SSH key pair===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Note: This describes creating ssh key pairs on '''your''' machine, not on SciNet.  On SciNet, you already have key pairs generated, sitting in &amp;lt;tt&amp;gt;${HOME}/.ssh/&amp;lt;/tt&amp;gt;, and modifying them is likely to cause problems.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first stage is to create an SSH key pair.   On most systems, this is done using the command&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
&lt;br /&gt;
This will prompt you for two pieces of information: where to save the key, and a passphrase for the key.  The passphrase is like a password, but rather than letting you in to some particular account, it allows you to use the key you've generated to log into other systems.  &lt;br /&gt;
&lt;br /&gt;
There are a series of possible options to &amp;lt;tt&amp;gt;ssh-keygen&amp;lt;/tt&amp;gt; which allow increasingly cryptographically secure keys (by increasing the number of bits used in the key), or by choosing different encryption systems.  The defaults are fine, and we won't discuss other options here.&lt;br /&gt;
&lt;br /&gt;
The default location to save the private key is in &amp;lt;tt&amp;gt;${HOME}/.ssh/id_rsa&amp;lt;/tt&amp;gt; (for an RSA key); unless you have some specific reason for placing it elsewhere, use this option.  The public key will be &amp;lt;tt&amp;gt;id_rsa.pub&amp;lt;/tt&amp;gt; in the same directory.&lt;br /&gt;
&lt;br /&gt;
Your passphrase can be any string, and of any length.   It is best not to make it the same as any of your passwords.&lt;br /&gt;
&lt;br /&gt;
A sample session of generating a key would go like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh-keygen&lt;br /&gt;
 Generating public/private rsa key pair.&lt;br /&gt;
 Enter file in which to save the key (${HOME}/.ssh/id_rsa): &lt;br /&gt;
 Enter passphrase (empty for no passphrase): &lt;br /&gt;
 Enter same passphrase again: &lt;br /&gt;
 Your identification has been saved in ${HOME}/.ssh/id_rsa.&lt;br /&gt;
 Your public key has been saved in ${HOME}/.ssh/id_rsa.pub.&lt;br /&gt;
 The key fingerprint is:&lt;br /&gt;
 79:8e:36:6a:78:7d:cf:80:94:90:92:0e:74:0b:f1:b7 USERNAME@YOURMACHINE&lt;br /&gt;
&lt;br /&gt;
====Don't Use Passphraseless Keys!====&lt;br /&gt;
&lt;br /&gt;
If you do not specify a passphrase, you will have a completely &amp;quot;exposed&amp;quot; private key.  '''This is a terrible idea.'''   If you then use this key for anything it means that anyone who sits down at your desk, or anyone who borrows or steals your laptop, can login to anywhere you use that key (good guesses could come from just looking at your history) without needing any password, and could do anything they wanted with your account or data.  Don't use passphraseless keys.&lt;br /&gt;
&lt;br /&gt;
We should note that we do, in fact, have one necessary and reasonable exception here -- the keys used within SciNet itself.  The SciNet key used for within-scinet operations (you already have one in your account in &amp;lt;tt&amp;gt;~/.ssh/id_rsa&amp;lt;/tt&amp;gt;) is passphraseless, for two good reasons.  One is that, once you are on one SciNet machine (like the login node), you already have read/write access to all your data; all the nodes mount the same file systems.  So there is little to be gained in protecting the SciNet nodes from each other.   The second is practical; ssh is used to login to compute nodes to start your compute jobs.  You obviously can't be asked to type in a passphrase every time one of your jobs starts; you may not be at your computer at that moment.  So passphraseless keys are ok ''within'' a controlled environment; but don't use them for remote access.&lt;br /&gt;
&lt;br /&gt;
===Copying the Public Key to SciNet (and elsewhere)===&lt;br /&gt;
&lt;br /&gt;
Now that you have this SSH &amp;quot;identity&amp;quot;, you use the public (''not'' the private) key for access to remote machines.  The public key must be put as one line in the file &amp;lt;tt&amp;gt;/home/USERNAME/.ssh/authorized_keys&amp;lt;/tt&amp;gt;.  Do not delete the lines already there, or you may end up with strange problems using SciNet machines.&lt;br /&gt;
&lt;br /&gt;
You can copy your new public key to the SciNet systems&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp /home/LOCAL_USERNAME/.ssh/id_rsa.pub SCINET_USERNAME@login.scinet.utoronto.ca:newkey&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then login to SciNet and copy&amp;amp;paste the contents from &amp;lt;tt&amp;gt;~/newkey&amp;lt;/tt&amp;gt; into &amp;lt;tt&amp;gt;~/.ssh/authorized_keys&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/newkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;tt&amp;gt;.ssh&amp;lt;/tt&amp;gt; Permissions===&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;tt&amp;gt;SSH&amp;lt;/tt&amp;gt; is very fussy about file permissions; your &amp;lt;tt&amp;gt;~/.ssh&amp;lt;/tt&amp;gt; directory must only be accessible by you, and your various key files must not be writable (or in some cases, readable) by anyone else.  Sometimes users accidentally reset file permissions while editing these files, and problems happen.   If you look at the &amp;lt;tt&amp;gt;~/.ssh&amp;lt;/tt&amp;gt; directory itself, it should not be readable at all by anyone else:&lt;br /&gt;
&lt;br /&gt;
 ls -ld ~/.ssh&lt;br /&gt;
 drwx------ 2 USERNAME GROUPNAME 7 Aug  9 15:43 /home/USERNAME/.ssh&lt;br /&gt;
&lt;br /&gt;
and &amp;lt;tt&amp;gt;authorized_keys&amp;lt;/tt&amp;gt; must not be writable:&lt;br /&gt;
&lt;br /&gt;
 $ ls -l ~/.ssh/authorized_keys &lt;br /&gt;
 -rw-r--r-- 1 USERNAME GROUPNAME 1213 May 29  2009 /home/USERNAME/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
===Testing Your Key===&lt;br /&gt;
&lt;br /&gt;
Now you should be able to login to the remote system (say, SciNet):&lt;br /&gt;
&lt;br /&gt;
 $ ssh USERNAME@login.scinet.utoronto.ca&lt;br /&gt;
 Enter passphrase for key '/home/USERNAME/.ssh/id_rsa': &lt;br /&gt;
 Last login: Tue Aug 17 11:24:48 2010 from HOMEMACHINE&lt;br /&gt;
 &lt;br /&gt;
 ===================================================&lt;br /&gt;
 &lt;br /&gt;
 This SciNet login node is to be used only as a&lt;br /&gt;
 gateway to the GPC and TCS.&lt;br /&gt;
 &lt;br /&gt;
 [...]&lt;br /&gt;
 scinet04-$&lt;br /&gt;
&lt;br /&gt;
If this doesn't work, you should be able to login using your password, and investigate the problem. For example, if during a login session you get an message similar to the one below, just follow the instruction and delete the offending key on line 3 (you can use vi to jump to that line with ESC plus : plus 3). That only means that you may have logged in from your home computer to SciNet in the past, and that key is obsolete.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh USERNAME@login.scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @&lt;br /&gt;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!&lt;br /&gt;
Someone could be eavesdropping on you right now (man-in-the-middle&lt;br /&gt;
attack)!&lt;br /&gt;
It is also possible that the RSA host key has just been changed.&lt;br /&gt;
The fingerprint for the RSA key sent by the remote host is&lt;br /&gt;
53:f9:60:71:a8:0b:5d:74:83:52:**fe:ea:1a:9e:cc:d3.&lt;br /&gt;
Please contact your system administrator.&lt;br /&gt;
Add correct host key in /home/&amp;lt;user&amp;gt;/.ssh/known_hosts to get rid of&lt;br /&gt;
this message.&lt;br /&gt;
Offending key in /home/&amp;lt;user&amp;gt;/.ssh/known_hosts:3&lt;br /&gt;
RSA host key for login.scinet.utoronto.ca &lt;br /&gt;
&amp;lt;http://login.scinet.utoronto.ca &amp;lt;http://login.scinet.utoronto.ca&amp;gt;&amp;gt; has&lt;br /&gt;
changed and you have requested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If you get the message below you may need to logout of your gnome session and log back in since the ssh-agent needs to be&lt;br /&gt;
restarted with the new passphrase ssh key.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh USERNAME@login.scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agent admitted failure to sign using the key.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(Optional) Using &amp;lt;tt&amp;gt;ssh-agent&amp;lt;/tt&amp;gt; to Remember Your Passphrase===&lt;br /&gt;
&lt;br /&gt;
But now you've just replaced having to type a password for login with having to type a passphrase for your key; what have you gained?  &lt;br /&gt;
&lt;br /&gt;
It turns out that there's an automated way to manage ssh &amp;quot;identities&amp;quot;, using the &amp;lt;tt&amp;gt;ssh-agent&amp;lt;/tt&amp;gt; command, which should automatically be running on newer Linux or Mac&amp;amp;nbsp;OS&amp;amp;nbsp;X machines.   You can add keys to this agent for the duration of your login using the &amp;lt;tt&amp;gt;ssh-add&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 $ ssh-add&lt;br /&gt;
 Enter passphrase for /home/USERNAME/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/USERNAME/.ssh/id_rsa (/home/USERNAME/.ssh/id_rsa)&lt;br /&gt;
&lt;br /&gt;
and then logins will not require the passphrase, as &amp;lt;tt&amp;gt;ssh-agent&amp;lt;/tt&amp;gt; will provide access to the key.&lt;br /&gt;
&lt;br /&gt;
When you log out of your home computer, the ssh agent will close, and next time you log in, you will have to &amp;lt;tt&amp;gt;ssh-add&amp;lt;/tt&amp;gt; your key.  You can also set a timeout of (say) an hour by using &amp;lt;tt&amp;gt;ssh-add -t 3600&amp;lt;/tt&amp;gt;.  This minimizes the number of times you have to type your passphrase, while still maintaining some degree of key security.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiple ssh private keys ===&lt;br /&gt;
In quite a few situations its preferred to have ssh keys dedicated to each service, specific role or domain.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -f ~/.ssh/id_rsa.SciNet   -C &amp;quot;Key for SciNet&amp;quot;&lt;br /&gt;
ssh-keygen -t rsa -f ~/.ssh/id_rsa.SHARCNET -C &amp;quot;Key for SHARCNET&amp;quot;&lt;br /&gt;
ssh-keygen -t rsa -f ~/.ssh/id_rsa.DCS      -C &amp;quot;Key for Dept. Of Computer Science&amp;quot;&lt;br /&gt;
ssh-keygen -t rsa -f ~/.ssh/id_rsa.CITA     -C &amp;quot;Key for CITA&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use different file names for each key. Lets assume that there are 2 keys, ~/.ssh/id_rsa.SciNet and ~/.ssh/id_rsa.SHARCNET. The simple way of making sure each of the keys works all the time is to now create config file for ssh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch ~/.ssh/config&lt;br /&gt;
chmod 600 ~/.ssh/config&lt;br /&gt;
echo &amp;quot;IdentityFile ~/.ssh/id_rsa.SciNet&amp;quot;   &amp;gt;&amp;gt; ~/.ssh/config&lt;br /&gt;
echo &amp;quot;IdentityFile ~/.ssh/id_rsa.SHARCNET&amp;quot; &amp;gt;&amp;gt; ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would make sure that both keys are always used whenever ssh makes a connection. However, ssh config lets you get down to a much finer level of control on keys and other per-connection setups. The recommendation is to use a key selection based on the Hostname. For example, a ~/.ssh/config that looks like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host SciNet&lt;br /&gt;
  Hostname login.scinet.utoronto.ca&lt;br /&gt;
  IdentityFile ~/.ssh/id_dsa.SciNet&lt;br /&gt;
  User pinto&lt;br /&gt;
&lt;br /&gt;
Host SHARCNET&lt;br /&gt;
  Hostname sharcnet.ca&lt;br /&gt;
  IdentityFile ~/.ssh/id_rsa.SHARCNET&lt;br /&gt;
  User jchong&lt;br /&gt;
  Port 44787&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And just login with the shortcut:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh SciNet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SSH tunnel =&lt;br /&gt;
A more obscure use of ssh is to generate a communication tunnel. As an example, assume you want to access a website running on a remotehost using your localhost, but there is a firewall between the 2 systems blocking every port, except incoming ssh.&lt;br /&gt;
&lt;br /&gt;
The basic syntax of the ssh command for such a purpose is: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -f -N -L localport:localhost:remoteport user@remotehost&lt;br /&gt;
# -f puts ssh in background&lt;br /&gt;
# -N makes it not execute a remote command&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the remote website broadcasts on the default port 80, you could do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -L 8080:localhost:remotehost:80 tunneluser@remotehost&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and point your local browser to http://localhost:8080&lt;br /&gt;
&lt;br /&gt;
If you don't want to remember the above sequence of flags all the time, you can add an entry to your ~/.ssh/config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host tunnel&lt;br /&gt;
    HostName remotehost&lt;br /&gt;
    IdentityFile ~/.ssh/id_rsa.tunnel&lt;br /&gt;
    LocalForward 8080 127.0.0.1:80&lt;br /&gt;
    User tunneluser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open the tunnel just issue the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh -f -N tunnel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Gamess&amp;diff=9419</id>
		<title>Gamess</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Gamess&amp;diff=9419"/>
		<updated>2018-08-31T23:41:43Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===GAMESS(US)===&lt;br /&gt;
&lt;br /&gt;
====GAMESS version August 18, 2011, R1, on CentOS6====&lt;br /&gt;
&lt;br /&gt;
The current version of GAMESS(US), August 18, 2011 R1, was built on CentOS6, using the Intel v12.1 compilers and IntelMPI v4.0.2.003 MPI library.  The build was done according to the documentation that came with the package, available on the SciNet systems in the /scinet/gpc/src/gamess-Aug1811R1 directory.  After running &amp;quot;./config&amp;quot;, with the intel and intelmpi modules loaded, the following configuration file (install.info) was obtained:&lt;br /&gt;
&lt;br /&gt;
   [dgruner@gpc-f103n058 gamess-Aug1811R1]$ cat install.info&lt;br /&gt;
   #!/bin/csh&lt;br /&gt;
   #   compilation configuration for GAMESS&lt;br /&gt;
   #   generated on gpc-f103n058&lt;br /&gt;
   #   generated at Wed Nov 30 11:18:29 EST 2011&lt;br /&gt;
   setenv GMS_PATH            /home/scinet/gpc/src/gamess-Aug1811R1&lt;br /&gt;
   #         machine type&lt;br /&gt;
   setenv GMS_TARGET          linux64&lt;br /&gt;
   #         FORTRAN compiler setup&lt;br /&gt;
   setenv GMS_FORTRAN         ifort&lt;br /&gt;
   setenv GMS_IFORT_VERNO     12&lt;br /&gt;
   #         mathematical library setup&lt;br /&gt;
   setenv GMS_MATHLIB         mkl&lt;br /&gt;
   setenv GMS_MATHLIB_PATH    /scinet/gpc/intel/ics/composer_xe_2011_sp1.6.233/mkl/lib/intel64&lt;br /&gt;
   setenv GMS_MKL_VERNO       &amp;quot;12-so&amp;quot;&lt;br /&gt;
   #         parallel message passing model setup&lt;br /&gt;
   setenv GMS_DDI_COMM        mpi&lt;br /&gt;
   setenv GMS_MPI_LIB         impi&lt;br /&gt;
   setenv GMS_MPI_PATH        /scinet/gpc/intel/impi/4.0.2.003&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The code was built with the &amp;quot;compall&amp;quot; script, and then linked using the &amp;quot;lked&amp;quot; script.  A new module, gamess/Aug1811R1, was created for CentOS6:&lt;br /&gt;
&lt;br /&gt;
   [dgruner@gpc-f103n058 gamess-Aug1811R1]$ module show gamess&lt;br /&gt;
   -------------------------------------------------------------------&lt;br /&gt;
   /scinet/gpc/Modules6/Modules/modulefiles/gamess/Aug1811R1:&lt;br /&gt;
   &lt;br /&gt;
   module-whatis	 adds GAMESS (US), Aug 18/11 R1, environment variables &lt;br /&gt;
   prereq    intel &lt;br /&gt;
   prereq    intelmpi &lt;br /&gt;
   setenv    SCINET_GAMESS_HOME /scinet/gpc/Applications/gamess-Aug1811R1 &lt;br /&gt;
   setenv    SCINET_RUNGMS /scinet/gpc/Applications/gamess-Aug1811R1/rungms &lt;br /&gt;
   setenv    SCINET_GAMESS_SCRATCH /scratch/s/scinet/dgruner/gamess-scratch &lt;br /&gt;
   -------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
(note that the $SCINET_GAMESS_SCRATCH directory is defined for each user).&lt;br /&gt;
&lt;br /&gt;
The $SCINET_RUNGMS run script will work with both ethernet and infiniband connected nodes, so unlike the older version there is no need for specialized scripts depending on the node interconnect.  Here are some sample scripts showing how to run gamess on the GPC:&lt;br /&gt;
&lt;br /&gt;
====Running GAMESS====&lt;br /&gt;
- Make sure the directory $SCRATCH/gamess-scratch exists (the $SCINET_RUNGMS script will create it if it does not exist)&lt;br /&gt;
&lt;br /&gt;
- Make sure the modules: intel, intelmpi, gamess are loaded (in your .bashrc: &amp;quot;module load intel intelmpi gamess&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
- Create a torque script to run GAMESS, as in the examples that follow&lt;br /&gt;
&lt;br /&gt;
- The GAMESS executable is in $SCINET_GAMESS_HOME/gamess.00.x&lt;br /&gt;
- The rungms script is in $SCINET_GAMESS_HOME/rungms (also defined as $SCINET_RUNGMS)&lt;br /&gt;
&lt;br /&gt;
- The rungms script takes 4 arguments:  input file, executable number, number of compute processes, elongations.  It always assumes there are 8 processors per node (ppn).  Note that you can copy the $SCINET_RUNGMS script to your own directory, and - carefully - modify it to suit your needs (at your own risk!).&lt;br /&gt;
&lt;br /&gt;
For example, in order to run with the input file /scratch/$USER/gamesstest01, on 8 cpus, and the default version (00)&lt;br /&gt;
of the executable on a machine with 8 cores:&lt;br /&gt;
&lt;br /&gt;
   # load the gamess and other required modules in .bashrc&lt;br /&gt;
   module load intel intelmpi gamess  &lt;br /&gt;
&lt;br /&gt;
   # run the program&lt;br /&gt;
   $SCINET_RUNGMS $SCRATCH/gamesstest01 00 8&lt;br /&gt;
&lt;br /&gt;
Here is a sample torque script for running a GAMESS calculation, on a single 8-core node.  Note the comments regarding the use of the [[User_Ramdisk | ramdisk]], a technique that may speed up calculations significantly.  It is restricted to runs on a single node, and there is book-keeping required before the job ends, namely copying any useful output from the [[User_Ramdisk | ramdisk]] (/dev/shm) to the user's directory on the /scratch filesystem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=48:00:00,os=centos6computeA&lt;br /&gt;
#PBS -N gamessjob&lt;br /&gt;
&lt;br /&gt;
# If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
# I typed qsub.&lt;br /&gt;
if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# the input file is typically named something like &amp;quot;gamesjob.inp&amp;quot;&lt;br /&gt;
# so the script will be run like &amp;quot;$SCINET_RUNGMS gamessjob 00 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# load the gamess module if not in .bashrc already&lt;br /&gt;
# module load intel intelmpi gamess&lt;br /&gt;
&lt;br /&gt;
# If - and only if - the run is on a single node, and does not require too much memory,&lt;br /&gt;
# then the runtime scratch directory can be put on ramdisk on the &lt;br /&gt;
# compute node.  This helps speed up the code, and avoids contention for&lt;br /&gt;
# disk resources. Note that the maximum size of the ramdisk is 8 GB,&lt;br /&gt;
# and the maximum total memory available to jobs is about 14 GB per node&lt;br /&gt;
# (including program memory and ramdisk).&lt;br /&gt;
#&lt;br /&gt;
# In order to use the ramdisk uncomment the following definition:&lt;br /&gt;
#export SCINET_GAMESS_SCRATCH=/dev/shm&lt;br /&gt;
&lt;br /&gt;
# run the program&lt;br /&gt;
&lt;br /&gt;
$SCINET_RUNGMS gamessjob 00 8&lt;br /&gt;
&lt;br /&gt;
# copy any files of interest from the $SCINET_GAMESS_SCRATCH directory&lt;br /&gt;
# to a &amp;quot;real&amp;quot; directory on disk, e.g. /scratch/$USER/gamessjob&lt;br /&gt;
# cp $SCINET_GAMESS_SCRATCH/* /scratch/$USER/gamessjob&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a similar script, but using 2 nodes with infiniband interconnect:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=2:ib:ppn=8,walltime=48:00:00,os=centos6computeA&lt;br /&gt;
#PBS -N gamessjob&lt;br /&gt;
&lt;br /&gt;
## To submit type: qsub gmsib.sh&lt;br /&gt;
&lt;br /&gt;
# If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
# I typed qsub.&lt;br /&gt;
if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# the input file is typically named something like &amp;quot;gamesjob.inp&amp;quot;&lt;br /&gt;
# so the script will be run like &amp;quot;$SCINET_RUNGMS gamessjob 00 8 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# load the gamess module if not in .bashrc alreadyc&lt;br /&gt;
module load intel intelmpi gamess&lt;br /&gt;
&lt;br /&gt;
# This script requests InfiniBand-connected nodes (:ib above).  The IntelMPI should run with the best transport it can find (InfiniBand), and will default back to ethernet if running on ethernet-only nodes.&lt;br /&gt;
&lt;br /&gt;
$SCINET_RUNGMS gamessjob 00 16&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Notes on older version, May 22, 2009, built on CentOS5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GAMESS version January 12, 2009 R3 was built using the Intel v11.1 compilers and v3.2.2 MPI library, according to the instructions in http://software.intel.com/en-us/articles/building-gamess-with-intel-compilers-intel-mkl-and-intel-mpi-on-linux/&lt;br /&gt;
&lt;br /&gt;
The required build scripts - comp, compall, lked - and run script - rungms - were modified to account for our own installation.  In order to build GAMESS one first must ensure that the intel and intelmpi modules are loaded (&amp;quot;module load intel intelmpi&amp;quot;).  This applies to running GAMESS as well.&lt;br /&gt;
The module &amp;quot;gamess&amp;quot; must also be loaded in order to run GAMESS (&amp;quot;module load gamess&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The modified scripts are in the file /scinet/gpc/src/gamess-on-scinet.tar.gz&lt;br /&gt;
&lt;br /&gt;
====Running GAMESS====&lt;br /&gt;
- Make sure the directory /scratch/$USER/gamess-scratch exists (the $SCINET_RUNGMS script will create it if it does not exist)&lt;br /&gt;
&lt;br /&gt;
- Make sure the modules: intel, intelmpi, gamess are loaded (in your .bashrc: &amp;quot;module load intel intelmpi gamess&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
- Create a torque script to run GAMESS.  Here is an example:&lt;br /&gt;
&lt;br /&gt;
- The GAMESS executable is in $SCINET_GAMESS_HOME/gamess.00.x&lt;br /&gt;
- The rungms script is in $SCINET_GAMESS_HOME/rungms (actually it is $SCINET_RUNGMS)&lt;br /&gt;
&lt;br /&gt;
- For multinode runs, use the $SCINET_RUNGMS_IB script to run on the InfiniBand portion of the GPC&lt;br /&gt;
&lt;br /&gt;
- The rungms script takes 4 arguments:  input file, executable number, number of compute processes, processors per node&lt;br /&gt;
&lt;br /&gt;
For example, in order to run with the input file /scratch/$USER/gamesstest01, on 8 cpus, and the default version (00)&lt;br /&gt;
of the executable on a machine with 8 cores:&lt;br /&gt;
&lt;br /&gt;
   # load the gamess and other required modules in .bashrc&lt;br /&gt;
   module load gcc intel intelmpi gamess  &lt;br /&gt;
&lt;br /&gt;
   # run the program&lt;br /&gt;
   $SCINET_RUNGMS /scratch/$USER/gamesstest01 00 8 8&lt;br /&gt;
&lt;br /&gt;
Here is a sample torque script for running a GAMESS calculation, on a single 8-core node.  Note the comments regarding the use of the [[User_Ramdisk | ramdisk]], a technique that may speed up calculations significantly.  It is restricted to runs on a single node, and there is book-keeping required before the job ends, namely copying any useful output from the [[User_Ramdisk | ramdisk]] (/dev/shm) to the user's directory on the /scratch filesystem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=48:00:00,os=centos53computeA&lt;br /&gt;
#PBS -N gamessjob&lt;br /&gt;
&lt;br /&gt;
## To submit type: qsub gms.sh&lt;br /&gt;
&lt;br /&gt;
# If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
# I typed qsub.&lt;br /&gt;
if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# the input file is typically named something like &amp;quot;gamesjob.inp&amp;quot;&lt;br /&gt;
# so the script will be run like &amp;quot;$SCINET_RUNGMS gamessjob 00 8 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# load the gamess module if not in .bashrc already&lt;br /&gt;
# module load gcc intel intelmpi gamess&lt;br /&gt;
&lt;br /&gt;
# If - and only if - the run is on a single node, and does not require too much memory,&lt;br /&gt;
# then the runtime scratch directory can be put on ramdisk on the &lt;br /&gt;
# compute node.  This helps speed up the code, and avoids contention for&lt;br /&gt;
# disk resources. Note that the maximum size of the ramdisk is 8 GB,&lt;br /&gt;
# and the maximum total memory available to jobs is about 14 GB per node&lt;br /&gt;
# (including program memory and ramdisk).&lt;br /&gt;
#&lt;br /&gt;
# In order to use the ramdisk uncomment the following definition:&lt;br /&gt;
#export SCINET_GAMESS_SCRATCH=/dev/shm&lt;br /&gt;
&lt;br /&gt;
# run the program&lt;br /&gt;
&lt;br /&gt;
$SCINET_RUNGMS gamessjob 00 8 8&lt;br /&gt;
&lt;br /&gt;
# copy any files of interest from the $SCINET_GAMESS_SCRATCH directory&lt;br /&gt;
# to a &amp;quot;real&amp;quot; directory on disk, e.g. /scratch/$USER/gamessjob&lt;br /&gt;
# cp $SCINET_GAMESS_SCRATCH/* /scratch/$USER/gamessjob&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is a similar script, but this one uses 2 InfiniBand-connected nodes,&lt;br /&gt;
and runs the appropriate $SCINET_RUNGMS_IB script to actually run the job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=2:ib:ppn=8,walltime=48:00:00,os=centos53computeA&lt;br /&gt;
#PBS -N gamessjob&lt;br /&gt;
&lt;br /&gt;
## To submit type: qsub gmsib.sh&lt;br /&gt;
&lt;br /&gt;
# If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
# I typed qsub.&lt;br /&gt;
if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# the input file is typically named something like &amp;quot;gamesjob.inp&amp;quot;&lt;br /&gt;
# so the script will be run like &amp;quot;$SCINET_RUNGMS gamessjob 00 8 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# load the gamess module if not in .bashrc already&lt;br /&gt;
# actually, it MUST be in .bashrc&lt;br /&gt;
# module load gamess&lt;br /&gt;
&lt;br /&gt;
# This script requests InfiniBand-connected nodes (:ib above)&lt;br /&gt;
# so it must run with the IB version of the rungms script,&lt;br /&gt;
# $SCINET_RUNGMS_IB&lt;br /&gt;
&lt;br /&gt;
$SCINET_RUNGMS_IB gamessjob 00 16 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
-- [[User:Dgruner|dgruner]]  5 October 2009&lt;br /&gt;
-- [[User:Dgruner|dgruner]]  Updated on 14 September 2010&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=SciNet_Usage_Reports&amp;diff=9418</id>
		<title>SciNet Usage Reports</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=SciNet_Usage_Reports&amp;diff=9418"/>
		<updated>2018-08-31T23:40:44Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SciNet usage reports are now available on the CCDB website - &lt;br /&gt;
https://ccdb.computecanada.ca/. Login and then click on &amp;quot;View Group Usage&amp;quot;&lt;br /&gt;
under the &amp;quot;My Account&amp;quot; menu.&lt;br /&gt;
Please let us know if you have comments/questions about these reports.&lt;br /&gt;
 &lt;br /&gt;
PIs and all people that they sponsor will be able to view the reports &lt;br /&gt;
for only their group.&lt;br /&gt;
 &lt;br /&gt;
There is a summary report which gives a high-level &lt;br /&gt;
overview for those groups with RAC allocations as well as more &lt;br /&gt;
detailed cumulative reports which breakdown usage by allocation, system &lt;br /&gt;
and user. These are all updated nightly.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS_compared_to_HSM-TSM&amp;diff=9417</id>
		<title>HPSS compared to HSM-TSM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS_compared_to_HSM-TSM&amp;diff=9417"/>
		<updated>2018-08-31T23:39:53Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Understanding HPSS by comparing it with HSM-TSM at SciNet'''&lt;br /&gt;
&lt;br /&gt;
The [[HSM#Basic_Concepts|Basic Concepts]] and [[HSM#Definitions|Definitions]] described for HSM-TSM are equally applicable to HPSS.&lt;br /&gt;
&lt;br /&gt;
For most part both systems are very similar in topology and functionality. They both offer a way to offoad/archive data from the most active file systems (scratch and project) without necessarily having to deal directly with the tape library or &amp;quot;tape commands&amp;quot;. The main differences are in the [https://support.scinet.utoronto.ca/wiki/index.php/HPSS_terminology terminology] and the [https://support.scinet.utoronto.ca/wiki/index.php?title=HPSS_Servers&amp;amp;action=edit&amp;amp;redlink=1 servers scalability] of HPSS.&lt;br /&gt;
&lt;br /&gt;
== machines used in the setup ==&lt;br /&gt;
* HSM-TSM at SciNet requires 2 nodes: 1 tapenode (which also runs TSM and HSM servers), 1 datamover (running the HSM client). This setup is not easily scalable, and performance is limited.&lt;br /&gt;
* HPSS requires a minimum of 4 nodes: 1 core, 1 mover (we currently have 2), 1 HSI/HTAR server and 1 gateway (archive01), which functions more like a datamover under HSM, ie, the node users can login in order to transfer files. The setup is designed to be scalable, just by adding more movers, gateways, cache LUNs to the SAN, larger tape library, more tape drives, larger/more DB volumes. Currently, the HSI/HTAR server and the core are configured on the same node.&lt;br /&gt;
&lt;br /&gt;
== Both have a component of disk cache and another of tapes (inaccessible to end-users): ==&lt;br /&gt;
* the cache under HSM-TSM is 15TB, formated as gpfs, and mounted as /repository on datamover2&lt;br /&gt;
* the cache under HPSS is 233TB, SAN attached to the 2 movers, proprietary format, but it can be accessed as /archive through the HSI prompt on gpc-archive01, provided that you submit your queries via the queue system&lt;br /&gt;
&lt;br /&gt;
== migration between cache and tapes: ==&lt;br /&gt;
* under HSM-TSM, tapenode is the system directly connected to a [http://www-03.ibm.com/systems/storage/tape/ts3310/ TS3310 tape library], it has the function of moving data back and forth between cache (/repository) and tapes. This migration can be done automatically (by the HSM daemons running on datamover2) or manually from a shell on datamover2 by the users, with dsmmigrate or dsmrecall commands. &lt;br /&gt;
* under HPSS the tapenode equivalent is known as mover, and we have 2 of them. They are the ones connected to the [http://www-03.ibm.com/systems/storage/tape/ts3500/ TS3500 tape library]. For most part there is no need for user direct interference on this migration, which is done automatically between the cache and the tapes, and coordinated by the core node. However the user has the option to manually migrate and recall files and directories. The term migrate is used predominantly in the context of copying files down the hierarchy to tapes. After migration, files may be deleted from the cache via purge operations. Files are copied up the hierarchy via staging operations, usually when accessed after being purged from the top level of the hierarchy (HSI 'migrate', 'stage' and 'purge'). At SciNet we have all cache&amp;lt;=&amp;gt;tapes transfers set to be done automatically&lt;br /&gt;
&lt;br /&gt;
== relocation of data from /scratch and /project to the cache. Access to the cache by users. ==&lt;br /&gt;
* HSM-TSM has a system called datamover2 specially for this relocation purpose. Users can login to it using ssh, and rely on unix commands such as cp, mv, rsync or tar to transfer data from /scratch and /project to the cache (/repository)&lt;br /&gt;
* under HPSS all access to the system is done through the [[Moab|GPC queue system]]. Job scripts interact with the cache through a node known as the gateway machine, named gpc-archive01. All tools available in HSM-TSM for transferring files to/from repository on datamover2 (cp, mv, tar, rsync, rcp, sftp, gridFTP, etc) have [https://support.scinet.utoronto.ca/wiki/index.php/HSI_help an equivalent] on gpc-archive01 through the HSI interface. In addition there is also a tar equivalent application called HTAR.&lt;br /&gt;
&lt;br /&gt;
== exporting and accessing the cache ==&lt;br /&gt;
* under HSM-TSM the cache is a gpfs, and in theory it could be mounted across all 4000 nodes in the cluster. In practice we only mount it on 2 nodes, datamover2 and tapenode as /repository. In this scenario, although possible, there is no real need for scp, sftp or rsync remotely. Users can access the cache directly with a ssh session to datamover2.&lt;br /&gt;
* under HPSS the cache is not a parallel file system. It's a proprietary file system (hpssfs) and can only be accessed in its native raw format on the 2 movers, the core and the hsi server systems. On the gateway machine we could mount it locally in the traditional fashion as a virtual file system (VFS), but this capability is currently disabled at SciNet. However the HSI prompt on gpc-archive01 allows the access of the naming space on the cache as /archive.&lt;br /&gt;
&lt;br /&gt;
== Metadata and database: ==&lt;br /&gt;
* In TSM-HSM there exists a DB2 to keep track of all material on tapes and it runs on tapenode. The metadata for file/stubs on cache is kept within the cache gpfs itself on a .SpaceMan? directory, and it's maintained by datamover2.&lt;br /&gt;
* HPSS has a set of drives (2x 144TB LUNs mirrored) directly attached to the core node, just to store all information related to naming space an ownership inside the cache. The core node also runs a DB2 holding information on all material on tapes as well as info on the metadata.&lt;br /&gt;
&lt;br /&gt;
== Configuration and logistics definitions ==&lt;br /&gt;
* TSM-HSM uses a set of policies to determine which files/stub should be migrated, and when. Files can be grouped in tape pools primarily based on their paths on the file systems, but it's nearly impossible to segregate contents in the tape-pools based on the individual ownership/groups of the files.&lt;br /&gt;
* The HPSS equivalent to policies is a combination of Classes of Services (COS) and Storage Class, and the performance of migrations between the original location of the files, through the cache and into tapes is very dependent on how the cache is physically stripped, the configuration parameters from the Storage Classes as well as the number of small files involved. The equivalent to tape-pools in HPSS is known as Families. There is also provision to have files migrated to a &amp;quot;mirrored tape&amp;quot; COS, which is the default at SciNet.&lt;br /&gt;
&lt;br /&gt;
== Handling small file in the cache ==&lt;br /&gt;
* Under TSM-HSM, it's impossible to prevent or enforce the non-placement of small files in cache (/repository is gpfs). All we can do is rely on user's education and outreach, so that they won't transfer all the small files they have on the active file systems (scratch and project) to /repository. As a more efficient approach we make recommendations and encourage users to generate tar-balls larger than 10GB, and prevent the proliferation of small files inside the cache that way.&lt;br /&gt;
* Under the proprietary HPSS file system we face the same issue of not being able to prevent or enforce the non-placement of small files in cache. One effective workaround utility is HTAR, used for aggregating a set of files from the local file system directly into the HPSS cache, creating a file that conforms to the POSIX TAR specification. When HTAR creates the TAR file, it also builds an index file &amp;quot;.idx&amp;quot;, which is stored in the cache along with the associated TAR file. HPSS also supports its own small file tape aggregation. By aggregating many, many small files in the cache into a single object, tape drives are kept moving for longer periods of time (streaming) -- greatly improving tape drive performance!&lt;br /&gt;
&lt;br /&gt;
== files and stubs in cache ==&lt;br /&gt;
* Under TSM-HSM, when files are migrated to tapes and the original files are purged from the cache, what is left behind is the directory tree with the HSM stub files and the metadata associated with them. It's possible to distinguish between resident and purged files by using the 'dsmls' command.&lt;br /&gt;
* Under HPSS when a file or directory is migrated and subsequently purged the cache stays empty, unlike HSM, where a zero-byte stub remains. In fact, this would be the main difference between TSM-HSM and HPSS. The HPSS Core Server maintains the HPSS name space in system metadata. However, from the HSI prompt we can still query the metadata/DB2 server indirectly with standard unix command such as ls, pwd, du, etc, and get a response from the system as if the files were really there.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Data Management|BACK TO Data Management]]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Cpmd&amp;diff=9416</id>
		<title>Cpmd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Cpmd&amp;diff=9416"/>
		<updated>2018-08-31T23:39:36Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====CPMD====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The CPMD version 3.13.2 package was built using the Intel v11.1 compilers, and the OpenMPI v1.4.1 library.&lt;br /&gt;
&lt;br /&gt;
Patched with the latest available patch.  In the SOURCE directory:&lt;br /&gt;
&lt;br /&gt;
   patch -p2 &amp;lt; ../../cpmd-3.13.2_01.patch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basic configuration used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#INFO#&lt;br /&gt;
#INFO# Configuration to build a parallel cpmd executable for a linux machine&lt;br /&gt;
#INFO# with an AMD64/EM64T cpu (Opteron/AthlonFX/Athlon64/Xeon-EM64T) using &lt;br /&gt;
#INFO# the Intel Fortran Compiler with EM64T extensions.&lt;br /&gt;
#INFO#&lt;br /&gt;
#INFO# For optimal performance you should use a specifically tuned BLAS/LAPACK&lt;br /&gt;
#INFO# library. This example uses the Intel MKL library.&lt;br /&gt;
#INFO#&lt;br /&gt;
#INFO# see http://www.theochem.ruhr-uni-bochum.de/~axel.kohlmeyer/cpmd-linux.html&lt;br /&gt;
#INFO# for more information on compilind and running CPMD on linux machines.&lt;br /&gt;
#INFO#&lt;br /&gt;
#INFO# NOTE: CPMD cannot be compiled with the GNU Fortran compiler.&lt;br /&gt;
#INFO#&lt;br /&gt;
     IRAT=2&lt;br /&gt;
     CFLAGS='-O2 -Wall -m64'&lt;br /&gt;
     CPP='/lib/cpp -P -C -traditional'&lt;br /&gt;
     CPPFLAGS='-D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC \&lt;br /&gt;
        -DPARALLEL -DMYRINET'&lt;br /&gt;
     FFLAGS='-pc64 -O2 -unroll'&lt;br /&gt;
     LFLAGS=' -L. -L${MKLPATH} ${MKLPATH}/libmkl_solver_lp64_sequential.a -Wl,--start-group \&lt;br /&gt;
        -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group -lpthread'&lt;br /&gt;
     FFLAGS_GROMOS='-Dgood_luck $(FFLAGS)'&lt;br /&gt;
     if [ $debug ]; then&lt;br /&gt;
       FC='mpif77 -c -g'&lt;br /&gt;
       CC='mpicc -g -Wall -m64'&lt;br /&gt;
       LD='mpif77 -g'&lt;br /&gt;
     else&lt;br /&gt;
       FC='mpif77 -c '&lt;br /&gt;
       CC='mpicc'&lt;br /&gt;
       LD='mpif77 -static-intel '&lt;br /&gt;
     fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the SOURCE directory do:&lt;br /&gt;
&lt;br /&gt;
   ./config.sh LINUX_INTEL64_INTEL_MPI &amp;gt; Makefile&lt;br /&gt;
   Make &amp;gt;&amp;amp; make.out&lt;br /&gt;
&lt;br /&gt;
Created cpmd/3.13.2 module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;tcl&amp;quot;&amp;gt;&lt;br /&gt;
#%Module -*- tcl -*-&lt;br /&gt;
&lt;br /&gt;
# CPMD 3.13.2&lt;br /&gt;
&lt;br /&gt;
proc ModulesHelp { } {&lt;br /&gt;
  puts stderr &amp;quot;\tThis module adds CPMD environment variables&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module-whatis &amp;quot;adds CPMD environment variables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# CPMD was compiled with Intel compilers and OpenMPI&lt;br /&gt;
prereq intel &lt;br /&gt;
prereq openmpi&lt;br /&gt;
&lt;br /&gt;
setenv SCINET_CPMD_HOME /scinet/gpc/Applications/cpmd/3.13.2&lt;br /&gt;
setenv SCINET_CPMD_BIN /scinet/gpc/Applications/cpmd/3.13.2/bin&lt;br /&gt;
append-path PATH /scinet/gpc/Applications/cpmd/3.13.2/bin&lt;br /&gt;
setenv CPMD_PP_LIBRARY_PATH /scinet/gpc/Applications/cpmd/3.13.2/PPLIBNEW&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Running CPMD====&lt;br /&gt;
&lt;br /&gt;
- Load the necessary modules:  gcc, intel, intelmpi, nwchem (best done in your .bashrc)&lt;br /&gt;
&lt;br /&gt;
   # module load intel openmpi cpmd&lt;br /&gt;
&lt;br /&gt;
- The CPMD executable is in $SCINET_CPMD_BIN/cpmd.x&lt;br /&gt;
&lt;br /&gt;
- For multinode runs, use the sample IB script futher below&lt;br /&gt;
&lt;br /&gt;
- Create a torque script to run CPMD.  Here is an example for a calculation on a single 8-core node:&lt;br /&gt;
&lt;br /&gt;
- The standard CPMD pseudopotentials are in the directory $CPMD_PP_LIBRARY_PATH.  The following sample scripts use a user-defined pseudopotential.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#MOAB/Torque submission script for Scinet GPC (ethernet)&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=00:30:00&lt;br /&gt;
#PBS -N cpmdjob&lt;br /&gt;
# load the cpmd and other required modules if not in .bashrc already&lt;br /&gt;
module load intel openmpi cpmd&lt;br /&gt;
&lt;br /&gt;
# If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
# I typed qsub.&lt;br /&gt;
if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
mpirun -np 8 -hostfile $PBS_NODEFILE $SCINET_CPMD_BIN/cpmd.x inp1 /home/mgalib/uspp/uspp-736/Pot &amp;gt;out1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is a similar script, but this one uses 2 InfiniBand-connected nodes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=2:ib:ppn=8,walltime=48:00:00&lt;br /&gt;
#PBS -N cpmdjob&lt;br /&gt;
&lt;br /&gt;
## To submit type: qsub nwc.sh (where nwc.sh is the name of this script)&lt;br /&gt;
&lt;br /&gt;
# If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
# I typed qsub.&lt;br /&gt;
if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
mpirun -np 16 -hostfile $PBS_NODEFILE $SCINET_CPMD_BIN/cpmd.x inp1 /home/mgalib/uspp/uspp-736/Pot &amp;gt;out1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
-- [[User:Dgruner|dgruner]]  3 September 2010&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Performance_And_Debugging_Tools:_TCS&amp;diff=9415</id>
		<title>Performance And Debugging Tools: TCS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Performance_And_Debugging_Tools:_TCS&amp;diff=9415"/>
		<updated>2018-08-31T23:38:37Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Memory Profiling ==&lt;br /&gt;
&lt;br /&gt;
===PurifyPlus===&lt;br /&gt;
This is IBM/Rational's set of tools for memory profiling and code testing.  Specifically, the tools are:  purify, purecov and quantify.&lt;br /&gt;
&lt;br /&gt;
In order to gain access to these tools, you need to source the script that defines them to your shell:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tt&amp;gt; source /scinet/tcs/Rational/purifyplus_setup.sh &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The documentation for getting started with these tools is in the directory:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt; /scinet/tcs/Rational/releases/PurifyPlus.7.0.1/docs/pdf &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or here: [http://support.scinet.utoronto.ca/Manuals/PurifyPlusGettingStarted_en.pdf PurifyPlus Getting Started].&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
&lt;br /&gt;
===dbx===&lt;br /&gt;
&lt;br /&gt;
[http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.genprogc/doc/genprogc/dbx_symbolic_debug.htm dbx] is  source-language level serial debugger for aix; it works more or less like gdb for stepping through code.  For it to be useful, you have to have compiled with symbol information in the executable, eg with &amp;lt;tt&amp;gt;-g&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Performance Profiling==&lt;br /&gt;
&lt;br /&gt;
===gprof===&lt;br /&gt;
&lt;br /&gt;
[http://sourceware.org/binutils/docs-2.19/gprof/index.html gprof] is a very useful tool for finding out where a program is spending its time; its use is described in our [[Introduction_To_Performance#gprof_.28profiling:_everywhere.29 | Intro To Performance]].  You compile with &amp;lt;tt&amp;gt;-g -pg&amp;lt;/tt&amp;gt; and run the program as usual; a file named &amp;lt;tt&amp;gt;gmon.out&amp;lt;/tt&amp;gt; is created, which one can use via the &amp;lt;tt&amp;gt;gprof&amp;lt;/tt&amp;gt; program to see a profile of your program's execution time.&lt;br /&gt;
&lt;br /&gt;
===Xprofiler===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Xprof&amp;lt;/tt&amp;gt; is an AIX utility for graphically displaying the output of profiling information; it's equivalent to gprof but gives a better `bird's-eye view' of large and complex programs.   You compile your program with &amp;lt;tt&amp;gt;-pg -g&amp;lt;/tt&amp;gt; as before but run &amp;lt;tt&amp;gt;Xprof&amp;lt;/tt&amp;gt; on the output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Xprof program_name gmon.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Performance counters==&lt;br /&gt;
&lt;br /&gt;
===hpmcount===&lt;br /&gt;
&lt;br /&gt;
On the TCS, hpmcount allows the querying of the performance counter values in the CPUs themselves over the course of a run. Since here we are simply asking the CPU to report values it obtains during the run of a program, the code does not need to be instrumented; simply typing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hpmcount hpmcount_args program_name program_args&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
runs the job as normal and reports the counter results at the end of the run. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hpmcount -d -s 5,12 program_name program_args&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
reports counter sets 5 and 12, which are very useful for showing memory performance (showing L1 and L2 cache misses) and set 6 is especially useful for shared memory profiling, giving statistics about how often off-processor memory had to be accessed.   More details are available on our [[ Introduction_To_Performance#hpmcount_.28performance_counters:_TCS.29 | Introduction to Performance ]] or from the [http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds2/hpmcount.htm IBM website].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Performance logging==&lt;br /&gt;
&lt;br /&gt;
===PeekPerf===&lt;br /&gt;
&lt;br /&gt;
[[Image:PeekPerf.png|thumb|An example of using PeekPerf]]&lt;br /&gt;
&lt;br /&gt;
[http://domino.research.ibm.com/comm/research_projects.nsf/pages/hpct.index.html Peekperf] is IBM's single graphical  `dashboard' providing access to many  performance measurement tools for exmaining Hardware Counter data, threads, message passing, IO, and memory access, several of which are available seperately as command-line tools.   Its use is described in our [[Introduction_To_Performance#PeekPerf_.28profiling.2C_TCS.29 | Intro to Performance]].&lt;br /&gt;
&lt;br /&gt;
===MPE/Jumpshot===&lt;br /&gt;
&lt;br /&gt;
MPI defines a profiling layer which can be used to intercept MPI calls and log information about them.   This is used by the peekperf package above to instrument code by inserting function calls.  The same library and tools can be used manually: eg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpCC -pg a.c -o a.out -L/usr/lpp/ppe.hpct/lib64 -lmpitrace&lt;br /&gt;
$ mpiexec -n 2 ./a.out-hostfile HOSTFILE&lt;br /&gt;
$ peekview result.viz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(where HOSTFILE is a file containing the TCS devel node hostname; see [[FAQ#MPI_development_and_interactive_testing | our FAQ entry for interactive running on the TCS nodes]].)&lt;br /&gt;
The above will use peekview to show the results for up to three of the MPI tasks (those with the minimum, median, and maximum MPI time, respectively); to get more output, one can set the environment variable&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OUTPUT_ALL_RANKS=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
More information is available [https://wiki.alcf.anl.gov/index.php/HPCT_MPITRACE online].&lt;br /&gt;
&lt;br /&gt;
[[Image:Jumpshotoutput.png|thumb|jumpshot, part of the MPE development package, can give graphical overviews of the MPI behaviour of programs]]&lt;br /&gt;
&lt;br /&gt;
Another tool which performs the same task but generates more detailed output is the [http://www.mcs.anl.gov/research/projects/perfvis/ MPE tools] put out by Argonne National Lab.  On the TCS, these can be accessed by typing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load mpe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then using the mpe wrappers to compile your program: eg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load mpe&lt;br /&gt;
mpefc -o a.out a.F -mpilog   &lt;br /&gt;
mpecc -o a.out a.c -mpilog   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Running your program as above will generate a log file named something like &amp;lt;tt&amp;gt;Unknown.clog2&amp;lt;/tt&amp;gt;; you can convert this to a format suitable for viewing and then use the &amp;lt;tt&amp;gt;jumpshot&amp;lt;/tt&amp;gt; interactive trace viewing tool,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clog2TOslog2 Unknown.clog2&lt;br /&gt;
jumpshot Unknown.slog2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that this tries to open xwindows, so you will have had to login with &amp;lt;tt&amp;gt;ssh -X&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;ssh -Y&amp;lt;/tt&amp;gt; into both &amp;lt;tt&amp;gt;login.scinet&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;tcs01&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;tcs02&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To use MPE logging on a batch job, you must specify the MPE path and library path in your batch script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LoadLeveler submission script for SciNet TCS: MPI job&lt;br /&gt;
#&lt;br /&gt;
#@ job_name        = testmpe&lt;br /&gt;
#@ initialdir      = /scratch/YOUR/DIRECTORY&lt;br /&gt;
#&lt;br /&gt;
#@ tasks_per_node  = 64&lt;br /&gt;
#@ node            = 2&lt;br /&gt;
#@ wall_clock_limit= 0:10:00&lt;br /&gt;
#@ output          = $(job_name).$(jobid).out&lt;br /&gt;
#@ error           = $(job_name).$(jobid).err&lt;br /&gt;
#&lt;br /&gt;
#@ notification = complete&lt;br /&gt;
#@ notify_user  = user@example.com&lt;br /&gt;
#&lt;br /&gt;
# Don't change anything below here unless you know exactly&lt;br /&gt;
# why you are changing it.&lt;br /&gt;
#&lt;br /&gt;
#@ job_type        = parallel&lt;br /&gt;
#@ class           = verylong&lt;br /&gt;
#@ node_usage      = not_shared&lt;br /&gt;
#@ rset = rset_mcm_affinity&lt;br /&gt;
#@ mcm_affinity_options = mcm_distribute mcm_mem_req mcm_sni_none&lt;br /&gt;
#@ cpus_per_core=2&lt;br /&gt;
#@ task_affinity=cpu(1)&lt;br /&gt;
#@ environment = COPY_ALL; MEMORY_AFFINITY=MCM; MP_SYNC_QP=YES; \&lt;br /&gt;
#                MP_RFIFO_SIZE=16777216; MP_SHM_ATTACH_THRESH=500000; \&lt;br /&gt;
#                MP_EUIDEVELOP=min; MP_USE_BULK_XFER=yes; \&lt;br /&gt;
#                MP_RDMA_MTU=4K; MP_BULK_MIN_MSG_SIZE=64k; MP_RC_MAX_QP=8192; \&lt;br /&gt;
#                PSALLOC=early; NODISCLAIM=true&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
MPEDIR=/scinet/tcs/mpi/mpe2-1.0.6&lt;br /&gt;
export PATH=${MPEDIR}/bin:${MPEDIR}/sbin:${PATH}&lt;br /&gt;
export LD_LIBRARY_PATH=${MPEDIR}/lib:${LD_LIBRARY_PATH}&lt;br /&gt;
&lt;br /&gt;
YOUR-PROGRAM&lt;br /&gt;
&lt;br /&gt;
#@ queue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Scalasca===&lt;br /&gt;
&lt;br /&gt;
[http://www.fz-juelich.de/jsc/scalasca/ Scalasca] is a sophisticated tool for analyzing performance and finding common performance problems, installed on both TCS and GPC.  We describe it in our [[Introduction_To_Performance#Scalasca_.28profiling.2C_tracing:_TCS.2C_GPC.29 | Intro to Performance]].&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=SciNet_User_Support&amp;diff=9414</id>
		<title>SciNet User Support</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=SciNet_User_Support&amp;diff=9414"/>
		<updated>2018-08-31T23:38:13Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Support team ===&lt;br /&gt;
SciNet's [http://www.scinethpc.ca/staff support team of system administrators and technical analysts] can help you with wide range problems such as&lt;br /&gt;
* how to use SciNet's systems,&lt;br /&gt;
* how to set up your runs most efficiently,&lt;br /&gt;
* how to parallize or optimize your code,&lt;br /&gt;
* using and installing libraries.&lt;br /&gt;
SciNet support staff is located at [http://www.scinethpc.ca/2010/08/contact-us/ 256 McCaul St] on the St. George Campus of the University of Toronto.&lt;br /&gt;
&lt;br /&gt;
=== Courses ===&lt;br /&gt;
SciNet organizes a number of types of classes for its users:&lt;br /&gt;
* Intro to SciNet (1 hour)&lt;br /&gt;
* SciNet User Group meetings including 30 minute TechTalks, every second Wednesday on the month at noon.&lt;br /&gt;
* Full day courses on e.g. parallel I/O, (parallel) programming, etc.&lt;br /&gt;
* 5 day course on parallel programming (openMP, MPI)&lt;br /&gt;
Read more on these on the [https://support.scinet.utoronto.ca/education Training and Education web site], where you can also register (&amp;quot;enroll&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Many past lecture slide and some videos can be found on the [[Knowledge Base: Tutorials and Manuals]] page.&lt;br /&gt;
&lt;br /&gt;
=== How to request help ===&lt;br /&gt;
If you have problems, questions, or requests, and you couldn't find the answer in this wiki, send an e-mail '''with all relevant information''' to:&lt;br /&gt;
&lt;br /&gt;
:[mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;] &lt;br /&gt;
&lt;br /&gt;
'''''For connection problems, include:'''''&lt;br /&gt;
* Where you are connecting from,&lt;br /&gt;
* Where you are trying to connect to&lt;br /&gt;
* The type of computer you are connecting from&lt;br /&gt;
&lt;br /&gt;
'''''For failed jobs, include:'''''&lt;br /&gt;
* What cluster you were using&lt;br /&gt;
* A description of what the run is supposed to do&lt;br /&gt;
* Job ID&lt;br /&gt;
* Error messages you got&lt;br /&gt;
* Full path to the job script&lt;br /&gt;
* Full path to your code&lt;br /&gt;
* Location of input/error files (please do not delete these!)&lt;br /&gt;
&lt;br /&gt;
'''''For failed compilations, include:'''''&lt;br /&gt;
* What cluster you were using&lt;br /&gt;
* Full path to the code and Makefiles&lt;br /&gt;
* A description of what the code is supposed to do&lt;br /&gt;
* Error messages you got&lt;br /&gt;
&lt;br /&gt;
'''''To make an appointment with one of our analysts:'''''&lt;br /&gt;
* Use the same e-mail, [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;] &lt;br /&gt;
* There is no formal ticketing system.&lt;br /&gt;
*Avoid sending email only to specific individuals at SciNet. Your chances of a quick reply increase significantly if you email our team.&lt;br /&gt;
&lt;br /&gt;
'''Note that your password should never, never, never be to sent to us, even if your question is about your account.'''&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=MARS&amp;diff=9413</id>
		<title>MARS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=MARS&amp;diff=9413"/>
		<updated>2018-08-31T23:37:37Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MARS is not more. [https://support.scinet.utoronto.ca/wiki/index.php/HPSS Follow this link]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS_Servers&amp;diff=9412</id>
		<title>HPSS Servers</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS_Servers&amp;diff=9412"/>
		<updated>2018-08-31T23:36:46Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HPSS servers include the Core Server, Migration/Purge Server, Gatekeeper, Location Server, Log Client, Log Daemon, Physical Volume Library, Physical Volume Repository, Mover, Storage System Management System Manager, and Startup Daemon. Figure 3: HPSS Components provides a simplified view of the HPSS system. Each major server component is shown, along with the basic control communication paths (thin arrowed lines). Infrastructure items (those components that “glue together” the distributed servers) are shown at the top of the cube.&lt;br /&gt;
&lt;br /&gt;
'''''Core Server.''''' The Core Server provides several key sets of functionality.&lt;br /&gt;
&lt;br /&gt;
First, the Core Server provides translation between human-oriented names and HPSS object identifiers. Name space objects managed by the Core Server are filesets, junctions, directories, files, hard links, and symbolic links. The Core Server provides access verification to objects and mechanisms for manipulating access to these objects via a Portable Operating System Interface (POSIX) view of the name space. This name space is a hierarchical structure consisting of directories, files, and links. These name space objects may exist within filesets that are connected via junctions.&lt;br /&gt;
&lt;br /&gt;
Second, the Core Server provides the abstraction of logical bitfiles to its clients. A bitfile is identified by a Core Server generated name called a bitfile ID. Clients may reference portions of a bitfile by specifying the bitfile ID and a starting address and length. The Core Server supports random access to files and sparsely written files. It supports parallel reading and writing of data to bitfiles and performs the mapping of logical portions of bitfiles onto physical storage devices. The Core Server supports the migration, purging, and staging of data in a storage hierarchy (though the migration/purge policies are implemented through the Migration/Purge Server, a client to the Core Server).&lt;br /&gt;
&lt;br /&gt;
Third, the Core Server provides a hierarchy of storage objects: storage segments, virtual volumes, and physical volumes. The Core Server translates storage segment references into virtual volume references and then into physical volume references, handles the mapping of physical resources into striped virtual volumes to allow parallel I/O to that set of resources, and schedules the mounting and dismounting of removable media through the Physical Volume Library (see below).&lt;br /&gt;
&lt;br /&gt;
'''''Migration/Purge Server (MPS).''''' The MPS allows a site to implement its storage management policies by managing the placement of data on HPSS storage media using site-defined migration and purge policies. By making appropriate calls to its Core Server, an MPS copies data to lower levels in the hierarchy (migration), removes data from the current level once copies have been made (purge), or moves data between volumes at the same level (lateral move). Based on the hierarchy configuration, MPS can be directed to create duplicate copies of data when it is being migrated from disk or tape. This is done by copying the data to multiple lower levels in the storage hierarchy.&lt;br /&gt;
&lt;br /&gt;
There are three types of migration: disk migration, tape file migration, and tape volume migration. The designation disk or tape refers to the type of storage class that migration is running against. See Section 3.7.2: Migration/Purge Server on page 72 for a more complete discussion of the different types of migration.&lt;br /&gt;
&lt;br /&gt;
MPS runs migration on each storage class periodically using the time interval specified in the migration policy for that class. See Section 2.3.7: HPSS Policy Modules on page 34 for details on migration and purge policies. Migration runs can be started automatically when the warning or critical space thresholds for the storage class are exceeded. In addition, migration runs can be started manually by an administrator.&lt;br /&gt;
&lt;br /&gt;
Purge runs are started automatically on each storage class when the free space in that class falls below the percentage specified in the purge policy. Purge runs may also be started manually.&lt;br /&gt;
&lt;br /&gt;
'''''Disk Migration/Purge:'''''&lt;br /&gt;
The purpose of disk migration is to make one or more copies of disk files to lower levels in the hierarchy. The number of copies depends on the configuration of the hierarchy. For disk, migration and purge are separate operations. It is common for disk storage classes which have been configured for migration to also be configured for purge as well. Once a file has been migrated (copied) downwards in the hierarchy, it becomes eligible for purge, which subsequently removes the file from the higher level and allows the disk space to be reused.&lt;br /&gt;
&lt;br /&gt;
'''''Tape File Migration:'''''&lt;br /&gt;
The purpose of tape file migration is to make an additional copy (or multiple additional copies) of a file, in a tape storage class, to a lower level in the hierarchy. It is also possible to move files downwards instead of copying them. In this case there is no duplicate copy maintained. There is no separate purge component to tape file migration. Empty volumes must be reclaimed using the reclaim utility.&lt;br /&gt;
&lt;br /&gt;
'''''Tape Volume Migration:'''''&lt;br /&gt;
The purpose of tape volume migration is to free tape volumes for reuse. Tape volumes are selected based on being in the EOM map state and containing the most unused space (caused by users overwriting or deleting files). The remaining segments on these volumes are either migrated downwards to the next level in the hierarchy, or are moved laterally to another tape volume at the same level. This results in empty tape volumes which may then be reclaimed. Note that there is no purge component to tape volume migration. All of the operations use a move instead of a copy semantic.&lt;br /&gt;
&lt;br /&gt;
'''''Gatekeeper (GK).''''' The Gatekeeper provides two main services:&lt;br /&gt;
* It provides sites with the ability to schedule the use of HPSS resources using the Gatekeeping Service.&lt;br /&gt;
* It provides sites with the ability to validate user accounts using the Account Validation Service.&lt;br /&gt;
&lt;br /&gt;
Both of these services allow sites to implement their own policy.&lt;br /&gt;
&lt;br /&gt;
The default Gatekeeping Service policy is to not do any gatekeeping. Sites may choose to implement a policy for monitoring authorized callers, creates, opens, and stages. The Core Server will call the appropriate GK API depending on the requests that the site-implemented policy is monitoring.&lt;br /&gt;
&lt;br /&gt;
The Account Validation Service performs authorizations of user storage charges. A site may perform no authorization, default authorization, or site-customized authorization depending on how the Accounting Policy is set up and whether or not a site has written site-specific account validation code. Clients call this service when creating files, changing file ownership, or changing accounting information. If Account Validation is enabled, the Account Validation Service determines if the user is allowed to use a specific account or gives the user an account to use, if needed. The Core Server also calls this service to perform an authorization check just before account-sensitive operations take place.&lt;br /&gt;
&lt;br /&gt;
'''''Location Server (LS).''''' The Location Server acts as an information clearinghouse to its clients through the HPSS Client API to enable them to locate servers and gather information from both local and remote HPSS systems. Its primary function is to allow a client to determine a server's location and, by knowing other information about the server such as its object UUID, determine its server type or its subsystem id. This allows a client to contact the appropriate server. Usually the Location Server is only used by the Core Server or the Gatekeeper.&lt;br /&gt;
&lt;br /&gt;
'''''Physical Volume Library (PVL).''''' The PVL manages all HPSS physical volumes. It is in charge of mounting and dismounting sets of physical volumes, allocating drive and cartridge resources to satisfy mount and dismount requests, providing a mapping of physical volume to cartridge and of cartridge to Physical Volume Repository (PVR), and issuing commands to PVRs to perform physical mount and dismount actions. A primary function of the PVL is the support for atomic mounts of sets of cartridges for parallel access to data. Atomic mounts are implemented by the PVL, which waits until all necessary cartridge resources for a request are available before issuing mount commands to the PVRs.&lt;br /&gt;
&lt;br /&gt;
'''Physical Volume Repository (PVR).''' PVRs manage HPSS cartridges. Though an HPSS system may contain multiple PVRs, each cartridge is managed by only one. PVRs provide APIs for clients to request cartridge mounts and dismounts and query the status of cartridges. For convenience, PVRs are often configured in one-to-one correspondence to tape libraries.&lt;br /&gt;
&lt;br /&gt;
For information on the types of tape libraries supported by HPSS PVRs, see Section 3.4.2:Robotically Mounted Tape on page 49.&lt;br /&gt;
&lt;br /&gt;
An Operator PVR is provided for cartridges not under control of a robotic library. These cartridges are mounted on a set of drives by operators.&lt;br /&gt;
&lt;br /&gt;
* '''''Mover (MVR).''''' The purpose of the Mover is to transfer data from a source device to a sink device. A device can be a standard I/O device with geometry (e.g., tape, disk) or a device without geometry (e.g., network, memory). The Mover’s client (typically the Core Server) describes the data to be moved and where the data is to be sent. It is the Mover’s responsibility to actually transfer the data, retrying failed requests and attempting to optimize transfers. The Mover supports transfers for disk devices, tape devices and a mover protocol that can be used as a lightweight coordination and flow control mechanism for large transfers.&lt;br /&gt;
&lt;br /&gt;
* '''''Log Client (LOGC).''''' The Log Client receives log messages from each HPSS server running on its node and filters those messages based on the configured log policies. Log messages which pass the filter are written to a local log and sent on to the Log Daemon.&lt;br /&gt;
&lt;br /&gt;
* '''''Log Daemon (LOGD).''''' The Log Daemon enters log messages into the central log file and sends those messages which are to be displayed in the Alarms and Events SSM window to the SSM System Manager.&lt;br /&gt;
&lt;br /&gt;
'''''Storage System Management System Manager (SSMSM).''''' SSM, the Storage System Management subsystem, is the tool used by the system administrator to manage HPSS. SSM has three components, one of which is an HPSS server and two of which are user interface client programs. The server is:&lt;br /&gt;
* SSM System Manager (SSMSM, or hpss_ssmsm) - Communicates with all other HPSS components requiring monitoring or control.&lt;br /&gt;
&lt;br /&gt;
The user interface clients are:&lt;br /&gt;
* SSM GUI (hpssgui) - Provides the HPSS administrator or operator the ability to configure or monitor the HPSS System through a graphical user interface.&lt;br /&gt;
* SSM Command Line Interface (hpssadm) - Provides the HPSS administrator or operator the ability to configure or monitor a subset of the HPSS system through a set of interactive or batch commands.&lt;br /&gt;
* SSM enables the administrator to configure, monitor and control the resources (servers, devices, tape libraries, and media) of HPSS in ways that conform to the management policies of a given customer site.&lt;br /&gt;
&lt;br /&gt;
Monitoring capabilities include the ability to query the values of important management attributes of storage system resources and the ability to receive notifications of alarms and other significant system events. Controlling capabilities include the ability to start up and shut down servers and the ability to set the values of management attributes of storage system resources and storage system policy parameters. Additionally, SSM can request that specific operations be performed on resources within the storage system, such as adding and deleting logical or physical resources.&lt;br /&gt;
&lt;br /&gt;
'''''Startup Daemon.''''' The Startup Daemon is called by the SSMSM to start each HPSS server except the SSMSM, the Startup Daemon itself, and the remote portion of the Mover. A Startup Daemon is required on each node where any HPSS Server executes, with the exception that no Startup Daemon is required on nodes where the only HPSS Server is the remote portion of the Mover.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://support.scinet.utoronto.ca/wiki/index.php/HPSS BACK TO HPSS]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Systems_Overview&amp;diff=9411</id>
		<title>Systems Overview</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Systems_Overview&amp;diff=9411"/>
		<updated>2018-08-31T23:35:48Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SciNet Systems==&lt;br /&gt;
SciNet is a consortium for High-Performance Computing consisting of researchers at the University of Toronto&lt;br /&gt;
and its associated hospitals. It is one of seven such consortia in Canada, which together form [https://computecanada.org/ Compute/Calcul Canada].&lt;br /&gt;
&lt;br /&gt;
SciNet has two main clusters:&lt;br /&gt;
{|-&lt;br /&gt;
|&lt;br /&gt;
===General Purpose Cluster (GPC)===&lt;br /&gt;
[[Image:University_of_Tor_79284gm-a.jpg|left]]&lt;br /&gt;
&lt;br /&gt;
The [[GPC_Quickstart|General Purpose Cluster]] is an extremely large cluster (ranked 16th in the world at its inception in June 2009, and the fastest in Canada) and is where most simulations are to be done at SciNet. It is an IBM iDataPlex cluster based on Intel's Nehalem architecture (one of the first in the world to make use of the new chips). The GPC consists of 3,780 nodes with a total of 30,240 2.5GHz cores, with 16GB RAM per node (2GB per core). Approximately one quarter of the cluster is interconnected with non-blocking DDR InfiniBand while the rest of the nodes are connected with 5:1 blocked QDR Infiniband. The compute nodes are accessed through a queuing system that allows jobs with a maximum wall time of 48 hours.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
===Tightly Coupled System  (TCS)===&lt;br /&gt;
&lt;br /&gt;
[[Image:TCS-1.jpg|left|160px]]&lt;br /&gt;
&lt;br /&gt;
The [[TCS_Quickstart|TCS]] is a cluster of `fat' (high-memory, many-core) POWER6 nodes on a very fast Infiniband connection, which was installed in January of 2009. It has a relatively small number of cores (~3000), arranged in nodes of 32 cores with 128 GB of RAM on each node. It is dedicated for jobs that require such a large memory / low latency configuration. Jobs need to use multiples of 32 cores (a node), and are submitted to the LoadLeveler queuing system which allows jobs with a maximum wall time of 48 hours.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
===Power 7 Linux Cluster (P7)===&lt;br /&gt;
&lt;br /&gt;
[[Image:IBM755.jpg|right|160px]]&lt;br /&gt;
&lt;br /&gt;
The [[P7_Linux_Cluster|P7]] is a cluster of 5 (soon to be at least 8) `fat' (high-memory, many-core) POWER7 nodes on a very fast Infiniband connection, which was installed in May of 2011. It has a total of 160 cores, arranged in nodes of 32 cores with 128 GB of RAM on each node. It is dedicated for jobs that require such a large memory / low latency configuration. Jobs need to use multiples of 32 cores or more, and are submitted to the LoadLeveler queuing system which allows jobs with a maximum wall time of 48 hours.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
===Accelerator Research Cluster (ARC)===&lt;br /&gt;
The [[Accelerator_Research_Cluster|ARC]] is a technology evaluation cluster with a combination of 14 IBM PowerXCell 8i &amp;quot;Cell&amp;quot; nodes and 8 Intel x86_64 &amp;quot;Nehalem&amp;quot; nodes containing 16 NVIDIA M2070 GPUs. The QS22's each have two 3.2GHz &amp;quot;IBM PowerXCell 8i CPU's, where each CPU has 1 Power Processing Unit (PPU) and 8 Synergistic Processing Units (SPU), and 32GB of RAM per node. The Intel nodes have two 2.53GHz 4core Xeon X5550 CPU's with 48GB of RAM per node each containing two NVIDIA M2070 (Fermi) GPU's each with 6GB of RAM.&lt;br /&gt;
&lt;br /&gt;
Please note that this cluster is not a production cluster and is only accessible to selected users. &lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Namd_on_BGQ&amp;diff=9410</id>
		<title>Namd on BGQ</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Namd_on_BGQ&amp;diff=9410"/>
		<updated>2018-08-31T23:35:02Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A parameter study was undertaken to test simulation performance and efficiency of NAMD on the Blue Gene/Q cluster, [[BGQ]], with attention to NAMD performance tuning documentation. Determining optimal parameters for a NAMD simulation on this system is more difficult as there are only certain simulation sizes that have optimal topologies (32, 64, 128, etc.). The system of study is a 246,000 atom membrane protein simulation ([http://www.rcsb.org/pdb/explore.do?structureId=1m56 Cytochrome c Oxidase] embedded in a TIP3P solvated DPPC bilayer) using the CHARMM36 forcefield (protein and lipids). The unit cell is cubic with box dimensions 144 x 144 x 117 Angstroms and the simulation time-step was 2fs. The following non-bonded frequency parameters were also used: nonbondedFreq=1, fullElectFrequency=2, stepspercycle=10. &lt;br /&gt;
&lt;br /&gt;
The following benchmarks were performed with the non-SMP NAMD build with exception to the last section. All simulations are started using a restart file from a pre-equilibrated snapshot. Performance in nanoseconds per day is based on the geometric mean of the three &amp;quot;'''Benchmark time'''&amp;quot; lines at the beginning of the simulation's standard output and may not represent long-time averages. The column &amp;quot;cores&amp;quot; in the following results indicates the number of &amp;quot;physical cores&amp;quot; specified by the '''bg_size''' parameter on the submission script.&lt;br /&gt;
&lt;br /&gt;
== Performance Tuning Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
Efficiency is measured with respect to the 16 ranks-per-node 32 core simulation. In this section, the PME patch grid was manually doubled in either the X, Y, or Z directions. Default PME patch doubling in NAMD 2.9 is generally recommended (twoAway parameters need not be specified in the configuration file). &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|&lt;br /&gt;
|2.79&lt;br /&gt;
|1.00&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|&lt;br /&gt;
|5.05&lt;br /&gt;
|0.91&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|twoAwayX (default)&lt;br /&gt;
|5.62&lt;br /&gt;
|1.01&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|twoAwayX (default)&lt;br /&gt;
|10.07&lt;br /&gt;
|0.90&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|twoAwayXY&lt;br /&gt;
|10.59&lt;br /&gt;
|0.95&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayX&lt;br /&gt;
|14.32&lt;br /&gt;
|0.64&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY (default)&lt;br /&gt;
|17.63&lt;br /&gt;
|0.79&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXYZ&lt;br /&gt;
|16.79&lt;br /&gt;
|0.75&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|512&lt;br /&gt;
|twoAwayX&lt;br /&gt;
|23.52&lt;br /&gt;
|0.53&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|512&lt;br /&gt;
|twoAwayXY (default)&lt;br /&gt;
|25.00&lt;br /&gt;
|0.56&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|1024&lt;br /&gt;
|twoAwayX&lt;br /&gt;
|23.67&lt;br /&gt;
|0.27&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|1024&lt;br /&gt;
|twoAwayXY&lt;br /&gt;
|28.31&lt;br /&gt;
|0.32&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|1024&lt;br /&gt;
|twoAwayXYZ (default)&lt;br /&gt;
|27.98&lt;br /&gt;
|0.31&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PME Pencils ==&lt;br /&gt;
A &amp;quot;pencil-based&amp;quot; PME decomposition may be more efficient than the default &amp;quot;slab-based decomposition&amp;quot;. In this study PME pencil grids are created for both dedicated PME nodes (lblUnload=yes) and non-dedicated PME nodes. Fine-tuning of PMEPencils resulted in insignificant performance gains for this study.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=8, lblUnload=yes&lt;br /&gt;
|12.93&lt;br /&gt;
|0.58&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=12, lblUnload=yes&lt;br /&gt;
|17.27&lt;br /&gt;
|0.77&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=16, lblUnload=yes&lt;br /&gt;
|16.02&lt;br /&gt;
|0.72&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=20, lblUnload=yes&lt;br /&gt;
|15.41&lt;br /&gt;
|0.69&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=12&lt;br /&gt;
|16.21&lt;br /&gt;
|0.73&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=16&lt;br /&gt;
|17.92&lt;br /&gt;
|0.80&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=20&lt;br /&gt;
|17.99&lt;br /&gt;
|0.81&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=24&lt;br /&gt;
|17.83&lt;br /&gt;
|0.80&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=36&lt;br /&gt;
|16.97&lt;br /&gt;
|0.76&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=20&lt;br /&gt;
|18.24&lt;br /&gt;
|0.82&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=20&lt;br /&gt;
|17.99&lt;br /&gt;
|0.81&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|256&lt;br /&gt;
|twoAwayXY, PMEPencils=20&lt;br /&gt;
|13.94&lt;br /&gt;
|0.63&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ranks-Per-Node Study ==&lt;br /&gt;
The &amp;quot;ranks-per-node&amp;quot; or simply the number of processes per compute node is a Blue Gene/Q runjob command parameter. The following efficiency estimates are measured with respect to the 16 ranks per node results for the same number of nodes respectively (for the default twoAway choices and no PME Pencils). These simulations offered the best performance and were used in production simulations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|32&lt;br /&gt;
|&lt;br /&gt;
|4.46&lt;br /&gt;
|1.6&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|64&lt;br /&gt;
|&lt;br /&gt;
|8.01&lt;br /&gt;
|1.43&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|128&lt;br /&gt;
|&lt;br /&gt;
|13.74&lt;br /&gt;
|1.3&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|256&lt;br /&gt;
|&lt;br /&gt;
|19.81&lt;br /&gt;
|1.12&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Incorrect Particle-Mesh Ewald Grid ==&lt;br /&gt;
&lt;br /&gt;
Long-range electrostatics are computed using PME for all simulations above with PME grid spacing set to be generated automatically with the &amp;quot;'''pmeGridSpacing 1.0'''&amp;quot; setting. A poor choice in PME grid spacing (i.e. not a multiple of 2,3, and 5) can result in increasingly large performance degradation due to the matrix size requirements in the FFT algorithm. Below is an example of the type of performance degradation that one may expect with none of the grid dimensions are divisible by 5. One can draw a comparison to a more correct PME choice in the Performance Tuning Benchmarks above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|Poor PME Multiple (144x144x111)&lt;br /&gt;
|2.70&lt;br /&gt;
|0.97&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|Poor PME Multiple (144x144x111)&lt;br /&gt;
|5.13&lt;br /&gt;
|0.92&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|Poor PME Multiple (144x144x111)&lt;br /&gt;
|8.61&lt;br /&gt;
|0.77&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|Poor PME Multiple (144x144x111)&lt;br /&gt;
|13.93&lt;br /&gt;
|0.62&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|512&lt;br /&gt;
|Poor PME Multiple (144x144x111)&lt;br /&gt;
|17.08&lt;br /&gt;
|0.38&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|1024&lt;br /&gt;
|Poor PME Multiple (144x144x111)&lt;br /&gt;
|17.64&lt;br /&gt;
|0.20&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Symmetric multiprocessing Study ==&lt;br /&gt;
All the prior benchmarks were performed with a non-SMP NAMD binary, thus true multithreading was not possible. The following results utilize this feature and offer performance increases of up to 40% compared to the non-SMP benchmarks. Processors per node (ppn) was varied from 1 (not multithreaded) to 4. Values greater than 4 resulted in a crash. The addition of the Charm++ flag &amp;quot;+CmiNoProcForComThread&amp;quot; to the NAMD binary had negligible improvements in all cases. Efficiency is respect to the 512/ppn1 simulation.&lt;br /&gt;
&lt;br /&gt;
Comparing 32/ppn4 with 64/ppn4 we observed 85% scaling, within acceptable criteria for production runs. 128/ppn4 simulations showed poor scaling so larger systems were not tested.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 1&lt;br /&gt;
|2.75&lt;br /&gt;
|1.00&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 2&lt;br /&gt;
|4.60&lt;br /&gt;
|1.67&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 3&lt;br /&gt;
|5.59&lt;br /&gt;
|2.03&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4&lt;br /&gt;
|6.31&lt;br /&gt;
|2.29&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 1, +CmiNoProcForComThread&lt;br /&gt;
|2.74&lt;br /&gt;
|1.00&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 2, +CmiNoProcForComThread&lt;br /&gt;
|4.62&lt;br /&gt;
|1.68&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 3, +CmiNoProcForComThread&lt;br /&gt;
|5.50&lt;br /&gt;
|2.00&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4, +CmiNoProcForComThread&lt;br /&gt;
|6.31&lt;br /&gt;
|2.30&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|ppn 1&lt;br /&gt;
|5.54&lt;br /&gt;
|1.01&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|ppn 2&lt;br /&gt;
|8.31&lt;br /&gt;
|1.51&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|ppn 3&lt;br /&gt;
|8.56&lt;br /&gt;
|1.56&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|ppn 4&lt;br /&gt;
|10.60&lt;br /&gt;
|1.92&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|64&lt;br /&gt;
|ppn 4, +CmiNoProcForComThread&lt;br /&gt;
|10.58&lt;br /&gt;
|1.92&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|ppn 1&lt;br /&gt;
|9.93&lt;br /&gt;
|0.90&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|ppn 2&lt;br /&gt;
|13.86&lt;br /&gt;
|1.26&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|ppn 3&lt;br /&gt;
|14.72&lt;br /&gt;
|1.34&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|128&lt;br /&gt;
|ppn 4&lt;br /&gt;
|15.10&lt;br /&gt;
|1.37&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In an attempt to maximize the number of processes per node (64), one may also utilize less ranks-per-node, such as 2,4 or 8, while requesting a larger number of threads. The performance of using 8-ranks per node on 64-physical nodes with ppn 8 is approximately equal to the performance of the 16-ranks-per-node above. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|32&lt;br /&gt;
|ppn 1&lt;br /&gt;
|1.53&lt;br /&gt;
|0.56&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|32&lt;br /&gt;
|ppn 2&lt;br /&gt;
|2.77&lt;br /&gt;
|1.01&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4&lt;br /&gt;
|4.64&lt;br /&gt;
|1.69&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|32&lt;br /&gt;
|ppn 8&lt;br /&gt;
|6.32&lt;br /&gt;
|2.30&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|64&lt;br /&gt;
|ppn 1&lt;br /&gt;
|2.79&lt;br /&gt;
|0.51&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|64&lt;br /&gt;
|ppn 2&lt;br /&gt;
|5.59&lt;br /&gt;
|1.02&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|64&lt;br /&gt;
|ppn 4&lt;br /&gt;
|8.25&lt;br /&gt;
|1.50&lt;br /&gt;
|----&lt;br /&gt;
|8&lt;br /&gt;
|64&lt;br /&gt;
|ppn 8&lt;br /&gt;
|10.71&lt;br /&gt;
|1.95&lt;br /&gt;
|----&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Simulations of both 2 and 4 ranks-per-node offered comparable simulation efficiencies to the other full 64 process jobs in this section. The combination of 32 ranks-per-node and mulithreading was not as effective as using the normal 16 ranks-per-node and ppn 4 as above. A simulations of ppn=64 with 1 rank-per-node was not successful, and the ppn=32 job required the use of PMEPencils.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|2&lt;br /&gt;
|32&lt;br /&gt;
|ppn 32&lt;br /&gt;
|6.35&lt;br /&gt;
|2.29&lt;br /&gt;
|----&lt;br /&gt;
|2&lt;br /&gt;
|32&lt;br /&gt;
|ppn 32 (only with PMEPencils 8)&lt;br /&gt;
|7.80&lt;br /&gt;
|1.95&lt;br /&gt;
|----&lt;br /&gt;
|4&lt;br /&gt;
|32&lt;br /&gt;
|ppn 16&lt;br /&gt;
|6.30&lt;br /&gt;
|2.31&lt;br /&gt;
|----&lt;br /&gt;
|4&lt;br /&gt;
|32&lt;br /&gt;
|ppn 16&lt;br /&gt;
|10.73&lt;br /&gt;
|1.42&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|32&lt;br /&gt;
|ppn 1, +CmiNoProcForComThread&lt;br /&gt;
|4.45&lt;br /&gt;
|1.62&lt;br /&gt;
|----&lt;br /&gt;
|32&lt;br /&gt;
|32&lt;br /&gt;
|ppn 2, +CmiNoProcForComThread&lt;br /&gt;
|6.26&lt;br /&gt;
|2.27&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PME pencils offered minimal improvements when selected appropriately. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ranks&lt;br /&gt;
|Cores&lt;br /&gt;
|NAMD Config Options&lt;br /&gt;
|ns/day&lt;br /&gt;
|Efficiency&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4, pmePencils 4&lt;br /&gt;
|2.88&lt;br /&gt;
|1.05&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4, pmePencils 16&lt;br /&gt;
|6.34&lt;br /&gt;
|2.31&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4, pmePencils 20&lt;br /&gt;
|6.35&lt;br /&gt;
|2.31&lt;br /&gt;
|----&lt;br /&gt;
|16&lt;br /&gt;
|32&lt;br /&gt;
|ppn 4, pmePencils 24&lt;br /&gt;
|6.24&lt;br /&gt;
|2.27&lt;br /&gt;
|----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
# [http://www.ks.uiuc.edu/Research/namd/2.9/ug/node39.html NAMD 2.9 User Guide]&lt;br /&gt;
# [http://www.ks.uiuc.edu/Research/namd/wiki/?NamdPerformanceTuning NAMD Performance Tuning Wiki]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=User_Python_virtualenv&amp;diff=9409</id>
		<title>User Python virtualenv</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=User_Python_virtualenv&amp;diff=9409"/>
		<updated>2018-08-31T23:32:38Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Using Python Virtualenv ==&lt;br /&gt;
&lt;br /&gt;
Virtual environments (short virtualenv) are a standard in Python to create isolated Python environments. This is useful when certain modules or certain versions of modules are not available in the thee default python environment. First load a python module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module load intel/13.1.1 python/2.7.5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install virtualenv:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install virtualenv --user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then create a directory for the virtual environments. One can put an virtual environment anywhere, but this directory structure is recommended:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir ~/.virtualenvs&lt;br /&gt;
cd ~/.virtualenvs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we create our first virtualenv called ''myenv'' choose any name you like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/.local/bin/virtualenv myenv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that we can activate that virtual environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ~/.virtualenvs/myenv/bin/activate&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To go back to the normal python installation simply type &amp;quot;deactivate&amp;quot;&lt;br /&gt;
As you are in the virtualenv now you can just type ''pip install &amp;lt;required module&amp;gt;'' to install any module in your virtual environment&lt;br /&gt;
&lt;br /&gt;
===Installing the scientific python suite===&lt;br /&gt;
&lt;br /&gt;
For many scientific codes the packages ''numpy'', ''scipy'', ''matplotlib'', ''pandas'' and ''ipython'' are used. Except ''scipy'' all of these install very simply in a virtualenv using the ''pip install &amp;lt;package name&amp;gt;''. &lt;br /&gt;
&lt;br /&gt;
For installing ''scipy'' we first need to install ''numpy'' and then copy scinet's ''site.cfg'' (contains paths to the required libraries for scipy). &lt;br /&gt;
So before doing &amp;quot;pip install scipy&amp;quot; do &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /scinet/gpc/tools/Python/Python275-shared-intel/lib/python2.7/site-packages/numpy/distutils/site.cfg ~/.virtualenvs/myenv/lib/python2.7/site-packages/numpy/distutils/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then just do ''pip install scipy''&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS-by-pomes&amp;diff=9408</id>
		<title>HPSS-by-pomes</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS-by-pomes&amp;diff=9408"/>
		<updated>2018-08-31T23:32:18Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= '''Packing up large data sets and putting them on HPSS''' =&lt;br /&gt;
(Pomés group recommendations)&lt;br /&gt;
&lt;br /&gt;
HPSS has the following limitations:&lt;br /&gt;
&lt;br /&gt;
Hundreds of thousands of small files can be offloaded rapidly, but take weeks or months to recall&lt;br /&gt;
* No individual file can exceed 1 TB&lt;br /&gt;
* You must verify the integrity of your data throughout the data preparation and offload process&lt;br /&gt;
* With these limitations in mind, we have developed the following protocol for efficiently offloading data from scratch to HPSS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. Identify the subdirectories that contain &amp;gt; 1,000 files. ==&lt;br /&gt;
a. Create a directory called DU/ and place the following script in that directory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# du.sh&lt;br /&gt;
for i in $(ls ../); do&lt;br /&gt;
    n=$(find ../$i |wc -l)&lt;br /&gt;
    s=$(du -hs ../$i  | awk '{print $1}')&lt;br /&gt;
    echo &amp;quot;$i $n $s&amp;quot;&lt;br /&gt;
done &amp;gt; my.du.dirs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b. chmod +x du.sh&lt;br /&gt;
&lt;br /&gt;
c. nohup ./du.sh &amp;amp;&lt;br /&gt;
(This step may require hours or days to complete)&lt;br /&gt;
&lt;br /&gt;
d. Now my.du.dirs will contain a listing of the number of files and the total size of each directory.&lt;br /&gt;
&lt;br /&gt;
e. Identify the directories with many files and copy the DU/ directory there and then run du.sh again. Continue this process until you have a good understanding of which directories actually contain large numbers of files.&lt;br /&gt;
&lt;br /&gt;
== 2. Create tar files for these directories. ==&lt;br /&gt;
a. This should be scripted to ensure that your tarballs are completely written.&lt;br /&gt;
&lt;br /&gt;
b. Never script the removal of the original files.&lt;br /&gt;
&lt;br /&gt;
c. Here is an example script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;dir1 dir2 dir3&amp;quot;; do&lt;br /&gt;
    tar –cf ${i}.tar ${i}&lt;br /&gt;
    echo &amp;quot;tar $i returned $?&amp;quot;&lt;br /&gt;
done &amp;gt; my.tar.results&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
d. Note that the evaluation of $? must be done on the very next command after tar. Even inserting an additional echo statement will break the test.&lt;br /&gt;
&lt;br /&gt;
e. Once you are sure that the tar command was successful (return code equals zero), you should delete the originals. You should not script the deletion process because a typo in a rm –rf command can be very costly. If you must script a removal, it is best to do it like this:&lt;br /&gt;
&lt;br /&gt;
mkdir TRASH; for i in $list; do mv $i TRASH; done&lt;br /&gt;
&lt;br /&gt;
then inspect TRASH and remove it manually. Note that the above command could possibly be costly if you make a mistake since files may get overwritten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3. Now upload to HPSS using HSI. ==&lt;br /&gt;
You should have less than 10,000 files per TB of uploaded data. If that is not the case, then go back and pack up your data some more before proceeding.&lt;br /&gt;
&lt;br /&gt;
a. It is recommended that you have a new directory structure in HPSS for your fully packed up data. This is because you may have put other things on HPSS in the past and the creation of a clean directory structure is a good way to denote that this data is the final copy. Here, we use FULL_DATA/&lt;br /&gt;
&lt;br /&gt;
b. An example of an HPSS offload script follows:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J offload&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
## scratch files:  $SCRATCH/mydata&lt;br /&gt;
## HPSS files:     $ARCHIVE/FULL_DATA/mydata&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi  -v &amp;lt;&amp;lt;EOF1&lt;br /&gt;
mkdir -p FULL_DATA&lt;br /&gt;
cd FULL_DATA&lt;br /&gt;
cput -Rpuh $SCRATCH/mydata&lt;br /&gt;
end&lt;br /&gt;
EOF1&lt;br /&gt;
&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ];then&lt;br /&gt;
    echo 'HSI returned non-zero code.'&lt;br /&gt;
    /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
    exit $status&lt;br /&gt;
else&lt;br /&gt;
    echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c. After the above script has completed, check the output to ensure that your transfer was successful. If you had errors, or if it timed out, simply run the script again. If you continue to get the same errors, contact support@scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
== 4. Check HPSS data against the original ==&lt;br /&gt;
Now you must retrieve your data back to scratch so that you can check it against the original copy on scratch, which we have not yet deleted.&lt;br /&gt;
&lt;br /&gt;
a. Run diskUsage to ensure that you have space in your allocation to recall the data to scratch. If the recall will bring you close to your limit, advise your other group members how much space you will be recalling in case another user is also planning a large data recall.&lt;br /&gt;
&lt;br /&gt;
b. An example of an HPSS recall script follows:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J offload&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
## original scratch files:  $SCRATCH/mydata&lt;br /&gt;
## HPSS files:     $ARCHIVE/FULL_DATA/mydata&lt;br /&gt;
## new copy scratch files:  $SCRATCH/RETREIVED_MODULES/FULL_DATA/mydata&lt;br /&gt;
&lt;br /&gt;
mkdir -p $SCRATCH/RETREIVED_MODULES/FULL_DATA&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi  -v &amp;lt;&amp;lt;EOF1&lt;br /&gt;
lcd $SCRATCH/RETREIVED_MODULES/FULL_DATA/&lt;br /&gt;
cget -Rpuh $ARCHIVE/FULL_DATA/mydata&lt;br /&gt;
end&lt;br /&gt;
EOF1&lt;br /&gt;
&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ];then&lt;br /&gt;
    echo 'HSI returned non-zero code.'&lt;br /&gt;
    /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
    exit $status&lt;br /&gt;
else&lt;br /&gt;
    echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Run a md5sum over the entire directory ==&lt;br /&gt;
Now that you have the original and the cput/cget copy back from HPSS, run a md5sum over the entire directory. An example of a check is as follows. Run this script under nohup from one of the datamover nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
COMPUTE_DIFFERENCES=1&lt;br /&gt;
dir=$(pwd)&lt;br /&gt;
WAS=$SCRATCH/mydata&lt;br /&gt;
IS=$SCRATCH/RETREIVED_MODULES/FULL_DATA/mydata&lt;br /&gt;
if ((COMPUTE_DIFFERENCES)); then&lt;br /&gt;
    cd $WAS&lt;br /&gt;
    find . &amp;gt; ${dir}/tmp.was&lt;br /&gt;
    echo &amp;quot;find on was returned $?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    cd $IS&lt;br /&gt;
    find . &amp;gt; ${dir}/tmp.is&lt;br /&gt;
    echo &amp;quot;find on is returned $?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    cd $dir&lt;br /&gt;
&lt;br /&gt;
    changes=$(sort tmp.was &amp;gt;a ; sort tmp.is &amp;gt;b; diff a b)&lt;br /&gt;
    if ((changes!=0)); then&lt;br /&gt;
        echo &amp;quot;FILES DIFFER! Diff returned $changes&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for i in $(cat tmp.was); do&lt;br /&gt;
    if [ -f ${WAS}/${i} ]; then&lt;br /&gt;
        was=$(md5sum ${WAS}/$i |awk '{print $1}')&lt;br /&gt;
        is=$(md5sum ${IS}/$i |awk '{print $1}')&lt;br /&gt;
        same=$(echo $was $is | awk '{if($1==$2) print 1; else print 0}')&lt;br /&gt;
        if ((same==0)); then&lt;br /&gt;
            echo &amp;quot;FILES DIFFER -- $i $was $is&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;OK for $i&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a. when that is done, grep DIFFER on the output (in nohup.out since you ran this script under nohup). Any returned value means there is a problem. Contact scinet support.&lt;br /&gt;
&lt;br /&gt;
b. If everything was a success, you can delete all of the copies that you recalled from HPSS to scratch. You can also delete your original copy in scratch if you would like as you have a complete copy on scinet HPSS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Data Management|BACK TO Data Management]]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=R_Statistical_Package&amp;diff=9407</id>
		<title>R Statistical Package</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=R_Statistical_Package&amp;diff=9407"/>
		<updated>2018-08-31T23:30:55Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Running R on the GPC==&lt;br /&gt;
[http://www.r-project.org/ R] is powerful statistical and plotting software available on the [[GPC_Quickstart|GPC]] in the [[Software_and_Libraries|module]] R.  In fact, there are currently six R modules installed, 2.13.1, 2.14.1, 2.15.1, 3.0.0, 3.0.1 and 3.1.1.  While 2.15.1 is the default, we do recommend making the transition to a newer version, which you load by specifying the version number explicitly:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load intel R/3.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(The intel module is a prerequesite for the R module).  If you will be using Rmpi, you will need to load the openmpi module as well.&lt;br /&gt;
&lt;br /&gt;
Many optional packages are available for R which add functionality for specific domains; they are available through the [http://cran.r-project.org/mirrors.html Comprehensive R Archive Network (CRAN)]. &lt;br /&gt;
&lt;br /&gt;
R provides an easy way for users to install the libraries they need in their home directories rather than having them installed system-wide; there are so many  potential optional  packages for R people could potentially want, we recommend users who want additional packages to proceed this way.  This is almost certainly the easiest way to deal with the wide range of packages, ensure they're up to date, and ensure that users package choices don't conflict. &lt;br /&gt;
&lt;br /&gt;
In general, you can install those that you need yourself in your home directory; eg, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ R &lt;br /&gt;
&amp;gt; install.packages(&amp;quot;package-name&amp;quot;, dependencies = TRUE)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will download and compile the source for the packages you need in your home  directory under &amp;lt;tt&amp;gt;${HOME}/R/x86_64-unknown-linux-gnu-library/2.11/&amp;lt;/tt&amp;gt; (you can specify another directory with a lib= option.)  Then take a look at  help(&amp;quot;.libPaths&amp;quot;) to make sure that R knows where to look for  the packages you've compiled. Note that you must install packages with logged into a development node as write access to the library folder is not available to a standard node on the cluster. &lt;br /&gt;
&lt;br /&gt;
Note that during the installation you may get warnings that the packages cannot be installed in e.g. /scinet/gpc/Applications/R/3.0.1/lib64/R/bin/. But after those messages, R should have succeeded in installing the package into your home directory.&lt;br /&gt;
&lt;br /&gt;
=== Running serial R jobs ===&lt;br /&gt;
&lt;br /&gt;
As with all serial jobs, if your R computation do not use multiple cores, you should bundle them up so the 8 cores of a nodes are all performing work.  Examples of this can be found on the [[User_Serial]] page.&lt;br /&gt;
&lt;br /&gt;
== Saving images from R in compute jobs ==&lt;br /&gt;
&lt;br /&gt;
To make use of the graphics capability of R, R insists on having an X server running, even if you're just writing to a file.  There is no X server on the compute nodes, and you'd get a message like&lt;br /&gt;
&lt;br /&gt;
 unable to open connection to X11 display ''&lt;br /&gt;
&lt;br /&gt;
To get around this issue, you can run a 'virtual' X server on the compute nodes by adding the following commands at the start of your job script:&lt;br /&gt;
&lt;br /&gt;
 # Make virtual X server command called Xvfb available:&lt;br /&gt;
 module load Xlibraries&lt;br /&gt;
  &lt;br /&gt;
 # Select a unique display number:&lt;br /&gt;
 let DISPLAYNUM=$UID%65274&lt;br /&gt;
 export DISPLAY=&amp;quot;:$DISPLAYNUM&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 # Start the virtual X server&lt;br /&gt;
 Xvfb $DISPLAY -fp $SCINET_FONTPATH -ac 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&lt;br /&gt;
After this, run R or Rscript as usual. The virtual X server will be running in the background and will get killed which your job is done. Alternatively, you may want to kill it explicitly at the end of you job script  using &lt;br /&gt;
&lt;br /&gt;
 # Kill any remaining Xvfb server&lt;br /&gt;
 pkill -u $UID Xvfb&lt;br /&gt;
&lt;br /&gt;
== Rmpi (R with MPI) ==&lt;br /&gt;
&lt;br /&gt;
All the newer R installations on the GPC have Rmpi installed by default using OpenMPI.  Be sure to load the OpenMPI module if you wish to use Rmpi.&lt;br /&gt;
&lt;br /&gt;
=== Installing Rmpi, version 2.13.1 ===&lt;br /&gt;
&lt;br /&gt;
Version 2.13.1 does not have the Rmpi library as a standard package, which means you have to install it yourself if you are using that version.  The same is true if you want to use IntelMPI instead of OpenMPI.  &lt;br /&gt;
&lt;br /&gt;
Installing the Rmpi package can be a bit challenging, since some additional parameters need to be given to the installation, which contain the path to various header files and libraries. These paths differ depending on what [[GPC_MPI_Versions|MPI version]] you are using.   &lt;br /&gt;
&lt;br /&gt;
The various MPI versions on the GPC are loaded with the [[Software_and_Libraries|module]] command. So the first thing to do is to decide what mpi version to use (openmpi or intelmpi), and to type the corresponding &amp;quot;module load&amp;quot; command on the command-line (as well as in your jobs scripts).&lt;br /&gt;
&lt;br /&gt;
Because the MPI modules define all the paths in environment variables, the following line seem to work for installations of all openmpi versions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; install.packages(&amp;quot;Rmpi&amp;quot;,&lt;br /&gt;
                   configure.args =&lt;br /&gt;
                   c(paste(&amp;quot;--with-Rmpi-include=&amp;quot;,Sys.getenv(&amp;quot;SCINET_MPI_INC&amp;quot;),sep=&amp;quot;&amp;quot;),&lt;br /&gt;
                     paste(&amp;quot;--with-Rmpi-libpath=&amp;quot;,Sys.getenv(&amp;quot;SCINET_MPI_LIB&amp;quot;),sep=&amp;quot;&amp;quot;),&lt;br /&gt;
                     &amp;quot;--with-Rmpi-type=OPENMPI&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For intelmpi, you only need to change &amp;lt;tt&amp;gt;OPENMPI&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;MPICH2&amp;lt;/tt&amp;gt; in the last line.&lt;br /&gt;
&lt;br /&gt;
=== Running Rmpi ===&lt;br /&gt;
&lt;br /&gt;
To start using R with Rmpi, make sure you have all require modules loaded (e.g. &amp;lt;tt&amp;gt;module load intel openmpi R/2.14.1&amp;lt;/tt&amp;gt;), then launch it with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpirun -np 1 R --no-save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which starts one master mpi process, but starts up the infrastructure to be able to spawn additional processes.&lt;br /&gt;
&lt;br /&gt;
== Creating an R cluster ==&lt;br /&gt;
&lt;br /&gt;
The 'parallel' package allows you to use R to launch individual serial subjobs across multiple nodes.  This section describes how this is accomplished.&lt;br /&gt;
&lt;br /&gt;
=== Creating your Rscript wrapper ===&lt;br /&gt;
&lt;br /&gt;
The first thing to do is create a wrapper for Rscript.  This needs to be done because the R module needs to be loaded on all nodes, but the submission script only loads modules on the head node of the job.  The wrapper script, let's call it MyRscript.sh, is short:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
module load intel/13.1.1 R/3.0.1&lt;br /&gt;
${SCINET_R_BIN}/Rscript --no-restore &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;--no-restore&amp;quot; flag prevents Rscript from loading your &amp;quot;workspace image&amp;quot;, if you have one saved.  Loading the image causes problems for the cluster.&lt;br /&gt;
&lt;br /&gt;
Once you've created your wrapper, make it executable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ chmod u+x MyRscript.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Your wrapper is now ready to be used.&lt;br /&gt;
&lt;br /&gt;
=== The cluster R code ===&lt;br /&gt;
The R code which we will run consists of two parts, the code which launches the cluster, and does pre- and post-analysis, and the code which is run on the individual cluster &amp;quot;nodes&amp;quot;.  Here is some code which demonstrates this functionality.  Let's call it MyClusterCode.R.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################&lt;br /&gt;
#&lt;br /&gt;
#  worker code&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# first define the function which will be run on all the cluster nodes.  This is just a test function.  &lt;br /&gt;
# Put your real worker code here.&lt;br /&gt;
testfunc &amp;lt;- function(a) {&lt;br /&gt;
&lt;br /&gt;
  # this part is just to waste time&lt;br /&gt;
  b &amp;lt;- 0&lt;br /&gt;
  for (i in 1:10000) {&lt;br /&gt;
      b &amp;lt;- b + 1&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  s &amp;lt;- Sys.info()['nodename']&lt;br /&gt;
  return(paste0(s, &amp;quot; &amp;quot;, a[1], &amp;quot; &amp;quot;, a[2]))&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
######################################################&lt;br /&gt;
#&lt;br /&gt;
#  head node code&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Create a bunch of index pairs to feed to the worker function.  These could be parameters,&lt;br /&gt;
# or whatever your code needs to vary across jobs.  Note that the worker function only &lt;br /&gt;
# takes a single argument; each entry in the list must contain all the information &lt;br /&gt;
# that the function needs to run.  In this example, each entry contains a list which&lt;br /&gt;
# contains two pieces of information, a pair of indices.&lt;br /&gt;
indexlist &amp;lt;- list()&lt;br /&gt;
index &amp;lt;- 1&lt;br /&gt;
for (i in 1:10) {&lt;br /&gt;
  for (j in 1:10) {&lt;br /&gt;
     indexlist[index] &amp;lt;- list(c(i,j))&lt;br /&gt;
     index &amp;lt;- index +1&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
# Now set up the cluster.&lt;br /&gt;
&lt;br /&gt;
# First load the parallel library.&lt;br /&gt;
library(parallel)&lt;br /&gt;
&lt;br /&gt;
# Next find all the nodes which the scheduler has given to us.&lt;br /&gt;
# These are listed in the file which is indicated by the PBS_NODEFILE&lt;br /&gt;
# environment variable.&lt;br /&gt;
nodefile &amp;lt;- Sys.getenv(&amp;quot;PBS_NODEFILE&amp;quot;)&lt;br /&gt;
hostnames &amp;lt;- readLines(nodefile)&lt;br /&gt;
&lt;br /&gt;
# Now launch the cluster, using the list of nodes and our Rscript&lt;br /&gt;
# wrapper.&lt;br /&gt;
cl &amp;lt;- makePSOCKcluster(names = hostnames, rscript = &amp;quot;/path/to/your/MyRscript.sh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Now run the worker code, using the parameter list we created above.&lt;br /&gt;
result &amp;lt;- clusterApplyLB(cl, indexlist, testfunc)&lt;br /&gt;
&lt;br /&gt;
# The results of all the jobs will now be put in the 'result' variable,&lt;br /&gt;
# in the order they were specified in the 'indexlist' variable.&lt;br /&gt;
&lt;br /&gt;
# Don't forget to stop the cluster when you're finished.&lt;br /&gt;
stopCluster(cl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can, of course, add any post-processing code you need to the above code.&lt;br /&gt;
&lt;br /&gt;
=== Submitting an R cluster job ===&lt;br /&gt;
You are now ready to submit your job to the GPC queue.  The submission script is like most others:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=3:ppn=8                                                         &lt;br /&gt;
#PBS -l walltime=5:00:00&lt;br /&gt;
#PBS -N MyRCluster&lt;br /&gt;
&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
module load intel/13.1.1 R/3.0.1&lt;br /&gt;
${SCINET_R_BIN}/Rscript --no-restore MyClusterCode.R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Be sure to use whatever number of nodes, length of time, etc., is appropriate for your job.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Phi&amp;diff=9406</id>
		<title>Phi</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Phi&amp;diff=9406"/>
		<updated>2018-08-31T23:29:26Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:Xeon_phi.jpg|center|250px|thumb]][[Image:NVIDIA-Tesla-K20X.jpg|center|250px|thumb]]&lt;br /&gt;
|name=Intel Xeon Phi / NVIDIA Tesla K20 &lt;br /&gt;
|installed=April 2013&lt;br /&gt;
|operatingsystem= Linux Centos 6.4&lt;br /&gt;
|loginnode= gravity01 &lt;br /&gt;
|nnodes=1&lt;br /&gt;
|rampernode=32 GB&lt;br /&gt;
|corespernode=8 with Xeon Phi &amp;amp; K20&lt;br /&gt;
|interconnect=DDR Infiniband&lt;br /&gt;
|vendorcompilers=nvcc,pgcc,icc,gcc&lt;br /&gt;
|queuetype=none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a single test node, for investigating new accelerator technologies. It consists of a single x86_64 node with one 8-core Intel Sandybridge Xeon  &lt;br /&gt;
E5-2650 2.0GHz CPU with 32GB of RAM. It has a single NVIDIA Tesla K20 GPU with CUDA Capability 3.0 (Kepler) with 2496 CUDA Cores and 5 GB of RAM as well as a single Intel Xeon Phi 3120A with 57 &lt;br /&gt;
1.1 GHz cores and 6GB of RAM. The node is interconnected to the rest of the clusters with DDR Infiniband and mounts the regular SciNet GPFS filesystems.  &lt;br /&gt;
&lt;br /&gt;
=== Login ===&lt;br /&gt;
&lt;br /&gt;
First login via ssh with your scinet account at '''&amp;lt;tt&amp;gt;login.scinet.utoronto.ca&amp;lt;/tt&amp;gt;''', and from there you can proceed to '''&amp;lt;tt&amp;gt;gravity01&amp;lt;/tt&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Queue ===&lt;br /&gt;
&lt;br /&gt;
As this is a single node users are expected to use it in a &amp;quot;friendly&amp;quot; manner as this system is not setup for production&lt;br /&gt;
usage, and primarily for investigating new technologies run times are limited to under 4 hours.&lt;br /&gt;
To access the node you need to use the queue, similar to the standard ARC and GPC compute nodes,&lt;br /&gt;
however with a maximum walltime of 4 hours.&lt;br /&gt;
&lt;br /&gt;
For an interactive job use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub -l nodes=1:ppn=8,walltime=1:00:00 -q arcX -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
The same software installed on the GPC is available on '''&amp;lt;tt&amp;gt;arcX&amp;lt;/tt&amp;gt;''' using the modules framework. &lt;br /&gt;
See '''[[GPC_Quickstart#Modules_and_Environment_Variables | here]]''' for full details.&lt;br /&gt;
&lt;br /&gt;
== NVIDIA Tesla K20 ==&lt;br /&gt;
&lt;br /&gt;
See the '''[[ Gravity | Gravity ]]''' wiki page for full details of the available CUDA and OpenCL compilers and modules. To&lt;br /&gt;
use all the K20 (Kepler) features a minimum of CUDA 5.0 is required. Cuda/6.5 is recommended for the K20.&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/4.8.1 cuda/6.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here, gcc is loaded because it is a prerequisite of the cuda module.&lt;br /&gt;
&lt;br /&gt;
You will have to let the cuda compiler know about the capabilities of the Kepler graphics card by supplying the flag &lt;br /&gt;
&amp;lt;tt&amp;gt;-arch=sm_30&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;-arch=sm_35&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Driver Version ===&lt;br /&gt;
&lt;br /&gt;
The current NVIDIA driver version for the K20 is 340.32&lt;br /&gt;
&lt;br /&gt;
== Xeon Phi ==&lt;br /&gt;
&lt;br /&gt;
=== Compilers ===&lt;br /&gt;
The Xeon Phi uses the standard intel compilers, however requires at least version 13.1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intel/14.0.0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MPI ===&lt;br /&gt;
&lt;br /&gt;
IntelMPI also has Xeon Phi support&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intelmpi/4.1.1.036&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': Be sure to use '''mpiifort''' for compiling native MIC Fortran code as the '''mpif77,mpif90''' scripts ignore the -mmic flags and will produce host only code.&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
&lt;br /&gt;
The Intel Cluters Tools such as vtune amplifier and inspector are available for the Xeon Phi by&lt;br /&gt;
loading the following modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load inteltools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenCL ===&lt;br /&gt;
&lt;br /&gt;
OpenCL version 1.2 is available for the Xeon Phi on '''&amp;lt;tt&amp;gt;arcX&amp;lt;/tt&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/opt/intel/opencl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Direct Access ===&lt;br /&gt;
&lt;br /&gt;
The Xeon Phi can be accessed directly from the host node by &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh mic0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shared Filesystem ===&lt;br /&gt;
&lt;br /&gt;
The host node '''arc09''' mounts the standard SciNet filesystems, i.e. $HOME and $SCRATCH, however to share&lt;br /&gt;
files between the host and Xeon Phi use /localscratch/$HOME which shows up as $HOME on &amp;quot;mic0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
[http://software.intel.com/en-us/articles/building-a-native-application-for-intel-xeon-phi-coprocessors Building Native for MIC ] &lt;br /&gt;
&lt;br /&gt;
[http://www.tacc.utexas.edu/user-services/user-guides/stampede-user-guide#mic TACC Stampede MIC Info ]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Using_Signals&amp;diff=9405</id>
		<title>Using Signals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Using_Signals&amp;diff=9405"/>
		<updated>2018-08-31T23:28:56Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
In unix/linux one can send ''signals'' to a program or a script. Some&lt;br /&gt;
common signals are:&lt;br /&gt;
{|&lt;br /&gt;
 ! {{Hl2}}|Signal !! !! !! !! {{Hl2}}| Meaning !! !! !! !! {{Hl2}}| Can be trapped?&lt;br /&gt;
 |-&lt;br /&gt;
 | HUP  || || || || Terminal log-out || || || ||Yes&lt;br /&gt;
 |-&lt;br /&gt;
 | INT  || || || || Interrupt signal (Ctrl-C is pressed)  || || || ||Yes&lt;br /&gt;
 |- &lt;br /&gt;
 | TERM || || || || Termination of the process (as if 'kill' was called) || || || || Yes&lt;br /&gt;
 |- &lt;br /&gt;
 | KILL || || || || Kill the process (as if 'kill -9' was called) || || || || No&lt;br /&gt;
 |- &lt;br /&gt;
 | STOP || || || || Suspend the process || || || ||No&lt;br /&gt;
 |- &lt;br /&gt;
 | CONT || || || || Resume the process || || || ||Yes&lt;br /&gt;
 |- &lt;br /&gt;
 | USR1 || || || || Unspecified user signal (can be given with 'kill -USR1') || || || ||Yes&lt;br /&gt;
 |-&lt;br /&gt;
 | USR2 || || || || Unspecified user signal (can be given with 'kill -USR2') || || || ||Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
From the node on which a a process is running, signals can be given using &lt;br /&gt;
&amp;lt;pre&amp;gt; $ kill -[SIGNAL] [PID]&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
On the GPC, you can pass a signal to a running job using&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ qsig -s [SIGNAL] [JOBID]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
So for example, you could suspend the process running under job id 314159 by &amp;lt;tt&amp;gt;qsig -s STOP 314159&amp;lt;/tt&amp;gt;, and resume it using &amp;lt;tt&amp;gt;qsig -s CONT 314159&amp;lt;/tt&amp;gt; (note that the wall clock keeps ticking!).&lt;br /&gt;
&lt;br /&gt;
For qsig to work for signals whose default action is to kill your job (such as HUP, INT, TERM, and, perhaps surprisingly, USR1 and USR2), your job script should either trap these explicitly (see below), or contain a line &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 trap : [LIST-OF-SIGNALS-TO-BE-PASSED] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(e.g. &amp;lt;tt&amp;gt;trap : USR1 USR2&amp;lt;/tt&amp;gt;) before the application that traps the signal is started.&lt;br /&gt;
Note that he spaces surrounding the colon are essential here, because the colon is actually a bash command (one that does nothing).&lt;br /&gt;
&lt;br /&gt;
Signals can also be given by the system. One important instance of system signals is that '''on SciNet, a TERM signal is sent to a jobs whose requested time is over,''' after which the job has about 2 minutes to clean up. &lt;br /&gt;
&lt;br /&gt;
With the techniques explained below, a program or script can be set up to listen for a particular kind of signal, except for KILL and STOP (which always kill and suspend a process, respectively). When it receive a signal of that kind, its execution is interrupted and a call is made to a function, specified&lt;br /&gt;
earlier in the program. It is up to the program or script what this signal handling function does but it is a good idea to make the action appropriate for the event that triggers the signal. For instance, a TERM signal should be handled as a request to terminate the application. &lt;br /&gt;
The user signals USR1 and USR2 do not have a pre-designated meaning and can be used for application-specific actions such as checkpointing.&lt;br /&gt;
&lt;br /&gt;
==Trapping signals in bash scripts==&lt;br /&gt;
&lt;br /&gt;
To trap signals in a bash script, one has to bind a specific&lt;br /&gt;
signal to a command or function with the &amp;lt;tt&amp;gt;trap&amp;lt;/tt&amp;gt;&lt;br /&gt;
command. For example,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;  &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
trap &amp;quot;echo Term was trapped.; exit&amp;quot; TERM&lt;br /&gt;
for ((i=0;i&amp;lt;60;i++)) do&lt;br /&gt;
  echo $i&lt;br /&gt;
  sleep 1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Running this script in the background and sending it a TERM command ('&amp;lt;tt&amp;gt;kill -TERM [pid]&amp;lt;/tt&amp;gt;') will cause the message '&amp;lt;tt&amp;gt;Term was trapped.&amp;lt;/tt&amp;gt;' to be printed. Notes:&lt;br /&gt;
* The trapped command has to use '&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;' explicitly to stop the script's execution.  &lt;br /&gt;
* The '&amp;lt;tt&amp;gt;sleep&amp;lt;/tt&amp;gt;' command in bash cannot be interrupted, which is why the script contains a succession of 1 second '&amp;lt;tt&amp;gt;sleep&amp;lt;/tt&amp;gt;'s.&lt;br /&gt;
&lt;br /&gt;
Another useful example of signal trapping in a bash script is given on the wiki page about &lt;br /&gt;
[[User_Ramdisk | using ramdisk]].&lt;br /&gt;
&lt;br /&gt;
==Trapping signals in C==&lt;br /&gt;
&lt;br /&gt;
To trap signals in a c program, one has to include the&lt;br /&gt;
&amp;lt;tt&amp;gt;signal.h&amp;lt;/tt&amp;gt; header file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and provide a signal handler function&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void term_trap(int sig) &lt;br /&gt;
{&lt;br /&gt;
   /* do something */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is linked to the specific signal somewhere as follows:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
signal(SIGTERM, term_trap);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the names of signals are prepended with &amp;quot;&amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;&amp;quot; in &lt;br /&gt;
&amp;lt;tt&amp;gt;signal.h&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A minimal example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void term_trap(int sig) &lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;Term was trapped.\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() &lt;br /&gt;
{&lt;br /&gt;
    signal(SIGTERM, term_trap);&lt;br /&gt;
    sleep(60);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the names of the signals are prepended with &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; in C.&lt;br /&gt;
To test this program:&lt;br /&gt;
* save the above code as &amp;lt;tt&amp;gt;sigex.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
* compile: &amp;lt;tt&amp;gt;icc -O3 -xHost sigex.c -o sigex&amp;lt;/tt&amp;gt;&lt;br /&gt;
* run: &amp;lt;tt&amp;gt;sigex&amp;amp;&amp;lt;/tt&amp;gt; &lt;br /&gt;
* note the pid (process idenitfier) &lt;br /&gt;
* you can then give the process the term signal with &amp;lt;tt&amp;gt;kill -TERM [pid]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Trapping signals in C++==&lt;br /&gt;
&lt;br /&gt;
The same method as for a C program works in C++, except the header file is '&amp;lt;tt&amp;gt;csignal&amp;lt;/tt&amp;gt;'. For example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;csignal&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void term_trap(int sig) &lt;br /&gt;
{&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Term was trapped.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() &lt;br /&gt;
{&lt;br /&gt;
    signal(SIGTERM, term_trap);&lt;br /&gt;
    sleep(60);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trapping signals in Fortran==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, signal handling in fortran is not standard, and different compilers have different ways of doing this. &lt;br /&gt;
Below, examples are given for the three fortran compilers available on SciNet: ifort, gfortran, and xlf. These examples were designed such that even though the ways to register the handler differ, the signal handlers themselves are always the same.&lt;br /&gt;
&lt;br /&gt;
'''''ifort'''''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
C IFORT SIGNAL TRAPPING EXAMPLE&lt;br /&gt;
      USE IFPORT&lt;br /&gt;
      EXTERNAL TRAP_TERM&lt;br /&gt;
      INTEGER  TRAP_TERM&lt;br /&gt;
      INTEGER  ERR&lt;br /&gt;
          ERR = SIGNAL (SIGTERM, TRAP_TERM, -1)&lt;br /&gt;
          CALL SLEEP (60)&lt;br /&gt;
      END&lt;br /&gt;
C SIGNAL HANDLER FUNCTION&lt;br /&gt;
      FUNCTION TRAP_TERM (SIG_NUM)&lt;br /&gt;
      INTEGER TRAP_TERM&lt;br /&gt;
      INTEGER SIG_NUM&lt;br /&gt;
          PRINT *, &amp;quot;Term was trapped.&amp;quot;&lt;br /&gt;
          TRAP_TERM = 1&lt;br /&gt;
      END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''gfortran'''''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
C GFORTRAN SIGNAL TRAPPING EXAMPLE&lt;br /&gt;
      INTRINSIC SIGNAL&lt;br /&gt;
      INTEGER SIGTERM&lt;br /&gt;
      PARAMETER (SIGTERM = 15)&lt;br /&gt;
      EXTERNAL TRAP_TERM&lt;br /&gt;
          CALL SIGNAL (SIGTERM, TRAP_TERM)&lt;br /&gt;
          CALL SLEEP (60)&lt;br /&gt;
      END&lt;br /&gt;
C SIGNAL HANDLER FUNCTION&lt;br /&gt;
      FUNCTION TRAP_TERM (SIG_NUM)&lt;br /&gt;
      INTEGER TRAP_TERM&lt;br /&gt;
      INTEGER SIG_NUM&lt;br /&gt;
          PRINT *, &amp;quot;Term was trapped.&amp;quot;&lt;br /&gt;
          TRAP_TERM = 1&lt;br /&gt;
      END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note: the SIGNAL function is broken in the official gfortran versions 4.6.0 and 4.6.1, but this bug has been fixed in SciNet's gcc modules.&lt;br /&gt;
&lt;br /&gt;
'''''xlf'''''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
C XLF SIGNAL TRAPPING EXAMPLE&lt;br /&gt;
      INCLUDE 'fexcp.h'&lt;br /&gt;
      INTEGER SIGTERM&lt;br /&gt;
      PARAMETER (SIGTERM = 15)&lt;br /&gt;
      EXTERNAL TRAP_TERM&lt;br /&gt;
          CALL SIGNAL (SIGTERM, TRAP_TERM)&lt;br /&gt;
          CALL SLEEP (60)&lt;br /&gt;
      END&lt;br /&gt;
C SIGNAL HANDLER FUNCTION&lt;br /&gt;
      FUNCTION TRAP_TERM (SIG_NUM)&lt;br /&gt;
      INTEGER TRAP_TERM&lt;br /&gt;
      INTEGER SIG_NUM&lt;br /&gt;
          PRINT *, &amp;quot;Term was trapped.&amp;quot;&lt;br /&gt;
          TRAP_TERM = 1&lt;br /&gt;
      END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--Rzon 30 June 2010&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Performance_And_Debugging_Tools:_GPC&amp;diff=9404</id>
		<title>Performance And Debugging Tools: GPC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Performance_And_Debugging_Tools:_GPC&amp;diff=9404"/>
		<updated>2018-08-31T23:28:19Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Memory Profiling ==&lt;br /&gt;
&lt;br /&gt;
===PurifyPlus===&lt;br /&gt;
This is IBM/Rational's set of tools for memory profiling and code testing.  Specifically, the tools are:  purify, purecov and quantify.&lt;br /&gt;
&lt;br /&gt;
In order to gain access to these tools, you need to source the script that defines them to your shell:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tt&amp;gt; source /scinet/gpc/Rational/purifyplus_setup.sh &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The documentation for getting started with these tools is in the directory:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt; /scinet/gpc/Rational/releases/PurifyPlus.7.0.1/docs/pdf &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or here: [http://support.scinet.utoronto.ca/Manuals/PurifyPlusGettingStarted_en.pdf PurifyPlus Getting Started].&lt;br /&gt;
&lt;br /&gt;
===Valgrind===&lt;br /&gt;
&lt;br /&gt;
Valgrind http://valgrind.org/ is a suite of tools for debugging and profiling programs especially&lt;br /&gt;
useful for finding memory problems, such as memory leaks and segfaults. To use it on the GPC &lt;br /&gt;
you must first load the module valgrind.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt; module load valgrind &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In serial valgrind can simply by run as follows, with no need to recompile your binary&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;valgrind --tool=memcheck ./a.out  &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
there are many useful flags such as --leak-check=yes and --show-reachable=yes that&lt;br /&gt;
can be found by running valgrind --help on consulting the man pages.&lt;br /&gt;
&lt;br /&gt;
Valgrind can also be used in parallel with MPI as well, http://valgrind.org/docs/manual/mc-manual.html#mc-manual.mpiwrap&lt;br /&gt;
in a similar fashion, however a library needs to preloaded first.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt; LD_PRELOAD=${SCINET_VALGRIND_LIB}/valgrind/libmpiwrap-amd64-linux.so mpirun -np 2 valgrind --tool=memcheck ./a.out &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Besides being a extremely good at [[Performance_And_Debugging_Tools:_GPC#Memory_Profiling | finding memory problems]], [http://valgrind.org/ valgrind] comes with a tool called [http://valgrind.org/docs/manual/cg-manual.html cachegrind] which can find cache use problems in your code; its use is described in our [[Introduction_To_Performance#cachegrind_.28Memory_use_analysis:_GPC.29 | Intro To Performance]].&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
&lt;br /&gt;
===gdb===&lt;br /&gt;
&lt;br /&gt;
[http://www.gnu.org/software/gdb/ GDB] is solid source-language level serial debugger.  [https://support.scinet.utoronto.ca/wiki/images/2/27/Snugdebug.pdf This SNUG TechTalk from Nov 2010] introduces debugging with gdb.    gdb will debug code compiled with both intel and gcc compilers.   Use &amp;lt;tt&amp;gt;module load gdb&amp;lt;/tt&amp;gt; to ensure you are using the most recent version of gdb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;gdb -tui&amp;lt;/tt&amp;gt; launches a text-based interface that functions a bit like a gui for debugging code, and can be handy.&lt;br /&gt;
&lt;br /&gt;
===idbc===&lt;br /&gt;
&lt;br /&gt;
idb is the Intel debugger; it will work with code compiled with both intel and gcc compilers.   Use &amp;lt;tt&amp;gt;module load intel&amp;lt;/tt&amp;gt; to ensure the debugger is in your path.   The command-line debugger is launched by invoking &amp;lt;tt&amp;gt;idbc&amp;lt;/tt&amp;gt;; launching &amp;lt;tt&amp;gt;idb&amp;lt;/tt&amp;gt; will start a graphical, [http://www.eclipse.org/ Eclipse]-based environment, which can be quite slow over a network connection.   If you want nonetheless want to use the graphical interface, ensure that you have Java in your enviroment; ues &amp;lt;tt&amp;gt;module load java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===ddd===&lt;br /&gt;
&lt;br /&gt;
[http://www.gnu.org/software/ddd/ Data Display Debugger (ddd)] is a graphical wrapper to the gdb or idb debuggers.  It is quite handy for debugging scientific programs as it has fairly sophisticated data-plotting features where array variables can be plotted dynamically as the program progresses.  As with &amp;lt;tt&amp;gt;idb&amp;lt;/tt&amp;gt;, however, using the graphical interface over a network connection can be quite laggy and slow.   Use &amp;lt;tt&amp;gt;module load ddd&amp;lt;/tt&amp;gt; to load ddd into your environment.&lt;br /&gt;
&lt;br /&gt;
===ddt===&lt;br /&gt;
&lt;br /&gt;
ddt is Allinea's graphical parallel debugger, in the ddt module. Highly recommended! Use &amp;lt;tt&amp;gt;module load ddt&amp;lt;/tt&amp;gt; to load ddt into your environment.&lt;br /&gt;
&lt;br /&gt;
==Performance Profiling==&lt;br /&gt;
&lt;br /&gt;
===gprof===&lt;br /&gt;
&lt;br /&gt;
[http://sourceware.org/binutils/docs-2.19/gprof/index.html gprof] is a very useful tool for finding out where a program is spending its time; its use is described in our [[Introduction_To_Performance#gprof_.28profiling:_everywhere.29 | Intro To Performance]].&lt;br /&gt;
&lt;br /&gt;
===Open|SpeedShop===&lt;br /&gt;
&lt;br /&gt;
[http://www.openspeedshop.org OpenSpeedshop] is a tool for performing sampling and MPI tracing of a program on the GPC.  It's use is outlined in our [[Introduction_To_Performance#OpenSpeedShop_.28profiling.2C_MPI_tracing:_GPC.29 | Intro to Performance]].   It is right now compiled for use only with openmpi and gcc-4.4; to use it,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc openmpi openspeedshop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run a sampling experiment with the program, run the program through openspeedshop then use the same program to view the results:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ openss -f &amp;quot;./a.out&amp;quot; pcsamp&lt;br /&gt;
[program runs as usual, outputs extra performance data at the end]&lt;br /&gt;
$ openss -f [experimentname].openss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can also trace MPI calls and give detailed statistics about the time spent in MPI routines by process number; to test this on a run done on one of the devel nodes,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load gcc openmpi/1.3.2-gcc-v4.4.0-ofed openspeedshop&lt;br /&gt;
$ openss -f &amp;quot;mpirun -np 6 ./a.out&amp;quot; mpit&lt;br /&gt;
[program runs as usual, outputs extra performance data at the end]&lt;br /&gt;
$ openss -f [experimentname].openss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
this can also be used to perform tracing on batch jobs by ensuring &amp;lt;tt&amp;gt;module load gcc openmpi/1.3.2-gcc-v4.4.0-ofed openspeedshop&amp;lt;/tt&amp;gt; is in your &amp;lt;tt&amp;gt;.bashrc&amp;lt;/tt&amp;gt; and mpirun-ing the program as shown above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scalasca===&lt;br /&gt;
&lt;br /&gt;
[http://www.scalasca.org/ Scalasca] is a sophisticated tool for analyzing performance and finding common performance problems.  We describe it in our [[Introduction_To_Performance#Scalasca_.28profiling.2C_tracing:_TCS.2C_GPC.29 | Intro to Performance]].&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Ansys&amp;diff=9403</id>
		<title>Ansys</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Ansys&amp;diff=9403"/>
		<updated>2018-08-31T23:27:31Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [http://www.ansys.com/ Ansys] engineering simulation tools are installed on SciNet.&lt;br /&gt;
&lt;br /&gt;
=Getting a license=&lt;br /&gt;
&lt;br /&gt;
Licenses are provided by [http://www.cmc.ca/ CMC Microsystems]. Canadian students and faculty&lt;br /&gt;
can register at https://www.cmc.ca/en/MyAccount/GetAccount.aspx&lt;br /&gt;
&lt;br /&gt;
Once you have an account, you have to contact CMC and tell them you want to use the Ansys tools on SciNet,&lt;br /&gt;
and give them your SciNet username.&lt;br /&gt;
&lt;br /&gt;
=Ansys 18.1=&lt;br /&gt;
&lt;br /&gt;
 module load ANSYS/18.1&lt;br /&gt;
&lt;br /&gt;
Programs available:&lt;br /&gt;
&lt;br /&gt;
* fluent&lt;br /&gt;
* ansysedt&lt;br /&gt;
* mapdl&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==Running Fluent==&lt;br /&gt;
&lt;br /&gt;
Example submission script for a job running on 4 nodes, with max walltime of 24 hours:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=4:ppn=8,walltime=24:00:00&lt;br /&gt;
&lt;br /&gt;
module load ANSYS/18.1 extras&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
INPUTFILE=input.jou&lt;br /&gt;
fluent 2ddp -t &amp;quot;$PBS_NP&amp;quot; -cnf=&amp;quot;$PBS_NODEFILE&amp;quot; -mpi=intel -pib -pcheck -g -i &amp;quot;$INPUTFILE&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Niagara&amp;diff=9402</id>
		<title>Niagara</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Niagara&amp;diff=9402"/>
		<updated>2018-08-31T23:27:13Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Information on the Niagara supercomputer can be found on&lt;br /&gt;
https://docs.computecanada.ca/wiki/Niagara/en.&lt;br /&gt;
&lt;br /&gt;
Les informations sur le superordinateur Niagara se trouvent sur&lt;br /&gt;
https://docs.computecanada.ca/wiki/Niagara/fr.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=GPU_Devel_Nodes&amp;diff=9401</id>
		<title>GPU Devel Nodes</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=GPU_Devel_Nodes&amp;diff=9401"/>
		<updated>2018-08-31T23:26:46Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#772222&amp;quot;&amp;gt;The ARC GPU have been decommisioned. The head node, arc01, is still up, however for GPU computations, users are encouraged to move to the [[Gravity]] cluster.  For visualization, new [[Visualization Nodes]] are being setup.&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Using_MySQL_on_the_GPC&amp;diff=9400</id>
		<title>Using MySQL on the GPC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Using_MySQL_on_the_GPC&amp;diff=9400"/>
		<updated>2018-08-31T23:26:09Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''TechTalk by Ramses van Zon (SciNet)''&lt;br /&gt;
&lt;br /&gt;
''Oct 16, 2013''&lt;br /&gt;
&lt;br /&gt;
MySQL is a relational database management system (RDBMS) that runs as a server providing multi-user access to a number of databases. It is often used by free-software/open-software projects requiring RDBMS. Running a single relational database version for all of SciNet is not a good fit, as the needs of our many users could easily conflict and uptime of the server could not always be guarranteed.&lt;br /&gt;
&lt;br /&gt;
It is however possible to setup MySQL in user space, using a few homebrewed scripts to help resolve some of the common issues with running multiple database servers. In this TechTalk, we will show how you can use MySQL in user space on the General Purpose Cluster for short tests on the devel node, within a single node compute job, or even spanning multiple nodes.&lt;br /&gt;
&lt;br /&gt;
''Note: this is the content of the slides used in the TechTalk. This is also available in [[Media:Ttmysql.pdf|pdf format]].''&lt;br /&gt;
&lt;br /&gt;
=== Data storage types ===&lt;br /&gt;
&lt;br /&gt;
Data in all shapes and forms:&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Standard binary data (hdf5, netcdf, grib2, jpg, pdb, …)&lt;br /&gt;
* Standard/semi-structured text data (xml, json, csv, fasta)&lt;br /&gt;
* Proprietary binary data format&lt;br /&gt;
* Unstructured text data (logs, output and error files)&lt;br /&gt;
* '''Databases'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Databases ===&lt;br /&gt;
&lt;br /&gt;
'''Database:''' an organized collection of data for storing, managing and retrieving information&lt;br /&gt;
&lt;br /&gt;
* Often back-end to a website or application.&lt;br /&gt;
* Typically structured as tables.&lt;br /&gt;
* Each row expresses a ''relation'' between columns.&lt;br /&gt;
* SQL: Structured Query Language.&lt;br /&gt;
* Implementations often have access control on databases and tables.&lt;br /&gt;
&lt;br /&gt;
Exception to this structure: ''NoSQL''. Not in this TechTalk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Why use a relational database? ===&lt;br /&gt;
&lt;br /&gt;
* You like/are familiar with SQL.&lt;br /&gt;
* Application relies on a RDBMS.&lt;br /&gt;
* You want to be able express complex queries, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;List the directories of stored simulations in which the pressure was between 1 and 2 atm and the number of water molecules was between 4,000 and 50,000.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;SELECT B.directory FROM simulations_attributes A &lt;br /&gt;
INNER JOIN simulation_paths B WHERE&lt;br /&gt;
A.simulation_id=B.simulation_id AND &lt;br /&gt;
A.pressure&amp;gt;=1 AND A.pressure&amp;lt;=2 AND &lt;br /&gt;
A.molecules&amp;gt;=4000 AND A.molecules&amp;lt;=50000;&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Note that you rarely store your binary data in the DB,&amp;lt;br /&amp;gt;but you could store paths and filenames with metadata.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Some Relational Database Management Systems ===&lt;br /&gt;
&lt;br /&gt;
* Commercial:&lt;br /&gt;
** Oracle Database&lt;br /&gt;
** IBM DB2&lt;br /&gt;
** Microsoft SQL Server&lt;br /&gt;
** SAP Sybase&lt;br /&gt;
* Open Source:&lt;br /&gt;
** postgreSQL&lt;br /&gt;
** SQLite&lt;br /&gt;
** '''MySQL'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is MySQL? ===&lt;br /&gt;
&lt;br /&gt;
* Open-source RDBMS&lt;br /&gt;
* Was owned by MySQL AB, now by Oracle&lt;br /&gt;
* Often used by Free-software/open-software projects requiring RDBMS&lt;br /&gt;
* Command-line interface (&amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Interfaces for C, python, php, perl, R, …&lt;br /&gt;
* Third party graphical interfaces&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Typical MySQL Deployment ===&lt;br /&gt;
&lt;br /&gt;
* Database server runs as root on some server&lt;br /&gt;
* A ’root’ user can setup privileges on the databases and tables&lt;br /&gt;
* Application/web service runs on client (sometimes server=client)&lt;br /&gt;
* and contacts the server as a non-root user through a port or socket.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Why This Setup Doesn’t Work on SciNet: ===&lt;br /&gt;
&lt;br /&gt;
* Don’t want to maintain a database server accessible to 1000+ users:&lt;br /&gt;
** '''Scalability:''' Many nodes may try to access DB&lt;br /&gt;
** '''Conflicts:''' Users may run same application, access the same databases/tables.&lt;br /&gt;
** '''Security:''' What if privileges are not set correctly?&lt;br /&gt;
** '''Stability:''' If DB goes down, or becomes slow, all jobs go with it.&lt;br /&gt;
** '''File systems:''' RDBMS may not play nice with file system (iops-heavy).&lt;br /&gt;
* Users cannot start root processes or setup privileges.&lt;br /&gt;
&lt;br /&gt;
'''Luckily it is possible to install MySQL in user space.'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== User space MySQL Deployment ===&lt;br /&gt;
&lt;br /&gt;
* Database server runs as user on some machine.&lt;br /&gt;
* Creates its own ’root’ user, sets up privileges on databases and tables&lt;br /&gt;
* ''This is a database user called ’root’, which does not have, and should not, have anything at all to do with the linux root user.''&lt;br /&gt;
* Application runs on another or the same machine&lt;br /&gt;
* Port numbers and sockets must be assigned properly to avoid conflicts with other users’ databases''&lt;br /&gt;
* Application contacts this server as a non-’root’ user through the properly assigned port or socket.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== SciNet’s MySQL Module on the GPC ===&lt;br /&gt;
&lt;br /&gt;
* MySQL user deployment is a bit of a pain, and would mean a lot of duplication of effort.&lt;br /&gt;
* So we’ve done that already, and wrote a few scripts to help you.&lt;br /&gt;
* They are in the ’mysql’ module.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;br /&amp;gt;'''Let’s demonstrate how this works…'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Basic Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$ module load mysql&lt;br /&gt;
$ mysqlsetup&lt;br /&gt;
Creating directory (tree) $SCRATCH/.mysql-5.6.12/default for configuration files&lt;br /&gt;
Creating directory $SCRATCH/mysqldata/default for databases&lt;br /&gt;
Creating local configuration&lt;br /&gt;
Initializing local mysql database&lt;br /&gt;
Enter mysql root password:&lt;br /&gt;
Confirm mysql root password: &lt;br /&gt;
Starting mysql service&lt;br /&gt;
131011 15:05:31 mysqld_safe Logging to '$SCRATCH/mysqldata/default/gpc-f103n084.err'.&lt;br /&gt;
131011 15:05:31 mysqld_safe Starting mysqld daemon with databases from $SCRATCH/mysqldata/default&lt;br /&gt;
Setting password&lt;br /&gt;
Cleaning up&lt;br /&gt;
Stopping mysql service&lt;br /&gt;
131011 15:05:36 mysqld_safe mysqld from pid file $SCRATCH/mysqldata/default/gpc-f103n084.pid ended&lt;br /&gt;
$&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, starting the server:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$ module load mysql&lt;br /&gt;
$ mysqlsetup&lt;br /&gt;
...&lt;br /&gt;
$ mysqlstart&lt;br /&gt;
131011 15:09:39 mysqld_safe Logging to '$SCRATCH/mysqldata/default/gpc-f103n084.err'.&lt;br /&gt;
131011 15:09:39 mysqld_safe Starting mysqld daemon with databases from $SCRATCH/mysqldata/default&lt;br /&gt;
$ mysql -u root -p&lt;br /&gt;
Enter password:&lt;br /&gt;
Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;
...&lt;br /&gt;
mysql&amp;gt; \q&lt;br /&gt;
$ mysqlstop&lt;br /&gt;
131011 15:18:34 mysqld_safe mysqld from pid file $SCRATCH/mysqldata/default/gpc-f103n084.pid ended&lt;br /&gt;
$ &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What happened?'''&lt;br /&gt;
&lt;br /&gt;
* Stuff was setup on scratch, so we can use this on compute nodes too.&lt;br /&gt;
* Setup root password&lt;br /&gt;
* Directories created:&lt;br /&gt;
** &amp;lt;code&amp;gt;$SCRATCH/.mysql-5.6.12/default&amp;lt;/code&amp;gt;: contains configuration files&lt;br /&gt;
** &amp;lt;code&amp;gt;$SCRATCH/mysqldata/default&amp;lt;/code&amp;gt;: contains database files&lt;br /&gt;
* Configuration is such that non-default sockets and ports are used: multiple users can use this module simultaneously on devel nodes.&lt;br /&gt;
* Tip: do not use the root user, create a new user.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Using Profiles ===&lt;br /&gt;
&lt;br /&gt;
'''Note &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; in the above?'''&lt;br /&gt;
&lt;br /&gt;
* It’s possible to have other configurations, using different directories. This is required if you want to run a database server for each job.&lt;br /&gt;
* Each setup is called a ’profile’.&lt;br /&gt;
* Each profile has its own configuration and data directory.&lt;br /&gt;
* Each profile has its own root password.&lt;br /&gt;
* Data directory can even be on ramdisk!&amp;lt;br /&amp;gt;(but you’ll have to copy it if you want to save your results).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Profile Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$ module load mysql&lt;br /&gt;
$ mysqlsetup -P compute&lt;br /&gt;
$ mysqlstart -P compute&lt;br /&gt;
$ export MYSQL_HOME=$MYSQL_HOMES/compute&lt;br /&gt;
$ mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE computedb&lt;br /&gt;
mysql&amp;gt; GRANT ALL PRIVILEGES ON computedb.* TO computeuser&lt;br /&gt;
mysql&amp;gt; FLUSH PRIVILEGES&lt;br /&gt;
mysql&amp;gt; \q&lt;br /&gt;
$ mysqlstop -P compute&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$ mkdir -p /dev/shm/rzon/mysqldata&lt;br /&gt;
$ mysqlsetup -P ramdisk -D /dev/shm/rzon/mysqldata&lt;br /&gt;
$ mysqlstart -P ramdisk&lt;br /&gt;
$ mysqlstart -P default&lt;br /&gt;
$ mysqlstatus&lt;br /&gt;
PROFILE        PID&lt;br /&gt;
ramdisk        5243&lt;br /&gt;
default        5740&lt;br /&gt;
$ export MYSQL_HOME=$MYSQL_HOMES/ramdisk&lt;br /&gt;
$ mysql -u root -p&lt;br /&gt;
$ export MYSQL_HOME=$MYSQL_HOMES/default&lt;br /&gt;
$ mysql -u root -p&lt;br /&gt;
$ mysqlstop -P ramdisk&lt;br /&gt;
$ cd /dev/shm/rzon/mysqldata&lt;br /&gt;
$ tar cf $SCRATCH/ramdiskdb.tar .&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next run can just do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$ module load mysql&lt;br /&gt;
$ cd /dev/shm/rzon/mysqldata&lt;br /&gt;
$ tar xpf $SCRATCH/ramdiskdb.tar &lt;br /&gt;
$ mysqlstart -P ramdisk&lt;br /&gt;
$ export MYSQL_HOME=$MYSQL_HOMES/ramdisk&lt;br /&gt;
$ ...&lt;br /&gt;
$ mysqlstop -P ramdisk&lt;br /&gt;
$ tar cf $SCRATCH/ramdiskdb.tar /dev/shm/rzon/mysqldata&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that if there are several runs at the same time, you’ll have to have different tar files on the file system and may have to figure out how to merge databases.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Multi-node Example ===&lt;br /&gt;
&lt;br /&gt;
A script that uses the mysql database but does not start it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;#!/bin/bash&lt;br /&gt;
# file: compute.sh&lt;br /&gt;
module load mysql&lt;br /&gt;
export MYSQL_HOME=$MYSQL_HOMES/compute&lt;br /&gt;
export mysqlhost=$1&lt;br /&gt;
export thiscase=$2&lt;br /&gt;
mysql -h $mysqlhost -u computeuser computedb ... $thiscase ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;#!/bin/bash&lt;br /&gt;
#PBS -l nodes=2:ppn=8,walltime=24:00:00&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
module load gnu-parallel/20130422 mysql&lt;br /&gt;
mysqlstart -P compute&lt;br /&gt;
export mysqlhost=$(hostname)&lt;br /&gt;
parallel -j2 --slf $PBS_NODEFILE --workdir $PWD &amp;lt;&amp;lt;EOF&lt;br /&gt;
compute.sh $mysqlhost 1&lt;br /&gt;
compute.sh $mysqlhost 2&lt;br /&gt;
compute.sh $mysqlhost 3&lt;br /&gt;
...&lt;br /&gt;
EOF&lt;br /&gt;
mysqlstop -P compute&lt;br /&gt;
#end of job script&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$ qsub jobscript&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Summary ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; module allows you to run mysql server as a user.&lt;br /&gt;
* Without bothering other users.&lt;br /&gt;
* Can run multiple mysql servers using profiles (must use different directories).&lt;br /&gt;
* Can run on ramdisk.&lt;br /&gt;
* Can serve a multinode job&lt;br /&gt;
* Scripts from the mysql module:&lt;br /&gt;
** &amp;lt;code&amp;gt;mysqlsetup&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mysqlstart&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mysqlstatus&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mysqlstop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Accelerator_Research_Cluster&amp;diff=9399</id>
		<title>Accelerator Research Cluster</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Accelerator_Research_Cluster&amp;diff=9399"/>
		<updated>2018-08-31T23:25:00Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:Tesla S2070 3qtr.gif|center|200px|thumb]]&lt;br /&gt;
|name=Accelerator Research Cluster (ARC)&lt;br /&gt;
|installed=June 2010, April 2011&lt;br /&gt;
|operatingsystem= Linux (Centos 6.2)&lt;br /&gt;
|loginnode= arc01 (from login.scinet)&lt;br /&gt;
|nnodes=8(x86)+4x4(GPU)+14(Cell)&lt;br /&gt;
|interconnect=DDR Infiniband&lt;br /&gt;
}}&lt;br /&gt;
The Accelerator Research Cluster (ARC) is a technology evaluation cluster with a combination of 14 IBM PowerXCell 8i &amp;quot;Cell&amp;quot; nodes and 8 Intel x86_64 &amp;quot;Nehalem&amp;quot; nodes containing 16 NVIDIA M2070 GPUs.&lt;br /&gt;
The QS22's each have two 3.2GHz &amp;quot;IBM PowerXCell 8i CPU's, where each CPU has 1 Power Processing Unit (PPU) and 8 Synergistic Processing Units (SPU), and&lt;br /&gt;
32GB of RAM per node. The Intel nodes have two 2.53GHz 4core Xeon X5550 CPU's with 48GB of RAM per node each containing two NVIDIA M2070 (Fermi) GPU's each with 6GB of RAM.&lt;br /&gt;
&lt;br /&gt;
Please note that this cluster is not a production cluster and is only accessible to selected users. &lt;br /&gt;
&lt;br /&gt;
===Login===&lt;br /&gt;
&lt;br /&gt;
First login via ssh with your scinet account at '''&amp;lt;tt&amp;gt;login.scinet.utoronto.ca&amp;lt;/tt&amp;gt;''', and from there you can proceed to '''&amp;lt;tt&amp;gt;arc01&amp;lt;/tt&amp;gt;''' which &lt;br /&gt;
is currently the gateway/devel node for this cluster.&lt;br /&gt;
&lt;br /&gt;
==Compile/Devel/Compute Nodes==&lt;br /&gt;
&lt;br /&gt;
=== [[ Cell_Devel_Nodes | Cell ]] ===&lt;br /&gt;
You can log into any of 12 nodes '''&amp;lt;tt&amp;gt;blade[03-14]&amp;lt;/tt&amp;gt;''' directly to compile/test/run Cell&lt;br /&gt;
specific or OpenCL codes.&lt;br /&gt;
&lt;br /&gt;
See the [[ Cell_Devel_Nodes | Cell Devel Info ]] page for Cell specific details.&lt;br /&gt;
&lt;br /&gt;
=== [[ GPU_Devel_Nodes |  GPU ]]===&lt;br /&gt;
You can log into the devel node '''&amp;lt;tt&amp;gt;arc01&amp;lt;/tt&amp;gt;''' directly to compile and&lt;br /&gt;
interactively test, and from there submit jobs to the other 7 x86_64/GPU nodes.&lt;br /&gt;
&lt;br /&gt;
See the [[ GPU_Devel_Nodes | GPU Devel Info ]] page for GPU specific details.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=MemP&amp;diff=9398</id>
		<title>MemP</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=MemP&amp;diff=9398"/>
		<updated>2018-08-31T23:24:28Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
memP is a Lawrence Livermore National Labs (LLNL) developed, light weight, parallel heap profiling library. Its primarily designed to identify the heap allocation that causes an MPI task to reach its memory in use high water mark (HWM).&lt;br /&gt;
&lt;br /&gt;
== memP Reports ==&lt;br /&gt;
&lt;br /&gt;
'''Summary Report:''' Generated from within MPI_Finalize, this report describes the memory HWM of each task over the run of the application. This can be used to determine which task allocates the most memory and how this compares to the memory of other tasks.&lt;br /&gt;
&lt;br /&gt;
'''Task Report:''' Based on specific criteria, a report can be generated for each task, that provides a snapshot of the heap memory currently in use, including the amount allocated at specific call sites.&lt;br /&gt;
&lt;br /&gt;
==Using memP==&lt;br /&gt;
&lt;br /&gt;
Load the memp Module&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load memP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile with the recommended BG/Q flags and link your application with the required libraries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Wl,-zmuldefs ${SCINET_LIB_MEMP}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpixlc -g -Wl,-zmuldefs -o myprog myprog.c -L/usr/local/tools/memP/lib -lmemP&lt;br /&gt;
mpixlf77 -g -Wl,-zmuldefs -o myprog myprog.f -L/usr/local/tools/memP/lib -lmemP &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run your MPI application as usual and you will see an memP header and traile it sends to stdout, as well as the output file generated at the end of the run.&lt;br /&gt;
&lt;br /&gt;
==Output Options==&lt;br /&gt;
&lt;br /&gt;
See http://memp.sourceforge.net/ for full details.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=User_Codes&amp;diff=9397</id>
		<title>User Codes</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=User_Codes&amp;diff=9397"/>
		<updated>2018-08-31T23:23:58Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
==Astrophysics==&lt;br /&gt;
&lt;br /&gt;
===Athena (explicit, uniform grid MHD code)===&lt;br /&gt;
&lt;br /&gt;
[[Image:StrongScalingAthenaGPC.png|thumb|right|320px|Athena scaling on GPC with OpenMPI and MVAPICH2 on GigE, and OpenMPI on InfiniBand]]&lt;br /&gt;
&lt;br /&gt;
[http://www.astro.princeton.edu/~jstone/athena.html Athena] is a straightforward C code which doesn't use a lot of libraries so it is pretty straightforward to build and compile on new machines.   &lt;br /&gt;
&lt;br /&gt;
It encapsulates its compiler flags, etc in an &amp;lt;tt&amp;gt;Makeoptions.in&amp;lt;/tt&amp;gt; file which is then processed by &amp;lt;tt&amp;gt;configure&amp;lt;/tt&amp;gt;.   I've used the following additions to &amp;lt;tt&amp;gt;Makeoptions.in&amp;lt;/tt&amp;gt; on TCS and GPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
ifeq ($(MACHINE),scinettcs)&lt;br /&gt;
  CC = mpcc_r&lt;br /&gt;
  LDR = mpcc_r&lt;br /&gt;
  OPT = -O5 -q64 -qarch=pwr6 -qtune=pwr6 -qcache=auto -qlargepage -qstrict&lt;br /&gt;
  MPIINC =&lt;br /&gt;
  MPILIB =&lt;br /&gt;
  CFLAGS = $(OPT)&lt;br /&gt;
  LIB = -ldl -lm&lt;br /&gt;
else&lt;br /&gt;
ifeq ($(MACHINE),scinetgpc)&lt;br /&gt;
  CC = mpicc&lt;br /&gt;
  LDR = mpicc&lt;br /&gt;
  OPT = -O3&lt;br /&gt;
  MPIINC =&lt;br /&gt;
  MPILIB =&lt;br /&gt;
  CFLAGS = $(OPT)&lt;br /&gt;
  LIB = -lm&lt;br /&gt;
else&lt;br /&gt;
...&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
It performs quite well on the GPC, scaling extremely well even on a strong scaling test out to about 256 cores (32 nodes) on Gigabit ethernet, and performing beautifully on InfiniBand out to 512 cores (64 nodes). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- [[User:Ljdursi|ljdursi]]  19:20, 13 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===FLASH3 (Adaptive Mesh reactive hydrodynamics; explict hydro/MHD)===&lt;br /&gt;
&lt;br /&gt;
[[Image:weak-scaling-example.png|thumb|right|320px|Weak scaling test of the 2d sod problem on both the GPC and TCS.  The results are actually somewhat faster on the GPC; in both cases (weak) scaling is very good out at least to 256 cores]]&lt;br /&gt;
&lt;br /&gt;
[http://flash.uchicago.edu FLASH] encapsulates its machine-dependant information in the &amp;lt;tt&amp;gt;FLASH3/sites&amp;lt;/tt&amp;gt; directory.  For the GPC, you'll have to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intel&lt;br /&gt;
module load openmpi&lt;br /&gt;
module load hdf5/184-p1-v16-openmpi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and with that, the following file (&amp;lt;tt&amp;gt;sites/scinetgpc/Makefile.h&amp;lt;/tt&amp;gt;) works for me:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
## Must do module load hdf5/183-v16-openmpi&lt;br /&gt;
HDF5_PATH = ${SCINET_HDF5_BASE}&lt;br /&gt;
ZLIB_PATH = /usr/local&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
# Compiler and linker commands&lt;br /&gt;
#&lt;br /&gt;
#  We use the f90 compiler as the linker, so some C libraries may explicitly&lt;br /&gt;
#  need to be added into the link line.&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
## modules will put the right mpi in our path&lt;br /&gt;
FCOMP   = mpif77&lt;br /&gt;
CCOMP   = mpicc&lt;br /&gt;
CPPCOMP = mpiCC&lt;br /&gt;
LINK    = mpif77&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
# Compilation flags&lt;br /&gt;
#&lt;br /&gt;
#  Three sets of compilation/linking flags are defined: one for optimized&lt;br /&gt;
#  code, one for testing, and one for debugging.  The default is to use the &lt;br /&gt;
#  _OPT version.  Specifying -debug to setup will pick the _DEBUG version,&lt;br /&gt;
#  these should enable bounds checking.  Specifying -test is used for &lt;br /&gt;
#  flash_test, and is set for quick code generation, and (sometimes) &lt;br /&gt;
#  profiling.  The Makefile generated by setup will assign the generic token &lt;br /&gt;
#  (ex. FFLAGS) to the proper set of flags (ex. FFLAGS_OPT).&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
FFLAGS_OPT   =  -c -r8 -i4 -O3 -xSSE4.2&lt;br /&gt;
FFLAGS_DEBUG =  -c -g -r8 -i4 -O0&lt;br /&gt;
FFLAGS_TEST  =  -c -r8 -i4&lt;br /&gt;
&lt;br /&gt;
LIB_HDF5 = -L${HDF5_PATH}/lib -lhdf5 -L${SCINET_ZLIB_LIB} -lz -lgpfs&lt;br /&gt;
&lt;br /&gt;
# if we are using HDF5, we need to specify the path to the include files&lt;br /&gt;
CFLAGS_HDF5  = -I${HDF5_PATH}/include&lt;br /&gt;
&lt;br /&gt;
CFLAGS_OPT   = -c -O3 -xSSE4.2&lt;br /&gt;
CFLAGS_TEST  = -c -O2 &lt;br /&gt;
CFLAGS_DEBUG = -c -g  &lt;br /&gt;
&lt;br /&gt;
MDEFS = &lt;br /&gt;
&lt;br /&gt;
.SUFFIXES: .o .c .f .F .h .fh .F90 .f90&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
# Linker flags&lt;br /&gt;
#&lt;br /&gt;
#  There is a seperate version of the linker flags for each of the _OPT, &lt;br /&gt;
#  _DEBUG, and _TEST cases.&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
LFLAGS_OPT   = -o&lt;br /&gt;
LFLAGS_TEST  = -o&lt;br /&gt;
LFLAGS_DEBUG = -g -o&lt;br /&gt;
&lt;br /&gt;
MACHOBJ = &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MV = mv -f&lt;br /&gt;
AR = ar -r&lt;br /&gt;
RM = rm -f&lt;br /&gt;
CD = cd&lt;br /&gt;
RL = ranlib&lt;br /&gt;
ECHO = echo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- [[User:Ljdursi|ljdursi]] 22:11, 13 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Aeronautics==&lt;br /&gt;
&lt;br /&gt;
==Chemistry==&lt;br /&gt;
&lt;br /&gt;
===CPMD===&lt;br /&gt;
&lt;br /&gt;
Please refer to the [[Cpmd | CPMD]] page.&lt;br /&gt;
&lt;br /&gt;
===NWChem===&lt;br /&gt;
&lt;br /&gt;
Please refer to the [[Nwchem | NWChem]] page.&lt;br /&gt;
&lt;br /&gt;
===GAMESS (US)===&lt;br /&gt;
&lt;br /&gt;
Please refer to the [[gamess|GAMESS (US)]] page.&lt;br /&gt;
&lt;br /&gt;
User supplied content below.&lt;br /&gt;
&lt;br /&gt;
====Tips from the Fekl Lab====&lt;br /&gt;
&lt;br /&gt;
Through trial and error, we have found a few useful things that we would like to share:&lt;br /&gt;
&lt;br /&gt;
1. Two very useful, open-source programs for visualization of output files from GAMESS(US) and for generation of input files are [http://www.scl.ameslab.gov/MacMolPlt/ MacMolPlt]and [http://avogadro.openmolecules.net/wiki/Main_Page Avogadro].  The are available for UNIX/LINUX, Windows and Mac based machines, HOWEVER:  any input files that we have generated with these programs on a Windows-based machine do not run on Mac based machines.  We don't know why.&lt;br /&gt;
&lt;br /&gt;
2. [http://winscp.net/eng/index.php WinSCP] is a very useful tool that has a graphical user interface for moving files from a local machine to SCINET and vice versa.  It also has text editing capabilities.&lt;br /&gt;
&lt;br /&gt;
3. The [https://bse.pnl.gov/bse/portal ESML Basis Set Exchange] is an excellent source for custom basis set or effective core potential parameters.  Make sure that you specify &amp;quot;Gamess-US&amp;quot; in the format drop-down box.&lt;br /&gt;
&lt;br /&gt;
4.  The commercial program [http://www.chemcraftprog.com/ ChemCraft] is a highly useful visualization program that has the ability to edit molecules in a very similar fashion to GaussView.  It can also be customized to build GAMESS(US) input files.&lt;br /&gt;
&lt;br /&gt;
====Anatomy of a GAMESS(US) Input File with Basis Set Info in an External File====&lt;br /&gt;
&lt;br /&gt;
  $CONTRL SCFTYP=RHF RUNTYP=OPTIMIZE DFTTYP=M06-L MAXIT=199 MULT=1 NOSYM=1&lt;br /&gt;
   ECP=READ $END&lt;br /&gt;
  $SYSTEM TIMLIM=525600 MWORDS=1750 PARALL=.TRUE. $END&lt;br /&gt;
  $BASIS GBASIS=CUSTOMNI EXTFIL=.t. $END&lt;br /&gt;
  $SCF DIRSCF=.TRUE. FDIFF=.f. $END&lt;br /&gt;
  $STATPT OPTTOL=0.0001 NSTEP=500 HSSEND=.t. $END&lt;br /&gt;
  $DATA&lt;br /&gt;
  Mo_BDT3&lt;br /&gt;
 C1&lt;br /&gt;
 MOLYBDENUM 42.0      5.7556500000      4.4039600000     16.5808400000&lt;br /&gt;
 SULFUR     16.0      7.4169700000      3.1956300000     15.2089300000&lt;br /&gt;
 SULFUR     16.0      4.0966800000      3.2258300000     15.1761100000&lt;br /&gt;
 SULFUR     16.0      3.9677300000      4.4940500000     18.3266100000&lt;br /&gt;
 SULFUR     16.0      7.1776900000      3.5815000000     18.4485200000&lt;br /&gt;
 SULFUR     16.0      4.3776600000      6.2447400000     15.6786900000&lt;br /&gt;
 SULFUR     16.0      7.5478700000      6.0679800000     16.2223700000&lt;br /&gt;
 CARBON      6.0      6.4716900000      2.1004800000     14.1902300000&lt;br /&gt;
 CARBON      6.0      5.0690300000      2.1781400000     14.1080700000&lt;br /&gt;
 CARBON      6.0      4.8421800000      4.2701300000     19.8855500000&lt;br /&gt;
 CARBON      6.0      6.1969000000      3.9249600000     19.9397400000&lt;br /&gt;
 CARBON      6.0      6.8280600000      3.7834200000     21.1913200000&lt;br /&gt;
 CARBON      6.0      5.7697600000      7.6933500000     17.4241800000&lt;br /&gt;
 CARBON      6.0      7.2043100000      7.9413600000     17.8281100000&lt;br /&gt;
 CARBON      6.0      5.5051400000      7.0409700000     14.5903800000&lt;br /&gt;
 CARBON      6.0      6.8905200000      6.9194700000     14.7626200000&lt;br /&gt;
 CARBON      6.0      7.7396400000      7.5379800000     13.8285700000&lt;br /&gt;
 HYDROGEN    1.0      8.8190700000      7.4520600000     13.9252200000&lt;br /&gt;
 CARBON      6.0      7.2169400000      8.2960300000     12.7704100000&lt;br /&gt;
 HYDROGEN    1.0      7.8667000000      8.7825100000     12.0575600000&lt;br /&gt;
 CARBON      6.0      5.8260300000      8.4502300000     12.6467800000&lt;br /&gt;
 HYDROGEN    1.0      5.4143000000      9.0544300000     11.8493100000&lt;br /&gt;
 CARBON      6.0      4.9881500000      7.8192300000     13.5528400000&lt;br /&gt;
 HYDROGEN    1.0      3.9090500000      7.9420000000     13.4583700000&lt;br /&gt;
 CARBON      6.0      7.1538500000      1.1569600000     13.4143900000&lt;br /&gt;
 CARBON      6.0      4.4018100000      1.3603900000     13.1919900000&lt;br /&gt;
 CARBON      6.0      6.4791600000      0.3185500000     12.5353300000&lt;br /&gt;
 CARBON      6.0      5.0837400000      0.4369500000     12.4084900000&lt;br /&gt;
 HYDROGEN    1.0      7.0116000000     -0.4099400000     11.9434600000&lt;br /&gt;
 HYDROGEN    1.0      8.2399000000      1.0702400000     13.4937600000&lt;br /&gt;
 HYDROGEN    1.0      3.3185600000      1.4368700000     13.0953100000&lt;br /&gt;
 HYDROGEN    1.0      4.5549800000     -0.1997300000     11.7165200000&lt;br /&gt;
 CARBON      6.0      6.1105700000      3.9639000000     22.3866100000&lt;br /&gt;
 CARBON      6.0      4.1216300000      4.4424400000     21.1020100000&lt;br /&gt;
 HYDROGEN    1.0      7.8732900000      3.5217100000     21.2520500000&lt;br /&gt;
 CARBON      6.0      4.7606000000      4.2868500000     22.3363800000&lt;br /&gt;
 HYDROGEN    1.0      6.6064200000      3.8406000000     23.3428500000&lt;br /&gt;
 HYDROGEN    1.0      4.2065000000      4.4170700000     23.2667100000&lt;br /&gt;
 HYDROGEN    1.0      3.0674000000      4.6893500000     21.0889000000&lt;br /&gt;
 HYDROGEN    1.0      7.4249200000      7.7545300000     18.8583200000&lt;br /&gt;
 HYDROGEN    1.0      7.6651700000      8.9049700000     17.7652100000&lt;br /&gt;
 HYDROGEN    1.0      5.3324000000      8.6487800000     17.2222700000&lt;br /&gt;
 HYDROGEN    1.0      5.5015000000      7.1039000000     18.2759400000&lt;br /&gt;
  $END&lt;br /&gt;
  $ECP&lt;br /&gt;
 MO-ECP GEN     28     3&lt;br /&gt;
  5      ----- f potential     -----&lt;br /&gt;
     -0.0469492        0    537.9667807        &lt;br /&gt;
    -20.2080084        1    147.8982938        &lt;br /&gt;
   -106.2116302        2     45.7358898        &lt;br /&gt;
    -41.8107368        2     13.2911467        &lt;br /&gt;
     -4.2054103        2      4.7059961        &lt;br /&gt;
  3      ----- s-f potential     -----&lt;br /&gt;
      2.8063717        0    110.2991760        &lt;br /&gt;
     44.5162012        1     23.2014645        &lt;br /&gt;
     82.7785227        2      5.3530131        &lt;br /&gt;
  4      ----- p-f potential     -----&lt;br /&gt;
      4.9420876        0     63.2901397        &lt;br /&gt;
     25.8604976        1     23.3315302        &lt;br /&gt;
    132.4708742        2     24.6759423        &lt;br /&gt;
     57.3149794        2      4.6493040        &lt;br /&gt;
  5      ----- d-f potential     -----&lt;br /&gt;
      3.0054591        0    104.4839977        &lt;br /&gt;
     26.3637851        1     66.2307245        &lt;br /&gt;
    183.3849199        2     39.1283176        &lt;br /&gt;
     98.4453068        2     13.1164437        &lt;br /&gt;
     22.4901377        2      3.6280263 &lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
  $END&lt;br /&gt;
&lt;br /&gt;
=====The Input Deck=====&lt;br /&gt;
&lt;br /&gt;
Below is the input deck.  It is where you tell GAMESS(US) what job type to execute and where all you individual parameters are entered for your specific job type.  The example input deck below is for a geometry optimization and frequency calculation.  This input deck is equivalent to the Gaussian job with &amp;quot;opt&amp;quot; and &amp;quot;freq&amp;quot; in the route section.&lt;br /&gt;
&lt;br /&gt;
  $CONTRL SCFTYP=RHF RUNTYP=OPTIMIZE DFTTYP=M06-L MAXIT=199 MULT=1 NOSYM=1&lt;br /&gt;
   ECP=READ $END&lt;br /&gt;
  $SYSTEM TIMLIM=2850 MWORDS=1750 MEMDDI=20 PARALL=.TRUE. $END&lt;br /&gt;
  $BASIS GBASIS=CUSTOMNI EXTFIL=.t. $END&lt;br /&gt;
  $SCF DIRSCF=.TRUE. FDIFF=.f. $END&lt;br /&gt;
  $STATPT OPTTOL=0.0001 NSTEP=500 HSSEND=.t. $END&lt;br /&gt;
  $DATA&lt;br /&gt;
&lt;br /&gt;
An important thing to note is the spacing.  In the input deck, there must be 1 space at the beginning of each line of the input deck.  If not, the job will fail.  Most builders will insert this space anyway, but it helps to double check.&lt;br /&gt;
&lt;br /&gt;
The end of the input deck is marked by the &amp;quot;$DATA&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
=====Job Title Line=====&lt;br /&gt;
&lt;br /&gt;
The next line of the file is the job title.  It can be anthing you wish, however, we have found that to be on the safe side, we avoide using symbols or spaces&lt;br /&gt;
&lt;br /&gt;
  Mo_BDT3&lt;br /&gt;
&lt;br /&gt;
=====Symmetry Point Group=====&lt;br /&gt;
&lt;br /&gt;
The next line of the file is the symmetry point group of your molecule.  Note that there is no leading space before the point group.&lt;br /&gt;
&lt;br /&gt;
 C1&lt;br /&gt;
&lt;br /&gt;
=====Coordinates=====&lt;br /&gt;
&lt;br /&gt;
The next block of text is set aside for the coordinates of the molecule.  This can be in internal (or z-matrix) format or cartesian coordinates.  Note that there is no leading space before the coordinates.  One may use the chemical symbol or the full name of each atom in the molecule.  Note that the end of the coordinates is signified by an &amp;quot;$END&amp;quot;, which MUST have one space preceding it.  The coordinates below do NOT have any basis set information inserted.  It is possible to insert basis set information directly into the input file.  This is accomplished by obtaining the desired basis set parameters from the EMSL and then inserting them below each relevant atom.  An example input file with inserted basis set information will be shown later.&lt;br /&gt;
&lt;br /&gt;
 MOLYBDENUM 42.0      5.7556500000      4.4039600000     16.5808400000&lt;br /&gt;
 SULFUR     16.0      7.4169700000      3.1956300000     15.2089300000&lt;br /&gt;
 SULFUR     16.0      4.0966800000      3.2258300000     15.1761100000&lt;br /&gt;
 SULFUR     16.0      3.9677300000      4.4940500000     18.3266100000&lt;br /&gt;
 SULFUR     16.0      7.1776900000      3.5815000000     18.4485200000&lt;br /&gt;
 SULFUR     16.0      4.3776600000      6.2447400000     15.6786900000&lt;br /&gt;
 SULFUR     16.0      7.5478700000      6.0679800000     16.2223700000&lt;br /&gt;
 CARBON      6.0      6.4716900000      2.1004800000     14.1902300000&lt;br /&gt;
 CARBON      6.0      5.0690300000      2.1781400000     14.1080700000&lt;br /&gt;
 CARBON      6.0      4.8421800000      4.2701300000     19.8855500000&lt;br /&gt;
 CARBON      6.0      6.1969000000      3.9249600000     19.9397400000&lt;br /&gt;
 CARBON      6.0      6.8280600000      3.7834200000     21.1913200000&lt;br /&gt;
 CARBON      6.0      5.7697600000      7.6933500000     17.4241800000&lt;br /&gt;
 CARBON      6.0      7.2043100000      7.9413600000     17.8281100000&lt;br /&gt;
 CARBON      6.0      5.5051400000      7.0409700000     14.5903800000&lt;br /&gt;
 CARBON      6.0      6.8905200000      6.9194700000     14.7626200000&lt;br /&gt;
 CARBON      6.0      7.7396400000      7.5379800000     13.8285700000&lt;br /&gt;
 HYDROGEN    1.0      8.8190700000      7.4520600000     13.9252200000&lt;br /&gt;
 CARBON      6.0      7.2169400000      8.2960300000     12.7704100000&lt;br /&gt;
 HYDROGEN    1.0      7.8667000000      8.7825100000     12.0575600000&lt;br /&gt;
 CARBON      6.0      5.8260300000      8.4502300000     12.6467800000&lt;br /&gt;
 HYDROGEN    1.0      5.4143000000      9.0544300000     11.8493100000&lt;br /&gt;
 CARBON      6.0      4.9881500000      7.8192300000     13.5528400000&lt;br /&gt;
 HYDROGEN    1.0      3.9090500000      7.9420000000     13.4583700000&lt;br /&gt;
 CARBON      6.0      7.1538500000      1.1569600000     13.4143900000&lt;br /&gt;
 CARBON      6.0      4.4018100000      1.3603900000     13.1919900000&lt;br /&gt;
 CARBON      6.0      6.4791600000      0.3185500000     12.5353300000&lt;br /&gt;
 CARBON      6.0      5.0837400000      0.4369500000     12.4084900000&lt;br /&gt;
 HYDROGEN    1.0      7.0116000000     -0.4099400000     11.9434600000&lt;br /&gt;
 HYDROGEN    1.0      8.2399000000      1.0702400000     13.4937600000&lt;br /&gt;
 HYDROGEN    1.0      3.3185600000      1.4368700000     13.0953100000&lt;br /&gt;
 HYDROGEN    1.0      4.5549800000     -0.1997300000     11.7165200000&lt;br /&gt;
 CARBON      6.0      6.1105700000      3.9639000000     22.3866100000&lt;br /&gt;
 CARBON      6.0      4.1216300000      4.4424400000     21.1020100000&lt;br /&gt;
 HYDROGEN    1.0      7.8732900000      3.5217100000     21.2520500000&lt;br /&gt;
 CARBON      6.0      4.7606000000      4.2868500000     22.3363800000&lt;br /&gt;
 HYDROGEN    1.0      6.6064200000      3.8406000000     23.3428500000&lt;br /&gt;
 HYDROGEN    1.0      4.2065000000      4.4170700000     23.2667100000&lt;br /&gt;
 HYDROGEN    1.0      3.0674000000      4.6893500000     21.0889000000&lt;br /&gt;
 HYDROGEN    1.0      7.4249200000      7.7545300000     18.8583200000&lt;br /&gt;
 HYDROGEN    1.0      7.6651700000      8.9049700000     17.7652100000&lt;br /&gt;
 HYDROGEN    1.0      5.3324000000      8.6487800000     17.2222700000&lt;br /&gt;
 HYDROGEN    1.0      5.5015000000      7.1039000000     18.2759400000&lt;br /&gt;
  $END&lt;br /&gt;
&lt;br /&gt;
=====Effective Core Potential Data=====&lt;br /&gt;
&lt;br /&gt;
The effective core potential (ECP) data is entered after the coordinates.  It starts with &amp;quot;$ECP&amp;quot;, which must be preceded with a space.   The atoms of the molecule are listed in the same order as in the coordinates section and the parameters for the ECP are listed after each atom.  Note that for any atom that does NOT have an ECP, one must enter &amp;quot;ECP-NONE&amp;quot; or &amp;quot;NONE&amp;quot; after each atom without an ECP.&lt;br /&gt;
&lt;br /&gt;
 $ECP&lt;br /&gt;
 MO-ECP GEN     28     3&lt;br /&gt;
  5      ----- f potential     -----&lt;br /&gt;
     -0.0469492        0    537.9667807        &lt;br /&gt;
    -20.2080084        1    147.8982938        &lt;br /&gt;
   -106.2116302        2     45.7358898        &lt;br /&gt;
    -41.8107368        2     13.2911467        &lt;br /&gt;
     -4.2054103        2      4.7059961        &lt;br /&gt;
  3      ----- s-f potential     -----&lt;br /&gt;
      2.8063717        0    110.2991760        &lt;br /&gt;
     44.5162012        1     23.2014645        &lt;br /&gt;
     82.7785227        2      5.3530131        &lt;br /&gt;
  4      ----- p-f potential     -----&lt;br /&gt;
      4.9420876        0     63.2901397        &lt;br /&gt;
     25.8604976        1     23.3315302        &lt;br /&gt;
    132.4708742        2     24.6759423        &lt;br /&gt;
     57.3149794        2      4.6493040        &lt;br /&gt;
  5      ----- d-f potential     -----&lt;br /&gt;
      3.0054591        0    104.4839977        &lt;br /&gt;
     26.3637851        1     66.2307245        &lt;br /&gt;
    183.3849199        2     39.1283176        &lt;br /&gt;
     98.4453068        2     13.1164437        &lt;br /&gt;
     22.4901377        2      3.6280263 &lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 S NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 C NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
 H NONE&lt;br /&gt;
  $END&lt;br /&gt;
&lt;br /&gt;
-- [[User:M.Zimmer-De Iuliis|mzd]]  16 November 2009&lt;br /&gt;
&lt;br /&gt;
====Using an External File to Define Basis Set in GAMESS(US)====&lt;br /&gt;
&lt;br /&gt;
Since GAMESS(US) has a limited number of built-in ECPs and basis sets, one may want to make GAMESS(US) read an external file that contains the basis set information ECP data using the &amp;quot;EXTFIL&amp;quot; keyword in the $GBASIS command line of the input file.  For many metal containing compounds, it is very convenient and time saving to use an effective core potential (ECP) for the core metal electrons, as they are usually not important to the reactivity of the complex or the geometry around the metal.  In addition, to make GAMESS(US) use this external file, one must copy the &amp;quot;rungms&amp;quot; file and modify it accordingly.  The following is a list of instructions with commands that will work from a terminal.  One could also use WinSCP to do all of this with a GUI rather than a TUI.  &lt;br /&gt;
&lt;br /&gt;
=====Modifiying rungms to Use Custom Basis Set File=====&lt;br /&gt;
1. Copy &amp;quot;rungms&amp;quot; from /scinet/gpc/Applications/gamess to one's own /scratch/$USER/ directory:&lt;br /&gt;
 cp /scinet/gpc/Applications/gamess/rungms /scratch/$USER/&lt;br /&gt;
&lt;br /&gt;
2. Change to the scratch directory and check to see if &amp;quot;rungms&amp;quot; has copied successfully.&lt;br /&gt;
 cd /scratch/$USER&lt;br /&gt;
 ls&lt;br /&gt;
&lt;br /&gt;
3. Edit line 147 of the script.  &lt;br /&gt;
 vi rungms&lt;br /&gt;
Move the cursor down to line 147 using the arrow keys.  It should say &amp;quot;setenv EXTBAS /dev/null&amp;quot;.  Using the arrow keys, move the cursor to the first &amp;quot;/&amp;quot; and then hit &amp;quot;i&amp;quot; to insert text.  Put the path to your external basis file here.  For example, /scratch/$USER/basisset.  Then hit &amp;quot;escape&amp;quot;.  To save the changes and exit vi, type &amp;quot;:&amp;quot; and you should see a colon appear at the bottom of the window.  Type &amp;quot;wq&amp;quot; (which should appear at the bottom of the window next to the colon) and then hit enter.  Now you are done with vi.&lt;br /&gt;
&lt;br /&gt;
=====Creating a Custom Basis Set File=====&lt;br /&gt;
1. To create a custom basis set file, you need create a new text document.  Our group's common practice is to comment out the first line of this file by inserting an exclamation mark (!) followed by noting the specific basis sets and ECPs that are going to be used for each of the atoms.  Let us use the molecule Mo(CO)6, Molybdenum hexacarbonyl, as an example.  Below is the first line of the the external file, which we will call &amp;quot;CUSTOMMO&amp;quot;  (NOTE:  you can use any name for the external file that suits you, as long as it has no spaces and is 8 characters or less).&lt;br /&gt;
&lt;br /&gt;
 ! 6-31G on C and O and LANL2D2 ECP on Mo&lt;br /&gt;
&lt;br /&gt;
2. The next step is to visit the [https://bse.pnl.gov/bse/portal EMSL Basis Set exchange] and select C and O from the periodic table.  Then, on the left of the page, select &amp;quot;6-31G&amp;quot; as the basis set.  Finally, make sure the output is in GAMESS(US) format using the drop-down menu and then click &amp;quot;get basis set&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:C_O_6_31G_basisset.JPG|centre]]&lt;br /&gt;
&lt;br /&gt;
3. A new window should appear with text in it.  For our example case, the text looks like this:&lt;br /&gt;
 &lt;br /&gt;
 !  6-31G  EMSL  Basis Set Exchange Library   10/13/09 11:12 AM&lt;br /&gt;
 ! Elements                             References&lt;br /&gt;
 ! --------                             ----------&lt;br /&gt;
 ! H - He: W.J. Hehre, R. Ditchfield and J.A. Pople, J. Chem. Phys. 56,&lt;br /&gt;
 ! Li - Ne: 2257 (1972).  Note: Li and B come from J.D. Dill and J.A.&lt;br /&gt;
 ! Pople, J. Chem. Phys. 62, 2921 (1975).&lt;br /&gt;
 ! Na - Ar: M.M. Francl, W.J. Petro, W.J. Hehre, J.S. Binkley, M.S. Gordon,&lt;br /&gt;
 ! D.J. DeFrees and J.A. Pople, J. Chem. Phys. 77, 3654 (1982)&lt;br /&gt;
 ! K  - Zn: V. Rassolov, J.A. Pople, M. Ratner and T.L. Windus, J. Chem. Phys.&lt;br /&gt;
 ! 109, 1223 (1998)&lt;br /&gt;
 ! Note: He and Ne are unpublished basis sets taken from the Gaussian&lt;br /&gt;
 ! program&lt;br /&gt;
 ! &lt;br /&gt;
 $DATA&amp;lt;br /&amp;gt;&lt;br /&gt;
 CARBON&lt;br /&gt;
 S   6&lt;br /&gt;
   1   3047.5249000              0.0018347        &lt;br /&gt;
   2    457.3695100              0.0140373        &lt;br /&gt;
   3    103.9486900              0.0688426        &lt;br /&gt;
   4     29.2101550              0.2321844        &lt;br /&gt;
   5      9.2866630              0.4679413        &lt;br /&gt;
   6      3.1639270              0.3623120        &lt;br /&gt;
 L   3&lt;br /&gt;
   1      7.8682724             -0.1193324              0.0689991        &lt;br /&gt;
   2      1.8812885             -0.1608542              0.3164240        &lt;br /&gt;
   3      0.5442493              1.1434564              0.7443083        &lt;br /&gt;
 L   1&lt;br /&gt;
   1      0.1687144              1.0000000              1.0000000&amp;lt;br /&amp;gt;      &lt;br /&gt;
 OXYGEN&lt;br /&gt;
 S   6&lt;br /&gt;
   1   5484.6717000              0.0018311        &lt;br /&gt;
   2    825.2349500              0.0139501        &lt;br /&gt;
   3    188.0469600              0.0684451        &lt;br /&gt;
   4     52.9645000              0.2327143        &lt;br /&gt;
   5     16.8975700              0.4701930        &lt;br /&gt;
   6      5.7996353              0.3585209        &lt;br /&gt;
 L   3&lt;br /&gt;
   1     15.5396160             -0.1107775              0.0708743        &lt;br /&gt;
   2      3.5999336             -0.1480263              0.3397528        &lt;br /&gt;
   3      1.0137618              1.1307670              0.7271586        &lt;br /&gt;
 L   1&lt;br /&gt;
   1      0.2700058              1.0000000              1.0000000        &lt;br /&gt;
 $END&lt;br /&gt;
&lt;br /&gt;
3. Now, copy and paste the text between the $DATA and $END headings onto our external text file, CUSTOMMO.  We also need to change the change the name of each element to the corresponding symbol in the periodic table.  Finally, we need to add the name of the external file next to the element symbol, separated by one space.  Note that there should be a blank line separating the basis set information and the first, commented-out line (The line starting with the '!').  The CUSTOMMO should look like this:&lt;br /&gt;
 &lt;br /&gt;
 ! 6-31G on C and O and LANL2D2 ECP on Mo&amp;lt;br /&amp;gt;&lt;br /&gt;
 C CUSTOMMO&lt;br /&gt;
 S   6&lt;br /&gt;
   1   3047.5249000              0.0018347        &lt;br /&gt;
   2    457.3695100              0.0140373        &lt;br /&gt;
   3    103.9486900              0.0688426        &lt;br /&gt;
   4     29.2101550              0.2321844        &lt;br /&gt;
   5      9.2866630              0.4679413        &lt;br /&gt;
   6      3.1639270              0.3623120        &lt;br /&gt;
 L   3&lt;br /&gt;
   1      7.8682724             -0.1193324              0.0689991        &lt;br /&gt;
   2      1.8812885             -0.1608542              0.3164240        &lt;br /&gt;
   3      0.5442493              1.1434564              0.7443083        &lt;br /&gt;
 L   1&lt;br /&gt;
   1      0.1687144              1.0000000              1.0000000&amp;lt;br /&amp;gt;      &lt;br /&gt;
 O CUSTOMMO&lt;br /&gt;
 S   6&lt;br /&gt;
   1   5484.6717000              0.0018311        &lt;br /&gt;
   2    825.2349500              0.0139501        &lt;br /&gt;
   3    188.0469600              0.0684451        &lt;br /&gt;
   4     52.9645000              0.2327143        &lt;br /&gt;
   5     16.8975700              0.4701930        &lt;br /&gt;
   6      5.7996353              0.3585209        &lt;br /&gt;
 L   3&lt;br /&gt;
   1     15.5396160             -0.1107775              0.0708743        &lt;br /&gt;
   2      3.5999336             -0.1480263              0.3397528        &lt;br /&gt;
   3      1.0137618              1.1307670              0.7271586        &lt;br /&gt;
 L   1&lt;br /&gt;
   1      0.2700058              1.0000000              1.0000000 &lt;br /&gt;
&lt;br /&gt;
4. Repeat Step 3 above but choose Mo and select the LANL2DZ ECP instead.  A new window will pop up with the basis set information as well as the ECP data we need, since we specified the LANL2DZ '''ECP'''.  The ECP data is not inserted into the external file, rather it is placed into the input file itself (More on this later).  &lt;br /&gt;
&lt;br /&gt;
[[File:Mo_LANL2DZ_basisset.JPG|centre]]&lt;br /&gt;
&lt;br /&gt;
5.  After copying the molybdenum basis set information, your fiished external basis set file should look like this:&lt;br /&gt;
 ! 6-31G on C and O and LANL2D2 ECP on Mo&amp;lt;br /&amp;gt;&lt;br /&gt;
 C CUSTOMMO&lt;br /&gt;
 S   6&lt;br /&gt;
   1   3047.5249000              0.0018347        &lt;br /&gt;
   2    457.3695100              0.0140373        &lt;br /&gt;
   3    103.9486900              0.0688426        &lt;br /&gt;
   4     29.2101550              0.2321844        &lt;br /&gt;
   5      9.2866630              0.4679413        &lt;br /&gt;
   6      3.1639270              0.3623120        &lt;br /&gt;
 L   3&lt;br /&gt;
   1      7.8682724             -0.1193324              0.0689991        &lt;br /&gt;
   2      1.8812885             -0.1608542              0.3164240        &lt;br /&gt;
   3      0.5442493              1.1434564              0.7443083        &lt;br /&gt;
 L   1&lt;br /&gt;
   1      0.1687144              1.0000000              1.0000000&amp;lt;br /&amp;gt;      &lt;br /&gt;
 O CUSTOMMO&lt;br /&gt;
 S   6&lt;br /&gt;
   1   5484.6717000              0.0018311        &lt;br /&gt;
   2    825.2349500              0.0139501        &lt;br /&gt;
   3    188.0469600              0.0684451        &lt;br /&gt;
   4     52.9645000              0.2327143        &lt;br /&gt;
   5     16.8975700              0.4701930        &lt;br /&gt;
   6      5.7996353              0.3585209        &lt;br /&gt;
 L   3&lt;br /&gt;
   1     15.5396160             -0.1107775              0.0708743        &lt;br /&gt;
   2      3.5999336             -0.1480263              0.3397528        &lt;br /&gt;
   3      1.0137618              1.1307670              0.7271586        &lt;br /&gt;
 L   1&lt;br /&gt;
   1      0.2700058              1.0000000              1.0000000&amp;lt;br /&amp;gt; &lt;br /&gt;
 Mo CUSTOMO&lt;br /&gt;
 S   3&lt;br /&gt;
   1      2.3610000             -0.9121760        &lt;br /&gt;
   2      1.3090000              1.1477453        &lt;br /&gt;
   3      0.4500000              0.6097109        &lt;br /&gt;
 S   4&lt;br /&gt;
   1      2.3610000              0.8139259        &lt;br /&gt;
   2      1.3090000             -1.1360084        &lt;br /&gt;
   3      0.4500000             -1.1611592        &lt;br /&gt;
   4      0.1681000              1.0064786        &lt;br /&gt;
 S   1&lt;br /&gt;
   1      0.0423000              1.0000000        &lt;br /&gt;
 P   3&lt;br /&gt;
   1      4.8950000             -0.0908258        &lt;br /&gt;
   2      1.0440000              0.7042899        &lt;br /&gt;
   3      0.3877000              0.3973179        &lt;br /&gt;
 P   2&lt;br /&gt;
   1      0.4995000             -0.1081945        &lt;br /&gt;
   2      0.0780000              1.0368093        &lt;br /&gt;
 P   1&lt;br /&gt;
   1      0.0247000              1.0000000        &lt;br /&gt;
 D   3&lt;br /&gt;
   1      2.9930000              0.0527063        &lt;br /&gt;
   2      1.0630000              0.5003907        &lt;br /&gt;
   3      0.3721000              0.5794024        &lt;br /&gt;
 D   1&lt;br /&gt;
   1      0.1178000              1.0000000&lt;br /&gt;
&lt;br /&gt;
-- [[User:M.Zimmer-De Iuliis|mzd]]  21 September 2010&lt;br /&gt;
&lt;br /&gt;
====A Modified BASH Script for Runnning GAMESS(US)====&lt;br /&gt;
Below please find the bash script that we use to run GAMESS(US) on a single node with 8 processors.  &lt;br /&gt;
&lt;br /&gt;
One quirk of GAMESS(US) is that it will NOT write over old or failed jobs that have the same name as the input file you are submitting.  For example:  my input file name is &amp;quot;mo_opt.inp&amp;quot; and I submit this job to the queue.  However, it comes back seconds later with an error.  The log file says that I have typed an incorrect keyword, and lo and behold, I have a comma where it shouldn't be.  Such typos can be common.  If you simply try to re-submit, GAMESS(US) will fail again, because it has written a .log file and some other files to the /scratch/user/gamess-scratch/ directory.  These files must all be deleted before you re-submit your fixed input file.&lt;br /&gt;
&lt;br /&gt;
This script takes care of this annoying problem by deleting failed jobs with the same file name for you.&lt;br /&gt;
&lt;br /&gt;
Here it is:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #PBS -l nodes=1:ppn=8,walltime=48:00:00&lt;br /&gt;
 &lt;br /&gt;
 ## To submit type: qsub x.sh&lt;br /&gt;
 &lt;br /&gt;
 # If not an interactive job (i.e. -I), then cd into the directory where&lt;br /&gt;
 # I typed qsub.&lt;br /&gt;
 if [ &amp;quot;$PBS_ENVIRONMENT&amp;quot; != &amp;quot;PBS_INTERACTIVE&amp;quot; ]; then&lt;br /&gt;
   if [ -n &amp;quot;$PBS_O_WORKDIR&amp;quot; ]; then&lt;br /&gt;
     cd $PBS_O_WORKDIR&lt;br /&gt;
   fi&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 # the input file is typically named something like &amp;quot;gamesjob.inp&amp;quot;&lt;br /&gt;
 # so the script will be run like &amp;quot;$SCINET_RUNGMS gamessjob 00 8 8&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 find /scratch/user/gamess-scratch -type f -name ${NAME:-safety_net}\* -exec /bin/rm {} \;&lt;br /&gt;
 &lt;br /&gt;
 # loading modules should be done in the submission script.&lt;br /&gt;
 # It is not recommended by SciNet staff to put this command&lt;br /&gt;
 # in the .bashrc file.&lt;br /&gt;
 module load gamess&lt;br /&gt;
 &lt;br /&gt;
 # run the program&lt;br /&gt;
 &lt;br /&gt;
 /scratch/user/rungms $NAME 00 8 8 &amp;gt;&amp;amp; $NAME.log&lt;br /&gt;
&lt;br /&gt;
====A Script to Add the $VIB Group for Hessian Restarts in GAMESS(US)====&lt;br /&gt;
&lt;br /&gt;
Sometimes, a optimization + vibrational analysis or just a plain vibrational analysis must be restarted.  This can be because the two day time limit has been exceeded or perhaps there was an error during calculation.  In any case, when this happens, the job must be restarted.  In GAMESS(US), you can restart a vibrational analysis from a previous one and it will utilize the frequencies that were already computed in the failed run.&lt;br /&gt;
&lt;br /&gt;
For example, if one submits the input file &amp;quot;job_name.inp&amp;quot; and it fails before it has finished, then one must utilize the file &amp;quot;job_name.rst&amp;quot;, which contains data that is required to restart the calculation.  This file is located in the /scratch/user/gamess-scratch directory.  Data from the &amp;quot;job_name.rst&amp;quot; file must be appended at the end of the new input file (after the coordinates and ECP section if it is present) to restart the calculation, letus call it &amp;quot;job_name_restart.inp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A shortened version of the &amp;quot;job_name.rst&amp;quot; file looks like this:&lt;br /&gt;
&lt;br /&gt;
  ENERGY/GRADIENT/DIPOLE RESTART DATA FOR RUNTYP=HESSIAN&lt;br /&gt;
  job_name                           &lt;br /&gt;
  $VIB   &lt;br /&gt;
         IVIB=   0 IATOM=   0 ICOORD=   0 E=    -3717.1435124522&lt;br /&gt;
 -5.165258381E-04 1.584665821E-02-1.206270555E-02-2.241461728E-03 3.176050715E-03&lt;br /&gt;
 -5.706738823E-04 2.502034151E-03 5.130112290E-04-2.716945939E-03 1.357008279E-03&lt;br /&gt;
 -1.059915305E-03 1.693526456E-03-2.957638907E-04-5.994938737E-04 9.684054361E-04&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The text eventually ends with one blank line. The $VIB heading and all of the text after $VIB must be appended to the end of file &amp;quot;job_name_restart.inp&amp;quot; and then &amp;quot; $END&amp;quot; must be inserted at the very end of the file.&lt;br /&gt;
&lt;br /&gt;
One could do this, one could cut cut and paste in a text editor, but we have written a small script that will do this automatically.  We call it &amp;quot;.vib.sh&amp;quot; but you can call it whatever you like.  Here it is:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # script to add vibrational data for a hessian restart&lt;br /&gt;
 &lt;br /&gt;
 awk '/\$VIB/{p=1}p;END{print &amp;quot; $END&amp;quot;}' /scratch/user/gamess-scratch/$NAME1.rst &amp;gt;&amp;gt; $NAME2.inp&lt;br /&gt;
&lt;br /&gt;
To use it, simply copy it into a new text file with the extension &amp;quot;.sh&amp;quot; and make it executable.  Also, you will need to edit the location of the &amp;quot;/scratch/user/gamess-scratch/ directory to match your user name.  The two variables in the script, NAME1 and NAME2, represent the name of your &amp;quot;.rst&amp;quot; file and your new &amp;quot;.inp&amp;quot; file, respectively.  In the example above, NAME1=job_name (that is, the same name as the .rst file that contains the $VIB data and that was created in the /gamess-scrsatch/ directory) and NAME2=job_name_restart (that is, the name of the new input file that you have prepared and want to copy the $VIB data into).&lt;br /&gt;
&lt;br /&gt;
To run it on a gpc node without submitting it to the job queue, type:&lt;br /&gt;
&lt;br /&gt;
 NAME1=job_name NAME2=job_name_restart ./vib.sh&lt;br /&gt;
&lt;br /&gt;
To run it in the queue, type:&lt;br /&gt;
&lt;br /&gt;
 qsub vib.sh -v NAME1=job_name,NAME2=job_name_restart &lt;br /&gt;
&lt;br /&gt;
-special thanks to Ramses for help with this&lt;br /&gt;
&lt;br /&gt;
-- [[User:M.Zimmer-De Iuliis|mzd]]  30 September 2010&lt;br /&gt;
&lt;br /&gt;
====Most Commonly Used Headers in The Fekl Lab====&lt;br /&gt;
&lt;br /&gt;
After about a year of using GAMESS(US), we have found that we are most often doing optimizations, frequency analyses, transition state searches and IRC calculations using DFT methods.  Here are the input decks thatwe found have worked well for inorganic and organometallic compounds.&lt;br /&gt;
&lt;br /&gt;
=====Optimization Plus Frequency (for a neutral, singlet)=====&lt;br /&gt;
 &lt;br /&gt;
 $CONTRL SCFTYP=RHF RUNTYP=OPTIMIZE DFTTYP=''FILL_IN_YOUR_PREFEENCE_HERE'' MAXIT=199 MULT=1 NOSYM=1&lt;br /&gt;
  ECP=READ $END&lt;br /&gt;
 $SYSTEM TIMLIM=2800 MWORDS=20 MEMDDI=50 PARALL=.TRUE. $END&lt;br /&gt;
 $SCF DIRSCF=.TRUE. FDIFF=.f. DIIS=.T. SOSCF=.F. DAMP=.T. $END&lt;br /&gt;
 $STATPT OPTTOL=0.00001 NSTEP=500 HSSEND=.t. $END&lt;br /&gt;
 $FORCE TEMP=298.15 PURIFY=.t. PROJCT=.t. $END&lt;br /&gt;
 $DATA&lt;br /&gt;
&lt;br /&gt;
=====Frequency Only (for a neutral, singlet)=====&lt;br /&gt;
&lt;br /&gt;
 $CONTRL SCFTYP=RHF RUNTYP=HESSIAN DFTTYP=''FILL_IN_YOUR_PREFEENCE_HERE'' MAXIT=199 MULT=1 NOSYM=1&lt;br /&gt;
  ECP=READ $END&lt;br /&gt;
 $SYSTEM TIMLIM=2800 MWORDS=20 MEMDDI=50 PARALL=.TRUE. $END&lt;br /&gt;
 $SCF DIRSCF=.TRUE. FDIFF=.f. DIIS=.T. SOSCF=.F. DAMP=.T. $END&lt;br /&gt;
 $FORCE METHOD=SEMINUM VIBANL=.TRUE. PROJCT=.T. PURIFY=.T. $END&lt;br /&gt;
 $DATA&lt;br /&gt;
&lt;br /&gt;
=====Transition State Search (for a neutral, singlet)=====&lt;br /&gt;
&lt;br /&gt;
 $CONTRL SCFTYP=RHF RUNTYP=SADPOINT DFTTYP=''FILL_IN_YOUR_PREFEENCE_HERE'' MAXIT=199 MULT=1 NOSYM=1&lt;br /&gt;
  ECP=READ $END&lt;br /&gt;
 $SYSTEM TIMLIM=2850 MWORDS=20 MEMDDI=50 PARALL=.TRUE. $END&lt;br /&gt;
 $SCF DIRSCF=.TRUE. FDIFF=.f. DIIS=.T. SOSCF=.F. $END&lt;br /&gt;
 $STATPT STSTEP=0.05 OPTTOL=0.00001 NSTEP=500 HESS=CALC HSSEND=.t. &lt;br /&gt;
  STPT=.FALSE. $END&lt;br /&gt;
 $FORCE METHOD=SEMINUM VIBANL=.TRUE. PURIFY=.T. PROJCT=.T. $END&lt;br /&gt;
 $DATA&lt;br /&gt;
&lt;br /&gt;
=====IRC (Intrinsic Reaction Coordinate following forward reaction) Calculation (for a neutral, singlet)=====&lt;br /&gt;
&lt;br /&gt;
 $CONTRL SCFTYP=RHF RUNTYP=IRC DFTTYP=''FILL_IN_YOUR_PREFEENCE_HERE'' MAXIT=199 MULT=1 NOSYM=1&lt;br /&gt;
  ECP=READ $END&lt;br /&gt;
 $IRC OPTTOL=0.00001 STRIDE=0.05 NPOINT=5000 SADDLE=.TRUE. FORWRD=.F.&lt;br /&gt;
 $END&lt;br /&gt;
 $SYSTEM TIMLIM=2850 MWORDS=20 MEMDDI=50 PARALL=.TRUE. $END&lt;br /&gt;
 $SCF DIRSCF=.TRUE. FDIFF=.f. $END&lt;br /&gt;
 $FORCE TEMP=298.15 PURIFY=.t. PROJCT=.t. $END&lt;br /&gt;
 $DATA&lt;br /&gt;
&lt;br /&gt;
-- [[User:M.Zimmer-De Iuliis|mzd]]  21 September 2010&lt;br /&gt;
&lt;br /&gt;
====How to Run an IRC Calculation Using GAMESS(US)====&lt;br /&gt;
&lt;br /&gt;
An IRC or Intrinsic Reaction Coordinate calculation follows the imaginary mode of the vibrational analysis of a transition state calculation.  In GAMESS(US), you can choose to follow the forward (towards the products) or backward (toward the reactants) direction.  As shown above in the IRC header that we use, the direction of the IRC calculation is controlled by the &amp;quot;FORWRD&amp;quot; key word.  Using &amp;quot;FORWRD=.T.&amp;quot; means that the IRC is following the forward direction, while using &amp;quot;FORWRD=.F.&amp;quot; means that the IRC calculation is following the backward direction.&lt;br /&gt;
&lt;br /&gt;
Let us say we want to perform an IRC.  In order to perform an IRC calculation, you must first perform a vibrational analysis of you molecule and check to ensure there is only 1 negative frequency.  If that is the case, then the vibrational analysis completed successfully and there will be a file, let us call it &amp;quot;job_name.dat&amp;quot; in the &amp;quot;/users/$USER/gamess-scratch/&amp;quot; directory (where $USER is your user name) with the extension &amp;quot;.dat&amp;quot;.  In this file is data that is required for the IRC input file.&lt;br /&gt;
&lt;br /&gt;
To prepare your IRC input file, prepare an input file using the coordinates of the optimized structure of the transition state.  This can be from ChemCraft or Avogadro or MacMolPlt - what ever you prefer to use.  Then copy and paste the IRC header above or use your own parameters. Call it whatever you want, as long as it has an &amp;quot;.inp&amp;quot; extension. Let us call in &amp;quot;irc_job.inp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
For example, the &amp;quot;STRIDE&amp;quot; value determines the &amp;quot;size&amp;quot; of the steps between each point on the IRC graph.  If you increase the value of the stride, say from 0.05 to 0.1, then the steps in between each point become larger and you will approach the minimum faster (this will give you fewer data points should you chose to plot the IRC data).  Decreasing the stride value, say from 0.05 to 0.01 will make the steps in between each point become smaller and you may not reach the minimum of the reaction coordinate in the alloted time period.&lt;br /&gt;
&lt;br /&gt;
You should now have an input file with an IRC header, the coordinates of the transition state and basis set and ECP information called &amp;quot;irc_job.inp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now you need to use the &amp;quot;job_name.dat&amp;quot; file in the &amp;quot;/users/$USER/gamess-scratch/&amp;quot; In this file are a number of blocks of data that are sandwiched between a line that contains only &amp;quot; $HESS&amp;quot; and a line that contains only &amp;quot; $END&amp;quot;.  What you need is the LAST of these blocks of text and it has to be copied and pasted directly below the last entry of your input file.&lt;br /&gt;
&lt;br /&gt;
This can be difficult and time consuming, as the .dat files can be very large (sometimes over 150 MB) and cumbersome to navigate through.  However, we have written a script, similar to the .vib.sh script, that can help you out with this.  Basically, this script does all the copying and pasting for you.  &lt;br /&gt;
&lt;br /&gt;
Here it is:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # script to add hessian data for an IRC calculation&lt;br /&gt;
 &lt;br /&gt;
 awk '/\$HESS/{arr=&amp;quot;&amp;quot;;f=1} f {arr=(arr)?arr ORS $0:$0} /\$END/{f=0} END {print arr}' /scratch/$USER/gamess-scratch/$DAT.dat &amp;gt;&amp;gt; $IN.inp&lt;br /&gt;
&lt;br /&gt;
To use it, simply copy it into a new text file with the name &amp;quot;irc.sh&amp;quot; and make it executable. Also, you will need to edit the location of the &amp;quot;/scratch/user/gamess-scratch/ directory to match your user name. The two variables in the script, $DAT and $IN, represent the name of your &amp;quot;.dat&amp;quot; file and your new &amp;quot;.inp&amp;quot; file, respectively. Using our current example, $DAT=job_name and In the example above, $IN=irc_job (that is, the same name as the .dat file that contains the $HESS data and that was created in the /gamess-scrsatch/ directory) and IN=irc_job (that is, the name of the new input file that you have prepared and want to copy the $HESS data into). &lt;br /&gt;
&lt;br /&gt;
To run it on a gpc node without submitting it to the job queue, type:&lt;br /&gt;
&lt;br /&gt;
 DAT=job_name IN=irc_job ./irc.sh&lt;br /&gt;
&lt;br /&gt;
To run it in the queue, type:&lt;br /&gt;
&lt;br /&gt;
 qsub irc.sh -v DAT=job_name,IN=irc_job &lt;br /&gt;
&lt;br /&gt;
-- [[User:M.Zimmer-De Iuliis|mzd]]  21 October 2010&lt;br /&gt;
&lt;br /&gt;
===Vienna Ab-initio Simulation Package (VASP)===&lt;br /&gt;
Please refer to the [http://www.vasp.at VASP page].&lt;br /&gt;
&lt;br /&gt;
User-supplied content below.&lt;br /&gt;
&lt;br /&gt;
====Tips from the Polanyi Lab====&lt;br /&gt;
Using VASP on SciNet&lt;br /&gt;
&lt;br /&gt;
Logon using SSH&lt;br /&gt;
login.scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
then ssh to the TCS cluster&lt;br /&gt;
ssh tcs01&lt;br /&gt;
&lt;br /&gt;
change directory to &lt;br /&gt;
cd /scratch/imcnab/test/Si111 - or whatever other directory is convenient.&lt;br /&gt;
&lt;br /&gt;
VASP is contained in the directory imcnab/bin&lt;br /&gt;
&lt;br /&gt;
To submit a job, first edit (at least) the POSCAR file and other VASP&lt;br /&gt;
input files as necessary.&lt;br /&gt;
&lt;br /&gt;
=====Input Files=====&lt;br /&gt;
The minimum set of input files is:&lt;br /&gt;
&lt;br /&gt;
'''vasp.script''' - script file telling TCS to run a VASP job - must be edited to run in current working directory.&lt;br /&gt;
&lt;br /&gt;
'''POSCAR''' - specifies supercell geometry and &amp;quot;ionic&amp;quot; positions (i.e. atomic centres) and whether relaxation allowed. Ionic positions may be given in cartesion coordinates (x,y,z in A) or &amp;quot;absolute&amp;quot;, which are fractions of the unit cell vectors. CONTCAR is always in absolute coords, so after the first run of any job, you'll find yourself running in absolute coords. VMD can be used to change these back to cartesian coordinates.&lt;br /&gt;
&lt;br /&gt;
'''INCAR''' - specifies parameters to run the job. INCAR is free format - can put input commands in ANY order.&lt;br /&gt;
&lt;br /&gt;
'''POTCAR''' - specifies the potentials to use for each atomic type. Must be in the same order as the atoms are first met in POSCAR&lt;br /&gt;
&lt;br /&gt;
'''KPOINTS''' - specifies the number and position of K-points to use in the calculation.&lt;br /&gt;
&lt;br /&gt;
Any change of name or directory needs to be edited into the job script. The job script name is &amp;quot;vasp.script&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
VASP attempts to read initial wavefunctions from WAVECAR, so if a job is run in steps, leaving the WAVECAR file on the working directory is an efficient way to start the next stage of the calculation&lt;br /&gt;
&lt;br /&gt;
VASP also writes CONTCAR which is of the same format as POSCAR, and can simply be renamed if it is to be used as the starting point for a new job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Submit the job to load-leveller with the command llsubmit ./vasp.script from the correct working directory.&lt;br /&gt;
&lt;br /&gt;
can check the status of a job with llq&lt;br /&gt;
&lt;br /&gt;
can cancel a job using llcancel tcs-fXXnYY.$PID where tcs number etc is shown by llq&lt;br /&gt;
&lt;br /&gt;
== &lt;br /&gt;
INPUT FILES ==&lt;br /&gt;
&lt;br /&gt;
The minimum set of input files is:&lt;br /&gt;
&lt;br /&gt;
'''vasp.script''' - script file telling TCS to run a VASP job - must be edited to run in current working directory.&lt;br /&gt;
&lt;br /&gt;
'''POSCAR''' - specifies supercell geometry and &amp;quot;ionic&amp;quot; positions (i.e. atomic centres) and whether relaxation allowed. Ionic positions may be given in cartesion coordinates (x,y,z in A) or &amp;quot;absolute&amp;quot;, which are fractions of the unit cell vectors. CONTCAR is always in absolute coords, so after the first run of any job, you'll find yourself running in absolute coords. VMD can be used to change these back to cartesian coordinates.&lt;br /&gt;
&lt;br /&gt;
'''INCAR'''  - specifies parameters to run the job. INCAR is free format - can put input commands in ANY order.&lt;br /&gt;
&lt;br /&gt;
'''POTCAR''' - specifies the potentials to use for each atomic type. Must be in the same order as the atoms are first met in POSCAR&lt;br /&gt;
&lt;br /&gt;
'''KPOINTS''' - specifies the number and position of K-points to use in the calculation.&lt;br /&gt;
&lt;br /&gt;
Any change of name or directory needs to be edited into the job script.&lt;br /&gt;
The job script name is &amp;quot;'''vasp.script'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
VASP attempts to read initial wavefunctions from WAVECAR, so if a job is&lt;br /&gt;
run in steps, leaving the WAVECAR file on the working directory is an &lt;br /&gt;
efficient way to start the next stage of the calculation&lt;br /&gt;
&lt;br /&gt;
VASP also writes CONTCAR which is of the same format as POSCAR, and can&lt;br /&gt;
simply be renamed if it is to be used as the starting point for a new job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Submit the job to load-leveller with the command&lt;br /&gt;
llsubmit ./vasp.script from the correct working directory.&lt;br /&gt;
&lt;br /&gt;
can check the status of a job with &lt;br /&gt;
llq&lt;br /&gt;
&lt;br /&gt;
can cancel a job using&lt;br /&gt;
llcancel tcs-fXXnYY.$PID    where tcs number etc is shown by llq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== GENERAL NOTES =====&lt;br /&gt;
&lt;br /&gt;
MUCH faster to use ISPIN=1, no-spin (corresponds to RHF, rather than &lt;br /&gt;
ISPIN=2 which corresponds to URHF). So far, I've not found a system where the atom positions differ, or where the calculated electronic energy differs by more than 1E-4, which is the convergence &lt;br /&gt;
criteria set.&lt;br /&gt;
&lt;br /&gt;
MUCH faster to use real space LREAL = A, NSIM=4. &lt;br /&gt;
&lt;br /&gt;
So, ''always'' optimize in real space first, then re-optimize in reciprocal space. This does NOT guarantee, a one-step optimization in reciprocal space. May still need to progressively&lt;br /&gt;
relax a large system.&lt;br /&gt;
&lt;br /&gt;
'''Relaxing a large system.'''&lt;br /&gt;
If you attempt to relax a large system in one step, it will usually fail.&lt;br /&gt;
&lt;br /&gt;
The starting geometry is usually an unrelaxed molecule above an unrelaxed surface.&lt;br /&gt;
The bottom plane of the surface will NEVER be relaxed, because this corresponds to the fixed boundary condition of REALITY. &lt;br /&gt;
&lt;br /&gt;
First, relax the molecule alone (assuming you have already found a good starting position from single point calcultions, place the molecule closer to the surface than you think it should be (say 0.9 VdW radii away).&lt;br /&gt;
&lt;br /&gt;
Then ALSO allow the top layer of the surface to relax.&lt;br /&gt;
Then ALSO allow the second top layer of the surface to relax... etc... etc.&lt;br /&gt;
&lt;br /&gt;
If this DOESN'T WORK: Then relax X,Y and Z separately in iterations.&lt;br /&gt;
Example. For the following problem, representing layers of the crystal going DOWN from the top (Z pointing to the top of the screen)&lt;br /&gt;
&lt;br /&gt;
Molecule&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
we can try the following relaxation schemes:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Successive relaxation, Layer by Layer:&amp;lt;br /&amp;gt;&lt;br /&gt;
(1) &amp;lt;br /&amp;gt;&lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2)&amp;lt;br /&amp;gt; &lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(3)&amp;lt;br /&amp;gt; &lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
etc. etc... if this works then you're fine. However, it can happen that even by Layer 2, you're running into real problems, and the ionic relaxation NEVER converges. In which case, I have found the following scheme (and variations thereof) useful:&lt;br /&gt;
&lt;br /&gt;
(1)&amp;lt;br /&amp;gt; &lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2) &amp;lt;br /&amp;gt;&lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(3) &amp;lt;br /&amp;gt;&lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IF (3) DOESN'T converge THEN TRY&lt;br /&gt;
&lt;br /&gt;
(2')&amp;lt;br /&amp;gt;&lt;br /&gt;
Molecule Z   Relax, XY FIXED&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  Z   Relax, XY FIXED&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- you are allowing the top layers to move only UP or DOWN, while allowing the intermediate&lt;br /&gt;
layer 2 to fully relax (actually, there is no way of telling VASP to move ALL atoms by the SAME deltaZ, but that appears to be the effect.&lt;br /&gt;
Followed by&lt;br /&gt;
&lt;br /&gt;
(2&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If (2&amp;quot;) doesn't work, you need to go back to the output of (2') and vary the cycle - perhaps something like:&lt;br /&gt;
(2&amp;quot;')&amp;lt;br /&amp;gt;&lt;br /&gt;
Molecule XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 1  XYZ Relax&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 2  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 3  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 4  XYZ fixed&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 5 - fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
Layer 6 - Valence H's, fixed layer&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then try (2&amp;quot;) again.&lt;br /&gt;
&lt;br /&gt;
Repeat as necessary. This scheme does appear to work quite well for big unit cells. It can be very difficult to relax as many layers as necessary in a big unit cell.&lt;br /&gt;
&lt;br /&gt;
Experience on the One Per Corner Hole problem shows that it may be necessary to have a large number of UNRELAXED (i.e. BULK silicon) layers underneath the relaxed layers in order to get physically meaningful answers. This is because silicon is so elastic.&lt;br /&gt;
&lt;br /&gt;
===== Problems and solutions: =====&lt;br /&gt;
&lt;br /&gt;
If getting ZBRENT errors, try changing ALGO. Usually use ALGO = Fast, change to ALGO = Normal. With ALGO = Normal, NFREE now DOES correspond to degrees of freedom (maximum suggested setting is 20). Haven't found this terribly helpful.&lt;br /&gt;
&lt;br /&gt;
Many calculations seem to fail after 20 or 30 ionic steps. I suspect a memory leak.&lt;br /&gt;
&lt;br /&gt;
Sometimes the calculation appears to lose WAVECAR... this is not a disaster, just means a slight increase in start time as the first wavefunction is calculated.&lt;br /&gt;
&lt;br /&gt;
If calculation does not finish nicely, can force a WAVECAR generation by doing a purely electronic calculation (these are pretty fast).&lt;br /&gt;
&lt;br /&gt;
VASP is VERY slow at relaxing molecules at surfaces. This is because it doesn't know a molecule is a connected entity. It treats every atom independently. &lt;br /&gt;
&lt;br /&gt;
THEREFORE, MUCH MUCH faster to try molecular positions by hand first. &lt;br /&gt;
Do some sample calculations at a few geometries to find a good starting point.&lt;br /&gt;
&lt;br /&gt;
ALSO, once you think you know where the molecule is to be placed, put it too close to the surface, and let it relax outwards... the forces close to the surface are repulsive, and much steeper, so relaxation is FASTER in this direction.&lt;br /&gt;
&lt;br /&gt;
=='''Climate Modelling'''==&lt;br /&gt;
&lt;br /&gt;
The Community Earth System Model (CESM) is a fully-coupled, global climate model that provides state-of-the-art computer simulations of the Earth's past, present, and future climate states.&lt;br /&gt;
&lt;br /&gt;
Development of a comprehensive CESM that accurately represents the principal components of the climate system and their couplings requires both wide intellectual participation and computing capabilities beyond those available to most U.S. institutions. The CESM, therefore, must include an improved framework for coupling existing and future component models developed at multiple institutions, to permit rapid exploration of alternate formulations. This framework must be amenable to components of varying complexity and at varying resolutions, in accordance with a balance of scientific needs and resource demands. In particular, the CESM must accommodate an active program of simulations and evaluations, using an evolving model to address scientific issues and problems of national and international policy interest.&lt;br /&gt;
&lt;br /&gt;
User guides and information on each version of the model can be found at the following links:&lt;br /&gt;
&lt;br /&gt;
CCSM3: http://www.cesm.ucar.edu/models/ccsm3.0/&lt;br /&gt;
CCSM4: http://www.cesm.ucar.edu/models/ccsm4.0/&lt;br /&gt;
CESM1: http://www.cesm.ucar.edu/models/cesm1.0/&lt;br /&gt;
&lt;br /&gt;
Please see:&lt;br /&gt;
&lt;br /&gt;
===[[Installing CCSM3]]===&lt;br /&gt;
&lt;br /&gt;
===[[Running CCSM3]]===&lt;br /&gt;
&lt;br /&gt;
===[[Installing CCSM4]]===&lt;br /&gt;
&lt;br /&gt;
===[[Running CCSM4]]===&lt;br /&gt;
&lt;br /&gt;
===[[Post Processing CCSM Output]]===&lt;br /&gt;
&lt;br /&gt;
===[[CCSM4/CESM1 TCS Simulation List]]===&lt;br /&gt;
&lt;br /&gt;
==Engineering==&lt;br /&gt;
&lt;br /&gt;
===ANSYS===&lt;br /&gt;
&lt;br /&gt;
Please refer to the [[Ansys]] page.&lt;br /&gt;
&lt;br /&gt;
==Medicine/Bio==&lt;br /&gt;
&lt;br /&gt;
==High Energy Physics==&lt;br /&gt;
&lt;br /&gt;
==Structural Biology==&lt;br /&gt;
Molecular simulation of proteins, lipids, carbohydrates, and other biologically relevant molecules.&lt;br /&gt;
===Molecular Dynamics (MD) simulation===&lt;br /&gt;
====GROMACS====&lt;br /&gt;
Please refer to the [[gromacs|GROMACS]] page&lt;br /&gt;
====AMBER====&lt;br /&gt;
Please refer to the [[amber|AMBER]] page&lt;br /&gt;
====NAMD====&lt;br /&gt;
'''Note: the instructions below are rather old, and should not be needed by most users. A version of namd is available on the GPC in the module &amp;lt;tt&amp;gt;namd&amp;lt;/tt&amp;gt;. For current information see the [[Namd]] page'''&lt;br /&gt;
&lt;br /&gt;
NAMD is one of the better scaling MD packages out there. With sufficiently large systems, it is able to scale to hundreds or thousands of cores on Scinet. Below are details for compiling and running NAMD on Scinet.&lt;br /&gt;
&lt;br /&gt;
More information regarding performance and different compile options coming soon...&lt;br /&gt;
&lt;br /&gt;
=====Compiling NAMD for GPC=====&lt;br /&gt;
Ensure the proper compiler/mpi modules are loaded.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module load intel&lt;br /&gt;
module load openmpi/1.3.3-intel-v11.0-ofed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Compile Charm++ and NAMD'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Unpack source files and get required support libraries&lt;br /&gt;
tar -xzf NAMD_2.7b1_Source.tar.gz&lt;br /&gt;
cd NAMD_2.7b1_Source&lt;br /&gt;
tar -xf charm-6.1.tar&lt;br /&gt;
wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz&lt;br /&gt;
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl-linux-x86_64.tar.gz&lt;br /&gt;
tar -xzf fftw-linux-x86_64.tar.gz; mv linux-x86_64 fftw&lt;br /&gt;
tar -xzf tcl-linux-x86_64.tar.gz; mv linux-x86_64 tcl&lt;br /&gt;
#Compile Charm++&lt;br /&gt;
cd charm-6.1&lt;br /&gt;
./build charm++ mpi-linux-x86_64 icc --basedir /scinet/gpc/mpi/openmpi/1.3.3-intel-v11.0-ofed/ --no-shared -O -DCMK_OPTIMIZE=1&lt;br /&gt;
cd ..&lt;br /&gt;
#Compile NAMD. &lt;br /&gt;
#Edit arch/Linux-x86_64-icc.arch and add &amp;quot;-lmpi&amp;quot; to the end of the CXXOPTS and COPTS line.&lt;br /&gt;
#Make a builds directory if you want different versions of NAMD compiled at the same time.&lt;br /&gt;
mkdir builds&lt;br /&gt;
./config builds/Linux-x86_64-icc --charm-arch mpi-linux-x86_64-icc&lt;br /&gt;
cd builds/Linux-x86_64-icc/&lt;br /&gt;
make -j4 namd2 # Adjust value of j as desired to specify number of simultaneous make targets. &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--[[User:Cmadill|Cmadill]] 16:18, 27 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=====Running Fortran=====&lt;br /&gt;
On the development nodes, there is an old gcc. The associated libraries are not on the compute nodes. Ensure the line:&lt;br /&gt;
&lt;br /&gt;
module load gcc&lt;br /&gt;
&lt;br /&gt;
is in your .bashrc file.&lt;br /&gt;
&lt;br /&gt;
====LAMMPS====&lt;br /&gt;
[[Image:StrongScalingLAMMPS.png|thumb|320px|right|Strong scaling test on GPC with OpenMPI and IntelMPI on Ethernet and InfiniBand]]&lt;br /&gt;
[[Image:WeakScalingLAMMPS.png|thumb|320px|right|Weak scaling test on GPC with OpenMPI and IntelMPI on Ethernet and InfiniBand]]&lt;br /&gt;
LAMMPS is a parallel MD code that can be found [http://lammps.sandia.gov/ here].&lt;br /&gt;
&lt;br /&gt;
'''Compiling LAMMPS on GPC'''&lt;br /&gt;
&lt;br /&gt;
First, make sure the ''intel/intel-v11.1.072'' and ''openmpi/1.4.1-intel-v11.0-ofed'' modules are loaded.&lt;br /&gt;
&lt;br /&gt;
To download LAMMPS into your directory, instructions can be found [http://lammps.sandia.gov/download.html here].&lt;br /&gt;
&lt;br /&gt;
In ''src/MAKE/Makefile.openmpi'', make the following changes:&lt;br /&gt;
&lt;br /&gt;
FFT_INC = -DFFT_NONE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# FFT_PATH =&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# FFT_LIB =&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the FFT library is required for using PPPM from the KSPACE package.&lt;br /&gt;
&lt;br /&gt;
In the ''src'' directory, run ''make openmpi'', which should produce a ''lmp_openmpi'' executable.&lt;br /&gt;
&lt;br /&gt;
--[[User:sellan|sellan]] 14:08 Jul 28 2011&lt;br /&gt;
&lt;br /&gt;
'''Scaling Tests on GPC'''&lt;br /&gt;
&lt;br /&gt;
Results from strong scaling tests for LAMMPS using EAM potentials on GPC are shown in the graph on the right.  Test simulation ran 500 timesteps for 4,000,000 atoms.&lt;br /&gt;
&lt;br /&gt;
Results from weak scaling tests for LAMMPS using EAM potentials on GPC are shown in the graph on the right.  Test simulation ran 500 timesteps for 32,000 atoms per processor.&lt;br /&gt;
&lt;br /&gt;
OpenMPI version used: openmpi/1.4.1-intel-v11.0-ofed&lt;br /&gt;
&lt;br /&gt;
IntelMPI version used: intelmpi/impi-4.0.0.013&lt;br /&gt;
&lt;br /&gt;
LAMMPS version used: 15 Jan 2010&lt;br /&gt;
&lt;br /&gt;
'''Summary of Scaling Tests'''&lt;br /&gt;
&lt;br /&gt;
Results show good scaling for both OpenMPI and IntelMPI on Ethernet up to 16 processors, after which performance begins to suffer.  On Infiniband, excellent scaling is maintained to 512 processors.&lt;br /&gt;
&lt;br /&gt;
IntelMPI shows slightly better performance compared to OpenMPI when running with Infiniband.&lt;br /&gt;
&lt;br /&gt;
--[[User:jchu|jchu]] 14:08 Feb 2, 2010&lt;br /&gt;
&lt;br /&gt;
===Monte Carlo (MC) simulation===&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=GPU_Benchmarks&amp;diff=9396</id>
		<title>GPU Benchmarks</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=GPU_Benchmarks&amp;diff=9396"/>
		<updated>2018-08-31T23:23:20Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Instructions for running the Gromacs GPU Benchmark Single Node test case on Linux: &lt;br /&gt;
&lt;br /&gt;
1. Download [https://wiki.scinet.utoronto.ca/wiki/images/a/aa/GROMACS_GPU_BENCH.tar.gz Gromacs GPU Benchmark]&lt;br /&gt;
&lt;br /&gt;
2. Tar and unzip&lt;br /&gt;
&lt;br /&gt;
3. Run &amp;quot;build.sh&amp;quot; script with either &amp;quot;OPENCL&amp;quot; or &amp;quot;CUDA&amp;quot; &lt;br /&gt;
&lt;br /&gt;
4. Run benchmark script run.sh&lt;br /&gt;
&lt;br /&gt;
5. Report performance of ns/day on a single node.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Running_CCSM4&amp;diff=9395</id>
		<title>Running CCSM4</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Running_CCSM4&amp;diff=9395"/>
		<updated>2018-08-31T23:22:53Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''It is important to point out that all updates to the model system will only occur with CESM1.0 updates, not with CCSM4.0. It is also important to note that CCSM4 is a subset of CESM1. Although CESM1 supersedes CCSM4, users can run all CCSM4 experiments from the CESM1 code base.&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To run interactively on GPC interactive queue or TCS on small subset of interactive processors, see the instructions below. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scientifically validated CESM1 runs are found in the list below (including a complete list of the model resolutions):&lt;br /&gt;
&lt;br /&gt;
/project/ccsm/cesm1_current/scripts/create_newcase --list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
                             CESM1.0 README&lt;br /&gt;
  &lt;br /&gt;
 For both a quick start as well as a detailed summary of creating and running &lt;br /&gt;
 a CESM model case, see the CESM1.0 User's Guide at&lt;br /&gt;
 http://www.cesm.ucar.edu/models/cesm1.0&lt;br /&gt;
  &lt;br /&gt;
 IMPORTANT INFORMATION ABOUT SCIENTIFIC VALIDATION&lt;br /&gt;
  &lt;br /&gt;
   CESM1.0 has the flexibility to configure cases with many different &lt;br /&gt;
   combinations of component models, grids, and model settings, but this &lt;br /&gt;
   version of CESM has only been validated scientifically for the following &lt;br /&gt;
   fully active configurations:&lt;br /&gt;
 &lt;br /&gt;
      1.9x2.5_gx1v6   B_1850_CN&lt;br /&gt;
      1.9x2.5_gx1v6   B_1850_RAMPCO2_CN&lt;br /&gt;
      1.9x2.5_gx1v6   B_1850-2000_CN&lt;br /&gt;
 &lt;br /&gt;
      1.9x2.5_gx1v6   B_1850_CAM5&lt;br /&gt;
 &lt;br /&gt;
      0.9x1.25_gx1v6  B_1850_CN&lt;br /&gt;
      0.9x1.25_gx1v6  B_1850_RAMPCO2_CN&lt;br /&gt;
      0.9x1.25_gx1v6  B_1850-2000_CN&lt;br /&gt;
 &lt;br /&gt;
      0.9x1.25_gx1v6  B_1850_BGC-BPRP&lt;br /&gt;
      0.9x1.25_gx1v6  B_1850_BGC-BDRD&lt;br /&gt;
      0.9x1.25_gx1v6  B_1850-2000_BGC-BPRP&lt;br /&gt;
      0.9x1.25_gx1v6  B_1850-2000_BGC-BDRD&lt;br /&gt;
 &lt;br /&gt;
      0.9x1.25_gx1v6  B_1850_CN_CHEM &lt;br /&gt;
      0.9x1.25_gx1v6  B_1850-2000_CN_CHEM&lt;br /&gt;
 &lt;br /&gt;
      1.9x2.5_gx1v6   B_1850_WACCM_CN&lt;br /&gt;
      1.9x2.5_gx1v6   B_1850-2000_WACCM_CN&lt;br /&gt;
   &lt;br /&gt;
      T31_gx3v7       B_1850_CN&lt;br /&gt;
 &lt;br /&gt;
   If the user is interested in running a &amp;quot;stand-alone&amp;quot; component configuration, &lt;br /&gt;
   the following model configurations have been validated scientifically and &lt;br /&gt;
   have associated diagnostic output as part of the release:&lt;br /&gt;
 &lt;br /&gt;
      1.9x2.5_1.9x2.5    F_2000_WACCM&lt;br /&gt;
      1.9x2.5_1.9x2.5    F_AMIP_CAM5&lt;br /&gt;
      1.9x2.5_1.9x2.5    F_AMIP_CN&lt;br /&gt;
      0.9x1.25_0.9x1.25  F_AMIP_CN&lt;br /&gt;
 &lt;br /&gt;
      0.9x1.25_gx1v6  I_2000&lt;br /&gt;
      0.9x1.25_gx1v6  I_2000_CN&lt;br /&gt;
 &lt;br /&gt;
      T62_gx1v6       C_NORMAL_YEAR&lt;br /&gt;
 &lt;br /&gt;
   For more information regarding alternative component configurations, &lt;br /&gt;
   please refer to the individual component web pages at&lt;br /&gt;
   http://www.cesm.ucar.edu/models/cesm1.0&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
  CESM1 RESOLUTIONS:  name (shortname) &lt;br /&gt;
    pt1_pt1 (pt1)  &lt;br /&gt;
    0.23x0.31_0.23x0.31 (f02_f02)  &lt;br /&gt;
    0.23x0.31_gx1v6 (f02_g16)  &lt;br /&gt;
    0.23x0.31_tx0.1v2 (f02_t12)  &lt;br /&gt;
    0.47x0.63_0.47x0.63 (f05_f05)  &lt;br /&gt;
    0.47x0.63_gx1v6 (f05_g16)  &lt;br /&gt;
    0.47x0.63_tx0.1v2 (f05_t12)  &lt;br /&gt;
    0.9x1.25_0.9x1.25 (f09_f09)  &lt;br /&gt;
    0.9x1.25_gx1v6 (f09_g16)  &lt;br /&gt;
    1.9x2.5_1.9x2.5 (f19_f19)  &lt;br /&gt;
    1.9x2.5_gx1v6 (f19_g16)  &lt;br /&gt;
    4x5_4x5 (f45_f45)  &lt;br /&gt;
    4x5_gx3v7 (f45_g37)  &lt;br /&gt;
    T62_gx3v7 (T62_g37)  &lt;br /&gt;
    T62_tx0.1v2 (T62_t12)  &lt;br /&gt;
    T62_gx1v6 (T62_g16)  &lt;br /&gt;
    T31_T31 (T31_T31)  &lt;br /&gt;
    T31_gx3v7 (T31_g37)  &lt;br /&gt;
    T42_T42 (T42_T42)  &lt;br /&gt;
    10x15_10x15 (f10_f10)  &lt;br /&gt;
    ne30np4_1.9x2.5_gx1v6 (ne30_f19_g16)  &lt;br /&gt;
    ne240np4_0.23x0.31_gx1v6 (ne240_f02_g16)  &lt;br /&gt;
    T85_T85 (T85_T85)  &lt;br /&gt;
  &lt;br /&gt;
  COMPSETS:  name (shortname): description &lt;br /&gt;
    A_PRESENT_DAY (A) &lt;br /&gt;
         Description: All data model  &lt;br /&gt;
    A_GLC (AG) &lt;br /&gt;
         Description: All data model plus glc (glacier model)  &lt;br /&gt;
    B_2000 (B) &lt;br /&gt;
         Description: All active components, present day  &lt;br /&gt;
    B_2000_CN (BCN) &lt;br /&gt;
         Description: all active components, present day, with CN (Carbon Nitrogen) in clm  &lt;br /&gt;
    B_1850_CAM5 (B1850C5) &lt;br /&gt;
         Description: All active components, pre-industrial, cam5 physics  &lt;br /&gt;
    B_1850 (B1850) &lt;br /&gt;
         Description: All active components, pre-industrial  &lt;br /&gt;
    B_1850_CN (B1850CN) &lt;br /&gt;
         Description: all active components, pre-industrial, with CN (Carbon Nitrogen) in CLM  &lt;br /&gt;
    B_2000_CN_CHEM (B2000CNCHM) &lt;br /&gt;
         Description: All active components, pre-industrial, with CN (Carbon Nitrogen) in CLM and super_fast_llnl chem in atm  &lt;br /&gt;
    B_1850_CN_CHEM (B1850CNCHM) &lt;br /&gt;
         Description: All active components, pre-industrial, with CN (Carbon Nitrogen) in CLM and super_fast_llnl chem in atm  &lt;br /&gt;
    B_1850_RAMPCO2_CN (B1850RMCN) &lt;br /&gt;
         Description: All active components, pre-industirial with co2 ramp, with CN (Carbon Nitrogen) in CLM  &lt;br /&gt;
    B_1850-2000 (B20TR) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient  &lt;br /&gt;
    B_1850-2000_CN (B20TRCN) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient, with CN (Carbon Nitrogen) in CLM  &lt;br /&gt;
    B_1850-2000_CN_CHEM (B20TRCNCHM) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient, with CN (Carbon Nitrogen) in CLM and super_fast_llnl chem in atm  &lt;br /&gt;
    B_1850-2000_CAM5 (B20TRC5) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient, cam5 physics  &lt;br /&gt;
    B_2000_GLC (BG) &lt;br /&gt;
         Description: all active components, with active glc  &lt;br /&gt;
    B_2000_TROP_MOZART (BMOZ) &lt;br /&gt;
         Description: All active components, with trop_mozart  &lt;br /&gt;
    B_1850_WACCM (B1850W) &lt;br /&gt;
         Description: all active components, pre-industrial, with waccm  &lt;br /&gt;
    B_1850_WACCM_CN (B1850WCN) &lt;br /&gt;
         Description: all active components, pre-industrial, with waccm and CN  &lt;br /&gt;
    B_1850-2000_WACCM_CN (B20TRWCN) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient, WACCM with CN (Carbon Nitrogen) in CLM  &lt;br /&gt;
    B_1955-2005_WACCM_CN (B55TRWCN) &lt;br /&gt;
         Description: All active components, 1955 to 2000 transient, WACCM with  daily solar data and SPEs, CLM with CN  &lt;br /&gt;
    B_1850_BGC-BPRP (B1850BPRP) &lt;br /&gt;
         Description: All active components, pre-industrial, CN in CLM, ECO in POP, BGC CO2=prog, rad CO2=prog  &lt;br /&gt;
    B_1850_BGC-BDRD (B1850BDRD) &lt;br /&gt;
         Description: All active components, pre-industrial, CN in CLM, ECO in POP, BGC CO2=diag, rad CO2=diag  &lt;br /&gt;
    B_1850-2000_BGC-BPRP (B20TRBPRP) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient, CN in CLM, ECO in POP, BGC CO2=prog, rad CO2=prog  &lt;br /&gt;
    B_1850-2000_BGC-BDRD (B20TRBDRD) &lt;br /&gt;
         Description: All active components, 1850 to 2000 transient, CN in CLM, ECO in POP, BGC CO2=diag, rad CO2=diag  &lt;br /&gt;
    C_NORMAL_YEAR_ECOSYS (CECO) &lt;br /&gt;
         Description: Active ocean model with ecosys and with COREv2 normal year forcing  &lt;br /&gt;
    C_NORMAL_YEAR (C) &lt;br /&gt;
         Description: Active ocean model with COREv2 normal year forcing  &lt;br /&gt;
    D_NORMAL_YEAR (D) &lt;br /&gt;
         Description: Active ice model with COREv2 normal year forcing  &lt;br /&gt;
    E_2000 (E) &lt;br /&gt;
         Description: Fully active cam and ice with som ocean, present day  &lt;br /&gt;
    E_2000_GLC (EG) &lt;br /&gt;
         Description: Fully active cam and ice with som ocean and glc, present day  &lt;br /&gt;
    E_1850_CN (E1850CN) &lt;br /&gt;
         Description: Pre-industrial fully active ice and som ocean, with CN  &lt;br /&gt;
    E_1850_CAM5 (E1850C5) &lt;br /&gt;
         Description: Pre-industrial fully active ice and som ocean, cam5 physics   &lt;br /&gt;
    F_AMIP_CN (FAMIPCN) &lt;br /&gt;
         Description: AMIP run for CMIP5 protocol - valid only for 1 degree cam/clm/pres-cice  &lt;br /&gt;
    F_AMIP_CAM5 (FAMIPC5) &lt;br /&gt;
         Description: AMIP run for CMIP5 protocol with cam5  &lt;br /&gt;
    F_1850 (F1850) &lt;br /&gt;
         Description: Pre-industrial cam/clm with prescribed ice/ocn  &lt;br /&gt;
    F_1850_CAM5 (F1850C5) &lt;br /&gt;
         Description: Pre-industrial cam/clm with prescribed ice/ocn, cam5 physics  &lt;br /&gt;
    F_2000 (F) &lt;br /&gt;
         Description: Stand-alone cam default, prescribed ocn/ice  &lt;br /&gt;
    F_2000_CAM5 (FC5) &lt;br /&gt;
         Description: Stand-alone cam default, prescribed ocn/ice, cam5 physics  &lt;br /&gt;
    F_2000_CN (FCN) &lt;br /&gt;
         Description: Stand-alone cam default, prescribed ocn/ice with CN  &lt;br /&gt;
    F_1850-2000_CN (F20TRCN) &lt;br /&gt;
         Description: 20th Century transient stand-alone cam default, prescribed ocn/ice, with CN  &lt;br /&gt;
    F_2000_GLC (FG) &lt;br /&gt;
         Description: Stand-alone cam default, prescribed ocn/ice, glc (glacier model)  &lt;br /&gt;
    F_1850_CN_CHEM (F1850CNCHM) &lt;br /&gt;
         Description: stand-alone cam/clm, pre-industrial, with CN in CLM, super_fast_llnl chem in cam  &lt;br /&gt;
    F_1850_WACCM (F1850W) &lt;br /&gt;
         Description: Pre-industrial cam/clm with prescribed ice/ocn  &lt;br /&gt;
    F_2000_WACCM (FW) &lt;br /&gt;
         Description: present-day cam/clm with prescribed ice/ocn  &lt;br /&gt;
    G_1850_ECOSYS (G1850ECO) &lt;br /&gt;
         Description: 1850 control for pop-ecosystem/cice/datm7/dlnd-rx1  &lt;br /&gt;
    G_NORMAL_YEAR (G) &lt;br /&gt;
         Description: Coupled ocean ice with COREv2 normal year forcing  &lt;br /&gt;
    H_PRESENT_DAY (H) &lt;br /&gt;
         Description: Coupled ocean ice slnd  &lt;br /&gt;
    I_2000 (I) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 2003 and Satellite phenology (SP), CO2 level and Aerosol deposition for 2000  &lt;br /&gt;
    I_1850 (I1850) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 1948 to 1972 and Satellite phenology (SP), CO2 level and Aerosol deposition for 1850  &lt;br /&gt;
    I_2000_GLC (IG) &lt;br /&gt;
         Description: Active glacier model and active land model with QIAN atm input data for 2003 and Satellite phenology (SP), CO2 level and Aerosol deposition for 2000  &lt;br /&gt;
    I_1948-2004 (I4804) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 1948 to 2004 and Satellite phenology (SP), CO2 level and Aerosol deposition for 2000  &lt;br /&gt;
    I_1850-2000 (I8520) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 1948 to 2004 and transient Satellite phenology (SP), and Aerosol deposition from 1850 to 2000 and 2000 CO2 level  &lt;br /&gt;
    I_2000_CN (ICN) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 2003 and CN (Carbon Nitrogen) biogeochemistry, CO2 level and Aerosol deposition for 2000  &lt;br /&gt;
    I_1850_CN (I1850CN) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 1948 to 1972 and CN (Carbon Nitrogen) biogeochemistry, CO2 level and Aerosol deposition for 1850  &lt;br /&gt;
    I_1948-2004_CN (I4804CN) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 1948 to 2004 and CN (Carbon Nitrogen) biogeochemistry, CO2 level and Aerosol deposition for 2000  &lt;br /&gt;
    I_1850-2000_CN (I8520CN) &lt;br /&gt;
         Description: Active land model with QIAN atm input data for 1948 to 1972 and transient CN, Aerosol dep from 1850 to 2000 and 2000 CO2 level  &lt;br /&gt;
    S_PRESENT_DAY (S) &lt;br /&gt;
         Description: All stub models plus xatm  &lt;br /&gt;
    X_PRESENT_DAY (X) &lt;br /&gt;
         Description: All dead model  &lt;br /&gt;
    XG_PRESENT_DAY (XG) &lt;br /&gt;
         Description: All dead model and cism  &lt;br /&gt;
  &lt;br /&gt;
  MACHINES:  name (description)&lt;br /&gt;
    tcs (U of T IBM p6, os is AIX, 32 pes/node, batch system is Moab/LoadLeveler) &lt;br /&gt;
    gpc (U of T iDataPlex intel cluster, os is linux, 8 pes/node, batch system is Moab/Torque) &lt;br /&gt;
    bluefire (NCAR IBM p6, os is AIX, 32 pes/node, batch system is LSF) &lt;br /&gt;
    brutus_po (Brutus Linux Cluster ETH (pgi/9.0-1 with open_mpi/1.4.1), 16 pes/node, batch system LSF, added by UB) &lt;br /&gt;
    brutus_pm (Brutus Linux Cluster ETH (pgi/9.0-1 with mvapich2/1.4rc2), 16 pes/node, batch system LSF, added by UB) &lt;br /&gt;
    brutus_io (Brutus Linux Cluster ETH (intel/10.1.018 with open_mpi/1.4.1), 16 pes/node, batch system LSF, added by UB) &lt;br /&gt;
    brutus_im (Brutus Linux Cluster ETH (intel/10.1.018 with mvapich2/1.4rc2), 16 pes/node, batch system LSF, added by UB) &lt;br /&gt;
    edinburgh_lahey (NCAR CGD Linux Cluster (lahey), 8 pes/node, batch system is PBS) &lt;br /&gt;
    edinburgh_pgi (NCAR CGD Linux Cluster (pgi), 8 pes/node, batch system is PBS) &lt;br /&gt;
    edinburgh_intel (NCAR CGD Linux Cluster (intel), 8 pes/node, batch system is PBS) &lt;br /&gt;
    franklin (NERSC XT4, os is CNL, 4 pes/node, batch system is PBS) &lt;br /&gt;
    hadley (UCB Linux Cluster, os is Linux (ia64), batch system is PBS) &lt;br /&gt;
    hopper (NERSC XT5, os is CNL, 8 pes/node, batch system is PBS) &lt;br /&gt;
    intrepid (ANL IBM BG/P, os is BGP, 4 pes/node, batch system is cobalt) &lt;br /&gt;
    jaguar (ORNL XT4, os is CNL, 4 pes/node, batch system is PBS) &lt;br /&gt;
    jaguarpf (ORNL XT5, os is CNL, 12 pes/node, batch system is PBS) &lt;br /&gt;
    kraken (NICS/UT/teragrid XT5, os is CNL, 12 pes/node) &lt;br /&gt;
    lynx_pgi (NCAR XT5, os is CNL, 12 pes/node, batch system is PBS) &lt;br /&gt;
    midnight (ARSC Sun Cluster, os is Linux (pgi), batch system is PBS) &lt;br /&gt;
    pleiades (NASA/AMES Linux Cluster, Linux (ia64), Altix ICE, 3.0 GHz Harpertown processors, 8 pes/node and 8 GB of memory, batch system is PBS) &lt;br /&gt;
    pleiades_wes (NASA/AMES Linux Cluster, Linux (ia64), Altix ICE, 2.93 GHz Westmere processors, 12 pes/node and 24 GB of memory, batch system is PBS) &lt;br /&gt;
    prototype_atlas (LLNL Linux Cluster, Linux (pgi), 8 pes/node, batch system is Moab) &lt;br /&gt;
    prototype_hera (LLNL Linux Cluster, Linux (pgi), 16 pes/node, batch system is Moab) &lt;br /&gt;
    prototype_columbia (NASA Ames Linux Cluster, Linux (ia64), 2 pes/node, batch system is PBS) &lt;br /&gt;
    prototype_frost (NCAR IBM BG/L, os is BGL, 8 pes/node, batch system is cobalt) &lt;br /&gt;
    prototype_nyblue (SUNY IBM BG/L, os is BGL, 8 pes/node, batch system is cobalt) &lt;br /&gt;
    prototype_ranger (TACC Linux Cluster, Linux (pgi), 1 pes/node, batch system is SGE) &lt;br /&gt;
    prototype_ubgl (LLNL IBM BG/L, os is BGL, 2 pes/node, batch system is Moab) &lt;br /&gt;
    generic_ibm (generic ibm power system, os is AIX, batch system is LoadLeveler, user-defined) &lt;br /&gt;
    generic_xt (generic CRAY XT, os is CNL, batch system is PBS, user-defined) &lt;br /&gt;
    generic_linux_pgi (generic linux (pgi), os is Linux, batch system is PBS, user-defined) &lt;br /&gt;
    generic_linux_lahey (generic linux (lahey), os is Linux, batch system is PBS, user-defined) &lt;br /&gt;
    generic_linux_intel (generic linux (intel), os is Linux, batch system is PBS, user-defined) &lt;br /&gt;
    generic_linux_pathscale (generic linux (pathscale), os is Linux, batch system is PBS, user-defined) &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Initializing the Model Setup:''&lt;br /&gt;
&lt;br /&gt;
The initial setup of the model on TCS is simplified with the short script below&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 export CCSMROOT=/project/ccsm/ccsm4_0_current&lt;br /&gt;
 export SCRATCH=/scratch/$USER&lt;br /&gt;
 export MACH=tcs&lt;br /&gt;
 export COMPSET=B_1850_CN&lt;br /&gt;
 export RES=f19_g16&lt;br /&gt;
 export CASEROOT=~/runs/ccsm4_comp-${COMPSET}_res-${RES}&lt;br /&gt;
 &lt;br /&gt;
 cd $CCSMROOT/scripts&lt;br /&gt;
 ./create_newcase -verbose -case $CASEROOT -mach $MACH -compset $COMPSET -res $RES -scratchroot $SCRATCH &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' $CCSMROOT should point to the model code version in ''/project/ccsm'' with the &amp;quot;_current&amp;quot; after it. The same for CESM1&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' $CASEROOT which will specify your model run naming conventions will not archive properly (to short term archiving directory i.e. /scratch) if your CASEROOT name is too long. It is best to keep it short. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This script creates an 1850 control with all components of the model fully active and carbon nitrogen cycling in the land component, The resolution is 1.9x2.5 in the atmosphere and x1 in the ocean. The file is created in the ~/run directory:&lt;br /&gt;
&lt;br /&gt;
For valid component sets see: http://www.cesm.ucar.edu/models/ccsm4.0/ccsm_doc/a2967.html &lt;br /&gt;
For information on resolution sets see: http://www.cesm.ucar.edu/models/ccsm4.0/ccsm_doc/x42.html#ccsm_grids &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Load Balancing:''&lt;br /&gt;
&lt;br /&gt;
For the NCAR bluefire load balancing table for a select set of simulations see:&lt;br /&gt;
CESM1: http://www.cesm.ucar.edu/models/cesm1.0/timing/&lt;br /&gt;
CCSM4: http://www.cesm.ucar.edu/models/ccsm4.0/timing/&lt;br /&gt;
&lt;br /&gt;
 cd ~/runs/ccsm4_comp-B_1850_CN_res-f19_g16&lt;br /&gt;
&lt;br /&gt;
edit env_mach_pes.xml&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTASKS_ATM&amp;quot;   value=&amp;quot;448&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTHRDS_ATM&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;ROOTPE_ATM&amp;quot;   value=&amp;quot;0&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTASKS_LND&amp;quot;   value=&amp;quot;320&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTHRDS_LND&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;ROOTPE_LND&amp;quot;   value=&amp;quot;160&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTASKS_ICE&amp;quot;   value=&amp;quot;64&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTHRDS_ICE&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;ROOTPE_ICE&amp;quot;   value=&amp;quot;0&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTASKS_OCN&amp;quot;   value=&amp;quot;256&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTHRDS_OCN&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;ROOTPE_OCN&amp;quot;   value=&amp;quot;224&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTASKS_CPL&amp;quot;   value=&amp;quot;224&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTHRDS_CPL&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;ROOTPE_CPL&amp;quot;   value=&amp;quot;0&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTASKS_GLC&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;NTHRDS_GLC&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;ROOTPE_GLC&amp;quot;   value=&amp;quot;0&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PSTRID_ATM&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PSTRID_LND&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PSTRID_ICE&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PSTRID_OCN&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PSTRID_CPL&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PSTRID_GLC&amp;quot;   value=&amp;quot;1&amp;quot;  /&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once this file is modified you can configure the case&lt;br /&gt;
&lt;br /&gt;
 ./configure -case&lt;br /&gt;
 &lt;br /&gt;
You will notice that configure will change the file the you just edited and you can see the total processors used by the simulation (704  or 11 nodes in this case):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;entry id=&amp;quot;TOTALPES&amp;quot;   value=&amp;quot;704&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PES_LEVEL&amp;quot;   value=&amp;quot;1r&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;MAX_TASKS_PER_NODE&amp;quot;   value=&amp;quot;64&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PES_PER_NODE&amp;quot;   value=&amp;quot;64&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;CCSM_PCOST&amp;quot;   value=&amp;quot;-3&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;CCSM_TCOST&amp;quot;   value=&amp;quot;0&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;CCSM_ESTCOST&amp;quot;   value=&amp;quot;-3&amp;quot;  /&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Rather than modifying the load balancing manually, NCAR has written a script that resides in your $CASE running directory that allows you to modify the individual component CPU allocation without playing with the env_mach_pes.xml file:&lt;br /&gt;
&lt;br /&gt;
To try a different configuration we might want 8 cpus running the OCN component continually and the remaining 24 cpus running atm on 24 then LND, ICE and CPL on 8 each. To set this up you enter;&lt;br /&gt;
&lt;br /&gt;
 configure -cleanmach&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id NTASKS_ATM -val 24&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id NTASKS_LND -val 8 &lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id NTASKS_ICE -val 8&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id ROOTPE_ICE -val 8&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id NTASKS_CPL -val 8&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id ROOTPE_CPL -val 16&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id NTASKS_OCN -val 8&lt;br /&gt;
 xmlchange -file env_mach_pes.xml -id ROOTPE_OCN -val 24&lt;br /&gt;
 configure -case&lt;br /&gt;
&lt;br /&gt;
Then build and resubmit&lt;br /&gt;
&lt;br /&gt;
The task geometry used by loadleveler on TCS is located in the file: ccsm4_comp-B_1850_CN_res-f19_g16.tcs.run&lt;br /&gt;
&lt;br /&gt;
Ensure that the proper modules are loaded:&lt;br /&gt;
&lt;br /&gt;
Currently Loaded Modulefiles:&lt;br /&gt;
  1) ncl/5.1.1               3) netcdf/4.0.1_nc3        5) xlf/13.1&lt;br /&gt;
  2) nco/3.9.6               4) parallel-netcdf/1.1.1   6) vacpp/11.1&lt;br /&gt;
&lt;br /&gt;
Now compile the model with:&lt;br /&gt;
&lt;br /&gt;
 ./ccsm4_comp-B_1850_CN_res-f19_g16.tcs.build&lt;br /&gt;
&lt;br /&gt;
One of the pre-processing steps in this build sequence is to fetch inputdat sets (initial and boundary conditions) from the NCAR SVN server. You may want to do this yourself before you build on the ''datamover1'' node if there is a large amount of initial condition data to transfer from the NCAR repository. ''datamover1'' has a high bandwidth connection to the outside.&lt;br /&gt;
Note: We have most of the input data on /project/ccsm already so this step will not be required for the more common configurations.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; ssh datamover1&lt;br /&gt;
 Last login: Wed Jul  7 16:38:14 2010 from tcs-f11n06-gpfs&lt;br /&gt;
 user@gpc-logindm01:~&amp;gt;cd ~/runs/ccsm4_comp-B_1850_CN_res-f19_g16&lt;br /&gt;
 user@gpc-logindm01:~/runs/ccsm4_comp-B_1850_CN_res-f19_g16&amp;gt;&lt;br /&gt;
 user@gpc-logindm01:~/runs/ccsm4_comp-B_1850_CN_res-f19_g16&amp;gt;./check_input_data -inputdata /project/ccsm/inputdata -export&lt;br /&gt;
 Input Data List Files Found:&lt;br /&gt;
 ./Buildconf/cam.input_data_list&lt;br /&gt;
 ./Buildconf/clm.input_data_list&lt;br /&gt;
 ./Buildconf/cice.input_data_list&lt;br /&gt;
 ./Buildconf/pop2.input_data_list&lt;br /&gt;
 ./Buildconf/cpl.input_data_list&lt;br /&gt;
 export https://svn-ccsm-inputdata.cgd.ucar.edu/trunk/inputdata/atm/cam/chem/trop_mozart_aero/aero/aero_1.9x2.5_L26_1850clim_c091112.nc /project/ccsm/inputdata/atm/cam/chem/trop_mozart_aero/aero/aero_1.9x2.5_L26_1850clim_c091112.nc ..... success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Setting the Simulation Length:''&lt;br /&gt;
&lt;br /&gt;
The amount of time that you would like to run the model can be set by editing ''env_run.xml'' at anytime in the setup sequence&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--&amp;quot;if RESUBMIT is greater than 0, then case will automatically resubmit (integer) &amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;entry id=&amp;quot;RESUBMIT&amp;quot;   value=&amp;quot;10&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--&amp;quot;sets the run length in conjuction with STOP_N and STOP_DATE, valid values: none,never,nsteps,nstep,nseconds,nsecond,nminutes,nminute,nhours,nhour,ndays,nday,nmonths,nmonth,nyears,nyear,date,ifdays0,end (char) &amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;entry id=&amp;quot;STOP_OPTION&amp;quot;   value=&amp;quot;nmonths&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--&amp;quot;sets the run length in conjuction with STOP_OPTION and STOP_DATE (integer) &amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;entry id=&amp;quot;STOP_N&amp;quot;   value=&amp;quot;12&amp;quot;  /&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
These settings will tell the model to checkpoint after each model year (12 months) and run for a total of 10 years (10 checkpoints)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Running CCSM4 on the Distributed System (TCS):''&lt;br /&gt;
&lt;br /&gt;
The model is now ready to be submitted to the TCS batch queue&lt;br /&gt;
&lt;br /&gt;
 llsubmit ccsm4_comp-B_1850_CN_res-f19_g16.tcs.run&lt;br /&gt;
&lt;br /&gt;
Once the model has run through a checkpoint timing information on the simulation will be found in:&lt;br /&gt;
 ~/runs/ccsm4_comp-B_1850_CN_res-f19_g16/timing&lt;br /&gt;
&lt;br /&gt;
Standard output from the model can be followed during runtime by going to:&lt;br /&gt;
 /scratch/guido/ccsm4_comp-B_1850_CN_res-f19_g16/run&lt;br /&gt;
and running&lt;br /&gt;
 tail -f &amp;lt;component_log_file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The model will archive the NetCDF output in:&lt;br /&gt;
 /scratch/$USER/archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Cloning Simulations''&lt;br /&gt;
&lt;br /&gt;
A useful command that allow for the setup of multiple runs quickly is the clone command. It allows for the cloning of a case quickly (so there is no need to run the setup script above every time)&lt;br /&gt;
 cd ~/runs&lt;br /&gt;
 /project/ccsm/ccsm4_0_current/scripts/create_clone -clone ccsm4_comp-B_1850_CN_res-f09_g16 -case ccsm4_comp-B_1850_CN_res-f09_g16_clone -v&lt;br /&gt;
&lt;br /&gt;
To change the load balancing (env_mach_pes.xml) in a current simulation setup or other parameters you can do a clean build to make sure the model is rebuilt properly:&lt;br /&gt;
 ./configure -cleanmach&lt;br /&gt;
 ./ccsm4_comp-B_1850_CN_res-f19_g16.tcs.clean_build&lt;br /&gt;
 ./configure -case&lt;br /&gt;
 ./ccsm4_comp-B_1850_CN_res-f19_g16.tcs.build&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Running CCSM4 on GPC''&lt;br /&gt;
&lt;br /&gt;
The setup script is almost identical:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 export CCSMROOT=/project/ccsm/ccsm4_0_current&lt;br /&gt;
 export SCRATCH=/scratch/guido&lt;br /&gt;
 export MACH=gpc&lt;br /&gt;
 export COMPSET=B_1850_CN&lt;br /&gt;
 export RES=f09_g16&lt;br /&gt;
 export CASEROOT=~/runs/ccsm4gpc_comp-${COMPSET}_res-${RES}&lt;br /&gt;
 &lt;br /&gt;
 cd $CCSMROOT/scripts&lt;br /&gt;
 ./create_newcase -verbose -case $CASEROOT -mach $MACH -compset $COMPSET -res $RES &lt;br /&gt;
&lt;br /&gt;
To load balance and run the model follow the steps above:&lt;br /&gt;
The env_mach_pes.xml configuration files needs to be modified as follows:&lt;br /&gt;
 &amp;lt;entry id=&amp;quot;MAX_TASKS_PER_NODE&amp;quot;   value=&amp;quot;8&amp;quot;  /&amp;gt;   &lt;br /&gt;
 &amp;lt;entry id=&amp;quot;PES_PER_NODE&amp;quot;   value=&amp;quot;8&amp;quot;  /&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Use qsub to submit the model to the GPC cluster:&lt;br /&gt;
 qsub ccsm4gpc_comp-B_1850_CN_res-f19_g16.tcs.run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Running CCSM4 interactively on TCS''&lt;br /&gt;
&lt;br /&gt;
In the run script you need to specify the following set and unset of environment variables. You also need a hostfile that will describe the node procs that you will be using&lt;br /&gt;
&lt;br /&gt;
 unsetenv MP_EUILIB&lt;br /&gt;
 &lt;br /&gt;
 setenv MP_PROCS 16 &lt;br /&gt;
 &lt;br /&gt;
 setenv MP_NODES 1&lt;br /&gt;
   &lt;br /&gt;
 &lt;br /&gt;
 /usr/bin/poe /project/ccsm/bin/ccsm_launch ./ccsm.exe -hfile /project/&amp;lt;user&amp;gt;/runs/&amp;lt;casename&amp;gt;/hostfile&lt;br /&gt;
&lt;br /&gt;
and the hostfile looks like (for 16 threads of tcs02)&lt;br /&gt;
&lt;br /&gt;
 --&amp;gt; more hostfile&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Installing_your_own_modules&amp;diff=9394</id>
		<title>Installing your own modules</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Installing_your_own_modules&amp;diff=9394"/>
		<updated>2018-08-31T23:22:33Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: This page deals with modules for the 'modulecmd' package. For python modules go to [[Installing your own Python modules]]. For R modules go to [[R Statistical Package]]. For local perl modules, see [[Perl]].''&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
There are many potential software packages that users could potentially want. These packages have potential conflicts and dependencies. For that reason, we install packages in nonstandard locations, and use the module command to load those locations into the appropriate environment variables. The usage of the module command is explained on the [[Software and Libraries]] page. &lt;br /&gt;
&lt;br /&gt;
It is possible for users to make their own collection of modules to supplement or replace the shared modules. Local user-space package and moduless are almost certainly the easiest way to deal with the wide range of packages, ensure they're up to date, and ensure that users package choices don't conflict.  &lt;br /&gt;
&lt;br /&gt;
With local modules, you could load modules using &amp;lt;tt&amp;gt;module load [name]&amp;lt;/tt&amp;gt;, just as system-wide modules. You'd have less clutter in your .bashrc, as paths can be set up in the module file, you can install and try out conflicting versions of software pages. &lt;br /&gt;
&lt;br /&gt;
Another nice feature of modules is that loading them twice does not append to the paths twice. So you could re-source your .bashrc file, and not clutter up the environment variables.&lt;br /&gt;
&lt;br /&gt;
=== How to do it ===&lt;br /&gt;
&lt;br /&gt;
* Type&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load use.own&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This creates a directory &amp;lt;tt&amp;gt;$HOME/privatemodules&amp;lt;/tt&amp;gt; if it doesnt exist yet, and adds it to the module path. It also make the man page for &amp;lt;tt&amp;gt;modulefile&amp;lt;/tt&amp;gt; available.&lt;br /&gt;
* Write module files, and put them in that directory (see below)&lt;br /&gt;
* Put &amp;lt;tt&amp;gt;module load use.own&amp;lt;/tt&amp;gt; in your &amp;lt;tt&amp;gt;.bashrc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Use &amp;lt;tt&amp;gt;module load/unload/switch/avail/whatis/list&amp;lt;/tt&amp;gt; on your local modules.&lt;br /&gt;
&lt;br /&gt;
=== Writing modulefiles ===&lt;br /&gt;
&lt;br /&gt;
Modulefiles use commands which are an extension of the standarde scripting language Tool Command Language (tcl). The name of the modulefile becomes the name of the module used in shell commands like &amp;lt;tt&amp;gt;module load [name]&amp;lt;/tt&amp;gt;. You can create a hierarchy of modules (for instance for different versions) by using subdirectories in &amp;lt;tt&amp;gt;~/privatemodules&amp;lt;/tt&amp;gt;. The module names then are the prepended by the relative path within  &amp;lt;tt&amp;gt;~/privatemodules&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the modulefile, you can put commands to define or append environment variables and paths, express prerequirements and express conflicts.&lt;br /&gt;
&lt;br /&gt;
Note that you do not have to learn much tcl to use them though, as a simple example shows. The file &amp;lt;tt&amp;gt;~/privatemodules/somemodule&amp;lt;/tt&amp;gt;  could contain&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#%Module -*- tcl -*-&lt;br /&gt;
## This is a module to access something&lt;br /&gt;
proc ModulesHelp { } {&lt;br /&gt;
        puts stderr &amp;quot;This module sets up access to something&amp;quot; &lt;br /&gt;
}&lt;br /&gt;
module-whatis &amp;quot;sets up access to something&amp;quot;&lt;br /&gt;
prereq somethingelse&lt;br /&gt;
conflict thatothermodule&lt;br /&gt;
module load gcc&lt;br /&gt;
setenv       SOMEVERION       0.95&lt;br /&gt;
append-path  PATH             /home/[user]/[somedir]/bin&lt;br /&gt;
append-path  MANPATH          /home/[user]/[somedir]/man&lt;br /&gt;
append-path  LD_LIBRARY_PATH  /home/[user]/[somedir]/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Explanation by line:&lt;br /&gt;
* line 1: identifies this as a module file&lt;br /&gt;
* line 2: is a comment that explains what the module does.&lt;br /&gt;
* lines 3-5: is a function definition so that &amp;lt;tt&amp;gt;module help somemodule&amp;lt;/tt&amp;gt; works&lt;br /&gt;
* line 6 makes &amp;lt;tt&amp;gt;module whatis somemodule&amp;lt;/tt&amp;gt; work&lt;br /&gt;
* line 7 expresses a prerequist that the module &amp;lt;tt&amp;gt;somethingelse&amp;lt;/tt&amp;gt; should be loaded before this one.&lt;br /&gt;
* line 8 expresses a conflict, i.e., if &amp;lt;tt&amp;gt;thatothermodule&amp;lt;/tt&amp;gt; is loaded, this one cannot be loaded as well.&lt;br /&gt;
* lines 9 through 13 are the heart of the matter. They load another module, in this case, gcc, set an environment variable, and add directories to the paths.&lt;br /&gt;
&lt;br /&gt;
To learn more, simply type (if you have the use.own modules loaded):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ man modulefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
An example of creating your own module can be found on the [[Brian]] page.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=User_Serial_on_GPC&amp;diff=9393</id>
		<title>User Serial on GPC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=User_Serial_on_GPC&amp;diff=9393"/>
		<updated>2018-08-31T23:22:00Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Running serial jobs on SciNet's GPC==&lt;br /&gt;
&lt;br /&gt;
See [[User Serial]].&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=User_Serial&amp;diff=9392</id>
		<title>User Serial</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=User_Serial&amp;diff=9392"/>
		<updated>2018-08-31T23:20:55Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===General considerations===&lt;br /&gt;
&lt;br /&gt;
====Use whole nodes...====&lt;br /&gt;
&lt;br /&gt;
When you submit a job on a SciNet system, it is run on one (or more than one) entire node - meaning that your job is occupying at least 8 processors during the duration of its run.  The SciNet systems are usually, with many researchers waiting in the queue for computational resources, so we require that you make full use of the nodes that your job is allocated, so other resarchers don't have to wait unnecessarily, and so that your jobs get as much work done for you while they run as possible.&lt;br /&gt;
&lt;br /&gt;
Often, the best way to make full use of the node is to run one large parallel computation; but sometimes it is beneficial to run several serial codes at the same time.  On this page, we discuss ways to run suites of serial computations at once, as efficiently as possible, using the full resources of the node.&lt;br /&gt;
&lt;br /&gt;
====...but not more.====&lt;br /&gt;
&lt;br /&gt;
When running multiple jobs on the same node, it is essential to have a good idea of how much memory the jobs will require. The GPC compute nodes have about 14GB in total available &lt;br /&gt;
to user jobs running on the 8 cores (a bit less, say 13GB, on the devel ndoes &amp;lt;tt&amp;gt;gpc01..04&amp;lt;/tt&amp;gt;, and [[GPC_Quickstart#Memory_Configuration|somewhat more for some compute nodes]])&lt;br /&gt;
So the jobs also have to be  bunched in ways that will fit into 14GB.  If they use more than this, they will crash the node, inconveniencing you and other researchers waiting for that node.&lt;br /&gt;
&lt;br /&gt;
If that's not possible -- each individual job requires significantly in excess of ~1.75GB -- then it's possible to just run fewer jobs so that they do fit; but then, again there is an under-utilization problem.   In that case, the jobs are likely candidates for parallelization, and you can contact us at [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;] and arrange a meeting with one of the technical analysts to help you do just that.&lt;br /&gt;
&lt;br /&gt;
If the memory requirements allow it, you could actually run more than 8 jobs at the same time, up to 16, exploiting the [[GPC_Quickstart#HyperThreading | HyperThreading]] feature of the Intel Nehalem cores.  It may seem counterintuitive, but running 16 jobs on 8 cores for certain types of tasks has increased some users overall throughput by 10 to 30 percent.&lt;br /&gt;
&lt;br /&gt;
====Is your job really serial?====&lt;br /&gt;
&lt;br /&gt;
While your program may not be explicitly parallel, it may use some of SciNet's threaded libraries for numerical computations, which can make use of multiple processors.  In particular, SciNet's [[Python]] and [[R_Statistical_Package | R]] modules are compiled with aggressive optimization and using threaded numerical libraries which by default will make use of multiple cores for computations such as large matrix operations.  This can greatly speed up individual runs, but by less (usually much less) than a factor of 8.  If you do have many such computations to do, your [[Introduction_To_Performance#Throughput | throughput]] will be better - you will get more calculations done per unit time -if you turn off the threading and run multiple such computations at once.  Threading is turned off with the shell script line &amp;lt;tt&amp;gt;export OMP_NUM_THREADS=1&amp;lt;/tt&amp;gt;; that line will be included in the scripts below.  &lt;br /&gt;
&lt;br /&gt;
If your calculations do implicitly use threading, you may want to experiment to see what gives you the best performance - you may find that running 4 (or even 8) jobs with 2 threads each (&amp;lt;tt&amp;gt;OMP_NUM_THREADS=2&amp;lt;/tt&amp;gt;), or 2 jobs with 4 threads, gives better performance than 8 jobs with 1 thread (and almost certainly better than 1 job with 8 threads).  We'd encourage to you to perform exactly such a [[Introduction_To_Performance#Strong_Scaling_Tests | scaling test]]; for a small up-front investment in time you may significantly speed up all the computations you need to do.&lt;br /&gt;
&lt;br /&gt;
===Serial jobs of similar duration===&lt;br /&gt;
&lt;br /&gt;
The most straightforward way to run multiple serial jobs is to bunch the jobs in groups of 8 or more that will take roughly the same amount of time, and create a job that looks a &lt;br /&gt;
bit like this&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque submission script for multiple serial jobs on&lt;br /&gt;
# SciNet GPC&lt;br /&gt;
#&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=1:00:00&lt;br /&gt;
#PBS -N serialx8&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# Turn off implicit threading in Python, R&lt;br /&gt;
export OMP_NUM_THREADS=1&lt;br /&gt;
&lt;br /&gt;
# EXECUTION COMMAND; ampersand off 8 jobs and wait&lt;br /&gt;
(cd jobdir1; ./dojob1) &amp;amp;&lt;br /&gt;
(cd jobdir2; ./dojob2) &amp;amp;&lt;br /&gt;
(cd jobdir3; ./dojob3) &amp;amp;&lt;br /&gt;
(cd jobdir4; ./dojob4) &amp;amp;&lt;br /&gt;
(cd jobdir5; ./dojob5) &amp;amp;&lt;br /&gt;
(cd jobdir6; ./dojob6) &amp;amp;&lt;br /&gt;
(cd jobdir7; ./dojob7) &amp;amp;&lt;br /&gt;
(cd jobdir8; ./dojob8) &amp;amp;&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are four important things to take note of here.  First, the &amp;lt;tt&amp;gt;'''wait'''&amp;lt;/tt&amp;gt;&lt;br /&gt;
command at the end is crucial; without it the job will terminate &lt;br /&gt;
immediately, killing the 8 programs you just started.&lt;br /&gt;
&lt;br /&gt;
Second is that it is important to group the programs by how long they &lt;br /&gt;
will take.   If (say) &amp;lt;tt&amp;gt;dojob8&amp;lt;/tt&amp;gt; takes 2 hours and the rest only take 1, &lt;br /&gt;
then for one hour 7 of the 8 cores on the GPC node are wasted; they are &lt;br /&gt;
sitting idle but are unavailable for other users, and the utilization of &lt;br /&gt;
this node over the whole run is only 56%.   This is the sort of thing &lt;br /&gt;
we'll notice, and users who don't make efficient use of the machine will &lt;br /&gt;
have their ability to use scinet resources reduced.  If you have many serial jobs of varying length, &lt;br /&gt;
use the submission script to balance the computational load, as explained [[ #Serial jobs of varying duration | below]].&lt;br /&gt;
&lt;br /&gt;
Third, we reiterate that if memory requirements allow it, you should try to run more than 8 jobs at once, with a maximum of 16 jobs.&lt;br /&gt;
&lt;br /&gt;
===GNU Parallel===&lt;br /&gt;
&lt;br /&gt;
GNU parallel is a really nice tool written by Ole Tange to run multiple serial jobs in&lt;br /&gt;
parallel. It allows you to keep the processors on each 8core node busy, if you provide enough jobs to do.&lt;br /&gt;
&lt;br /&gt;
GNU parallel is accessible on the GPC in the module&lt;br /&gt;
&amp;lt;tt&amp;gt;gnu-parallel&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module load gnu-parallel/20140622&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that there are several versions of gnu-parallel installed on the GPC; we recommend using the newer version. &lt;br /&gt;
&lt;br /&gt;
The citation for GNU Parallel is: O. Tange (2011): GNU Parallel - The Command-Line Power Tool, '';login: The USENIX Magazine,'' February 2011:42-47.&lt;br /&gt;
&lt;br /&gt;
It is easiest to demonstrate the usage of GNU parallel by&lt;br /&gt;
examples. Suppose you have 16 jobs to do, that these jobs duration varies quite a bit, but that the average job duration is around 10 hours. You could use the following script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque submission script for multiple serial jobs on SciNet GPC&lt;br /&gt;
#&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=24:00:00&lt;br /&gt;
#PBS -N gnu-parallel-example&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# Turn off implicit threading in Python, R&lt;br /&gt;
export OMP_NUM_THREADS=1&lt;br /&gt;
&lt;br /&gt;
module load gnu-parallel/20140622  &lt;br /&gt;
&lt;br /&gt;
# EXECUTION COMMAND&lt;br /&gt;
parallel -j 8 &amp;lt;&amp;lt;EOF&lt;br /&gt;
  cd jobdir1; ./dojob1; echo &amp;quot;job 1 finished&amp;quot;&lt;br /&gt;
  cd jobdir2; ./dojob2; echo &amp;quot;job 2 finished&amp;quot;&lt;br /&gt;
  cd jobdir3; ./dojob3; echo &amp;quot;job 3 finished&amp;quot;&lt;br /&gt;
  cd jobdir4; ./dojob4; echo &amp;quot;job 4 finished&amp;quot;&lt;br /&gt;
  cd jobdir5; ./dojob5; echo &amp;quot;job 5 finished&amp;quot;&lt;br /&gt;
  cd jobdir6; ./dojob6; echo &amp;quot;job 6 finished&amp;quot;&lt;br /&gt;
  cd jobdir7; ./dojob7; echo &amp;quot;job 7 finished&amp;quot;&lt;br /&gt;
  cd jobdir8; ./dojob8; echo &amp;quot;job 8 finished&amp;quot;&lt;br /&gt;
  cd jobdir9; ./dojob9; echo &amp;quot;job 9 finished&amp;quot;&lt;br /&gt;
  cd jobdir10; ./dojob10; echo &amp;quot;job 10 finished&amp;quot;&lt;br /&gt;
  cd jobdir11; ./dojob11; echo &amp;quot;job 11 finished&amp;quot;&lt;br /&gt;
  cd jobdir12; ./dojob12; echo &amp;quot;job 12 finished&amp;quot;&lt;br /&gt;
  cd jobdir13; ./dojob13; echo &amp;quot;job 13 finished&amp;quot;&lt;br /&gt;
  cd jobdir14; ./dojob14; echo &amp;quot;job 14 finished&amp;quot;&lt;br /&gt;
  cd jobdir15; ./dojob15; echo &amp;quot;job 15 finished&amp;quot;&lt;br /&gt;
  cd jobdir16; ./dojob16; echo &amp;quot;job 16 finished&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;-j8&amp;lt;/tt&amp;gt; parameter sets the number of jobs to run at the same time, but 16 jobs are lined up. Initially, 8 jobs are given to the 8 processors on the node. When one of the processors is done with its assigned job, it will get a next job instead of sitting idle until the other processors are done. While you would expect that on average this script should take 20 hours (each processor on average has to complete two jobs of 10hours), there's a good chance that one of the processors gets two jobs that take more than 10 hours, so the job script requests 24 hours. How much more time you should ask for in practice depends on the spread in run times of the separate jobs.&lt;br /&gt;
&lt;br /&gt;
===Serial jobs of varying duration===&lt;br /&gt;
&lt;br /&gt;
If you have a lot (50+) of relatively short serial runs to do, '''of which the walltime varies''', and if you know that eight jobs fit in memory without memory issues, then writing all the command explicitly in the jobscript can get tedious. If you follw a convention in that the jobs are all started by auxiliary scripts called jobs&amp;lt;something&amp;gt;, the following strategy in your submission script would maximize the cpu utilization. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque submission script for multiple, dynamically-run &lt;br /&gt;
# serial jobs on SciNet GPC&lt;br /&gt;
#&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=1:00:00&lt;br /&gt;
#PBS -N serialdynamic&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# Turn off implicit threading in Python, R&lt;br /&gt;
export OMP_NUM_THREADS=1&lt;br /&gt;
&lt;br /&gt;
module load gnu-parallel/20140622  &lt;br /&gt;
&lt;br /&gt;
# COMMANDS ARE ASSUMED TO BE SCRIPTS CALLED job*.sh&lt;br /&gt;
echo job*.sh | tr ' ' '\n' | parallel -j 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notes:&lt;br /&gt;
* As before, GNU Parallel keeps 8 jobs running at a time, and if one finishes, starts the next. This is an easy way to do ''load balancing''.&lt;br /&gt;
* You can in fact run more or less than 8 processes per node by modifying &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt;'s &amp;lt;tt&amp;gt;-j8&amp;lt;/tt&amp;gt; argument.&lt;br /&gt;
* Doing many serial jobs often entails doing many disk reads and writes, which can be detrimental to the performance. In that case, running from the ramdisk may be an option.  &lt;br /&gt;
* When using a ramdisk, make sure you copy your results from the ramdisk back to the scratch after the runs, or when the job is killed because time has run out.&lt;br /&gt;
* More details on how to setup your script to use the ramdisk can be found on the [[User_Ramdisk|Ramdisk wiki page]].&lt;br /&gt;
* This script optimizes resource utility, but can only use 1 node (8 cores) at a time. The next section addresses how to use more nodes.&lt;br /&gt;
* While on the command line, the option &amp;quot;--bar&amp;quot; can be nice to see the progress, when running as a job, you would not see this status bar. Consider using the &amp;quot;&amp;lt;tt&amp;gt;--joblog FILENAME&amp;lt;/tt&amp;gt;&amp;quot; option, which writes the finished jobs into the file FILENAME.&lt;br /&gt;
* The latter also keeps track of failed jobs, so you can later try to redo those with the same command, but with the option &amp;quot;--resume&amp;quot; added.&lt;br /&gt;
&lt;br /&gt;
===Version for more than 8 cores at once (still serial)===&lt;br /&gt;
&lt;br /&gt;
If you have hundreds of serial jobs that you want to run concurrently and the nodes are available, then the approach above, while useful, would require tens of scripts to be submitted separately. It is possible for you to request more than one node and to use the following routine to distribute your processes amongst the cores. In this case, it is important to use the newer version of GNU parallel installed on the GPC.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque submission script for multiple, dynamically-run &lt;br /&gt;
# serial jobs on SciNet GPC&lt;br /&gt;
#&lt;br /&gt;
#PBS -l nodes=25:ppn=8,walltime=1:00:00&lt;br /&gt;
#PBS -N serialdynamicMulti&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# Turn off implicit threading in Python, R&lt;br /&gt;
export OMP_NUM_THREADS=1&lt;br /&gt;
&lt;br /&gt;
module load gnu-parallel/20140622&lt;br /&gt;
&lt;br /&gt;
# START PARALLEL JOBS USING NODE LIST IN $PBS_NODEFILE&lt;br /&gt;
seq 800 | parallel -j8 --sshloginfile $PBS_NODEFILE --workdir $PWD ./myrun {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;lt;tt&amp;gt;seq 800&amp;lt;/tt&amp;gt; outputs the numbers 1 through 800 on separate lines. This output is piped to (ie becomes the input of) the &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
* The use of the &amp;quot;seq 800&amp;quot; is that each line that you give to &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt; defines a new job. So here, there are 800 jobs.&lt;br /&gt;
* Each job runs a command, but because the numbers generated by seq are not commands, a real command is constructed, in this case, by the argument &amp;lt;tt&amp;gt;./myrun {}&amp;lt;/tt&amp;gt;. Here &amp;lt;tt&amp;gt;myrun&amp;lt;/tt&amp;gt; is supposed to be the name of the application to run. The two curly brackets &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; get replaced by the line from the input, that is, by one of the numbers.&lt;br /&gt;
* So parallel will run the 800 commands:&amp;lt;br/&amp;gt;./myrun 1&amp;lt;br/&amp;gt;./myrun 2&amp;lt;br/&amp;gt;...&amp;lt;br/&amp;gt;./myrun 800&lt;br /&gt;
* The parameter &amp;lt;tt&amp;gt;--sshloginfile $PBS_NODEFILE&amp;lt;/tt&amp;gt; tells &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt; to look for the file named $PBS_NODEFILE which contains the host names of the nodes assigned to the current job (as stated above, it is automatically generated).&lt;br /&gt;
* The parameter &amp;lt;tt&amp;gt;-j8&amp;lt;/tt&amp;gt; tells &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt; to run 8 of these at a time on each of the hosts.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;--workdir $PWD&amp;lt;/tt&amp;gt; sets the working directory on the other nodes to the working directory on the first node. Without this, the run tries to start from the wrong place and will most likely fail (unless using the latest gnu parallel module, 20130422, which by default puts you in $PWD on the remote node).&lt;br /&gt;
* Loaded modules should get automatically loaded on the remote nodes too for the latest gnu parallel module, but not for earlier ones.&lt;br /&gt;
* If you need an environment variable to be transfered from the job script to the remotely running subjobs, use &amp;lt;tt&amp;gt;--env ENVIRONMENTVARIABLE&amp;lt;/tt&amp;gt;.  SciNet's gnu-parallel modules automatically transfer &amp;lt;tt&amp;gt;OMP_NUM_THREADS&amp;lt;/tt&amp;gt;, and typical environment variables set by most modules.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Of course, this is just an example of what you could do with gnu parallel. How you set up your specific run depends on how each of the runs would be started. One could for instance also prepare a file of commands to run and make that the input to parallel as well.&lt;br /&gt;
* Note that submitting several bunches to single nodes, as in the section above, is a more failsafe way of proceeding, since a node failure would only affect one of these bunches, rather than all runs. &lt;br /&gt;
* GNU Parallel can be passed a file with the list of nodes to which to ssh, using &amp;lt;tt&amp;gt;--sshloginfile&amp;lt;/tt&amp;gt; (thanks to Ole Tange for pointing this out). This list is automatically generated by the scheduler and its name is made available in the environment variable $PBS_NODEFILE.&lt;br /&gt;
* Alternatively, GNU Parallel can take a comma separated list of nodes given to its -S argument, but this would need to be constructed from the file $PBS_NODEFILE which contains all nodes assigned to the job, with each node duplicated 8x for the number of cores on each node.&lt;br /&gt;
* GNU Parallel can reads lines of input and convert those to arguments in the execution command. The execution command is the last argument given to &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt;, with &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; replaces by the lines on input.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;The --workdir argument is essential: it sets the working directory on the other nodes, which would default to your home directory if omitted. Since /home is read-only on the compute nodes, you would not like not get any output at all!&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;This is no longer true for the latest GNU Parallel modules (20130422), which puts you in the current directory on the remote nodes.&lt;br /&gt;
* We reiterate that if memory requirements allow it, you should try to run more than 8 jobs at once, with a maximum of 16 jobs. You can run more or fewer than 8 processes per node by modifying the -j8 parameter to the parallel command.&lt;br /&gt;
&lt;br /&gt;
===More on GNU parallel=== &lt;br /&gt;
* [[Media:Tech-talk-gnu-parallel.pdf|Slides of the SciNet TechTalk on Gnu Parallel (14 Nov 2012)]]&lt;br /&gt;
* The documentation for GNU parallel can be found at http://www.gnu.org/software/parallel/&lt;br /&gt;
* Its man page can be found here http://www.gnu.org/software/parallel/man.html&lt;br /&gt;
* The man page is also available on the GPC when the gnu-parallel module is loaded, with the command &amp;lt;code&amp;gt;$ man parallel&amp;lt;/code&amp;gt;. The man page contains options, such as how to make sure the output is not all scrambled, and examples.&lt;br /&gt;
&lt;br /&gt;
===GNU Parallel Reference===&lt;br /&gt;
* O. Tange (2011): GNU Parallel - The Command-Line Power Tool, '';login: The USENIX Magazine,'' February 2011:42-47.&lt;br /&gt;
&lt;br /&gt;
===Older scripts===&lt;br /&gt;
&lt;br /&gt;
Older scripts, which mimicked some of GNU parallel functionality, can be found on the [[Deprecated scripts]] page.&lt;br /&gt;
&lt;br /&gt;
--[[User:Rzon|Rzon]] 02:22, 14 Nov 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Perl&amp;diff=9391</id>
		<title>Perl</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Perl&amp;diff=9391"/>
		<updated>2018-08-31T23:20:21Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Availability on SciNet systems==&lt;br /&gt;
Perl is installed on both the GPC (version 5.10.1) and the TCS (version 5.8.8). While perl can be run without the need to load any software modules,some of perl's functionality (especially installing modules from CPAN) relies on the GNU c compiler, so if you use perl on the GPC you most likely want to load the gcc module first:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
   module load gcc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: if, as we encourage, you use the intel compilers on the gpc as well, you should load the intel module after the gcc module to ensure that the environment variable are set properly.''&lt;br /&gt;
&lt;br /&gt;
==Perl modules==&lt;br /&gt;
One of the nice features of perl is the large number of perl modules that are out there.  The Comprehensive Perl Archive Network (CPAN) is a large repository for these modules.&lt;br /&gt;
&lt;br /&gt;
''Note: perl modules are internal to perl are should not be confused with the [[Software_and_Libraries|software module system]]''.&lt;br /&gt;
&lt;br /&gt;
There are so many perl modules that we cannot possible maintain all of these.  A number of module come with perl out-of-the-box and are therefore available. To find out what those are, you can use the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ perl -MFile::Find=find -MFile::Spec::Functions -Tlw -e 'find { wanted =&amp;gt; sub { print canonpath $_ if /\.pm\z/ },no_chdir =&amp;gt; 1 }, @INC'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Local perl modules from CPAN==&lt;br /&gt;
&lt;br /&gt;
Users are generally responsible for installing any other modules they need (although we can always help).  This poses a slight hurdle, as CPAN's package system would try to install these in system directories to which users have no access.  Fortunately, there is an easy way to setup CPAN to use a local folder for perl libraries. &lt;br /&gt;
&lt;br /&gt;
In the following, the local directory for perl libraries will be assumed to be &amp;lt;tt&amp;gt;~/perl5&amp;lt;/tt&amp;gt;.  For the most recent version of CPAN (which is required to install several modules and to use the local modules), follow the steps outlined below.&lt;br /&gt;
&lt;br /&gt;
===Modifications to .bashrc===&lt;br /&gt;
&lt;br /&gt;
A number of paths need to be set for perl to find the local modules you will install.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   export PERL_LOCAL_LIB_ROOT=&amp;quot;$HOME/perl5&amp;quot;&lt;br /&gt;
   export PERL_MB_OPT=&amp;quot;--install_base $HOME/perl5&amp;quot;&lt;br /&gt;
   export PERL_MM_OPT=&amp;quot;INSTALL_BASE=$HOME/perl5&amp;quot;&lt;br /&gt;
   export PERL5LIB=&amp;quot;$HOME/perl5/lib/perl5/x86_64-linux-thread-multi:$HOME/perl5/lib/perl5&amp;quot;&lt;br /&gt;
   export PATH=&amp;quot;$HOME/perl5/bin:$PATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting up a user-space CPAN modules directory===&lt;br /&gt;
&lt;br /&gt;
The following only works for the GPC (for now).&lt;br /&gt;
&lt;br /&gt;
1. First, since installing perl modules may involve compilation, be sure to be on a devel node (e.g. &amp;lt;tt&amp;gt;ssh gpc01&amp;lt;/tt&amp;gt;). On the gpc, make sure that the gcc module is loaded (&amp;lt;tt&amp;gt;module load gcc&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
2. If this is not your first time using CPAN (for instance, you have tried before using it and found that you could not install any packages), you may have to remove your ~/.cpan directory. This will trigger a new configuration in the next step.&lt;br /&gt;
&lt;br /&gt;
3. Start a CPAN shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $ cpan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. It will ask if you would like to get as much as possible configured automatically/ Say '''no'''. (In older versions of perl, 5.8.8, it would ask you whether you are ready for a manual configuration, to which you'd say yes or &amp;lt;enter&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
5. It will now ask you a bunch of questions, almost all of which you can answer with the default (i.e. press &amp;lt;enter&amp;gt;), except for a few:&lt;br /&gt;
&lt;br /&gt;
* When the installation asks for ''Parameters for the 'perl Makefile.PL' command'', enter: &amp;lt;pre&amp;gt;   LIB=~/perl5/lib/perl5 INSTALLMAN1DIR=~/perl5/man/man1 INSTALLMAN3DIR=~/perl5/man/man3&lt;br /&gt;
&amp;lt;/pre&amp;gt;(all on one line).&lt;br /&gt;
* When it asks for ''Parameters for the 'perl Build.PL' command'', it is suggested '''not''' to add an '--install_base ' argument (put a space in instead).&lt;br /&gt;
* When it asks ''If no urllist has been chosen yet, would you prefer CPAN.pm to connect to the built-in default sites without asking? '' say '''yes'''.&lt;br /&gt;
* When it asks for the repository to use, you can pick what you want, but after choosing 'North America' and 'Canada', I chose site #6, for no particular reason.&lt;br /&gt;
* Warning messages regarding YAML and AddHistory should be harmless.&lt;br /&gt;
&lt;br /&gt;
7. A module called &amp;lt;tt&amp;gt; local::lib &amp;lt;/tt&amp;gt; is required to read the .bashrc environment variables properly.  To install the latest &amp;lt;tt&amp;gt; local::lib &amp;lt;/tt&amp;gt;, type &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   notest install local::lib &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in the CPAN shell and press &amp;lt;enter&amp;gt;.  If you are not sure if you should do this, do it anyways, as it installs a bunch of modules that other modules you may be using likely depend on. &lt;br /&gt;
&lt;br /&gt;
8. As the module is installing, numerous prerequisites will also be installed (including an updated version of CPAN).  Answer each with the default option.&lt;br /&gt;
&lt;br /&gt;
9. Type &amp;lt;tt&amp;gt; exit &amp;lt;/tt&amp;gt; into the cpan shell.&lt;br /&gt;
&lt;br /&gt;
With version 5.8.8 (the version which we had with CentOS 5), this recipe would throw an error, and two more steps were required:&lt;br /&gt;
:10. Restart the cpan shell.  The shell will ask if you want to configure as much as possible automatically.  Choose yes.&lt;br /&gt;
:11. Install &amp;lt;tt&amp;gt; local::lib &amp;lt;/tt&amp;gt; again as you did in step 7 and now everything should install without errors.&lt;br /&gt;
&lt;br /&gt;
===Another way to set up a user-space CPAN modules directory===&lt;br /&gt;
&lt;br /&gt;
''Note: the previous, more involved, instructions appear to be necessary to install local::lib and larger packages such as BioPerl.  For some local packages, the instructions below may suffice.''&lt;br /&gt;
&lt;br /&gt;
The following works for me (ejspence) on GPC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. First, since installing perl modules may involve compilation, be sure to be on a devel node (e.g. &amp;lt;tt&amp;gt;ssh gpc01&amp;lt;/tt&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
2. On the GPC, make sure that the gcc module is loaded.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 module load gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. I only set one environment variable.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  export PERL5LIB=$HOME/lib/perl5:$HOME/lib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If this is not your first time using CPAN (for instance, you have tried before using it and found that you could not install any packages), you may have to remove your ~/.cpan directory. This will trigger a new configuration in the next step.&lt;br /&gt;
&lt;br /&gt;
5. Start a CPAN shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $ cpan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. It will ask if you would like to get as much as possible configured automatically.  Say '''yes'''. &lt;br /&gt;
&lt;br /&gt;
7. Now use cpan to set the default installation directory&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cpan&amp;gt;&lt;br /&gt;
 cpan&amp;gt; o conf makepl_arg INSTALL_BASE=$HOME&lt;br /&gt;
 cpan&amp;gt; o conf commit&lt;br /&gt;
 cpan&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to install packages using cpan.&lt;br /&gt;
&lt;br /&gt;
===Installing CPAN modules===&lt;br /&gt;
&lt;br /&gt;
Either from the CPAN shell or from the command line, you can now install packages quite simly by &amp;lt;tt&amp;gt;perl -MCPAN -e install &amp;lt;perlmodule&amp;gt; &amp;lt;/tt&amp;gt; or simply &amp;lt;tt&amp;gt;cpan &amp;lt;perlmodule&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Using the modules===&lt;br /&gt;
&lt;br /&gt;
You can use local perl modules just as you would use system-wide perl modules.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=MATLAB&amp;diff=9390</id>
		<title>MATLAB</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=MATLAB&amp;diff=9390"/>
		<updated>2018-08-31T23:20:00Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
We often get questions about running MATLAB on GPC.  With a few exceptions for compilers and debuggers, SciNet does not purchase licenses for commercial software.  As such, SciNet does not have a license for MATLAB, nor will it in the future.  If users wish to run MATLAB they must supply their own license, or explore alternative options.  This page gives information about the options for getting your MATLAB code to run, in recommended order. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Not using MATLAB ==&lt;br /&gt;
&lt;br /&gt;
Users can attempt to run MATLAB code using the open-source program Octave, accessible through the octave module.  Though there are some differences between the two programs, Octave has been designed to interpret MATLAB code and can often be used in place of MATLAB.  If your MATLAB code does not use some of the more-fancy MATLAB toolboxes, you may be able to get away with using Octave instead.  Be sure to test your implementation in Octave thoroughly before committing to this option.&lt;br /&gt;
&lt;br /&gt;
It is worth observing that, while convenient for prototyping and running on a single workstation, there are reasons to avoid using MATLAB for larger HPC/ARC projects.  These include the prohibitive license cost for large-scale work, poor performance at scale, and portability issues.  If you can switch to a license-free option, such as Python, it may be worth the effort.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating a MATLAB executable ==&lt;br /&gt;
&lt;br /&gt;
If MATLAB must be used, you may be able to compile your MATLAB code into a stand-alone executable, and run this on a GPC compute node.  The version of MATLAB being used will require a compiler license, and the compilation must be done on a Linux machine.  Once the compilation is done, the executable can be copied to SciNet, and run using the MATLAB Compiler Runtime (MCR), which can be accessed using the MCR module.  The MCR used must be the same version of MATLAB as the compiler.  If the version of MCR that you need is not listed among the MCR module versions, contact us and we will install the version which you require.&lt;br /&gt;
&lt;br /&gt;
Here is an example script which uses the MCR:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque submission script for SciNet GPC &lt;br /&gt;
#&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=1:00:00&lt;br /&gt;
#PBS -N test_matlab&lt;br /&gt;
#PBS -q debug&lt;br /&gt;
&lt;br /&gt;
# load modules (gcc is needed for MCR/2015a)&lt;br /&gt;
module load Xlibraries gcc/5.2.0 MCR/2015a&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory from which the job was submitted&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# Directory for the MCR to use to write temporary files.  Use whatever directory you wish.&lt;br /&gt;
mkdir -p $SCRATCH/temp&lt;br /&gt;
export MCR_CACHE_ROOT=$SCRATCH/temp&lt;br /&gt;
&lt;br /&gt;
# EXECUTION COMMAND (note that the MATLAB script may require that LD_LIBRARY_PATH be added&lt;br /&gt;
# to the script arguments).  Note that, if the calculations are serial, you must bundle 8 such&lt;br /&gt;
# calculations together for production runs!&lt;br /&gt;
./run_myscript.sh $MCR:$LD_LIBRARY_PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tunnelling to a license server ==&lt;br /&gt;
&lt;br /&gt;
If you have access to a non-SciNet MATLAB license server, and have installed MATLAB in your $HOME directory, you can setup your submission script to access the external license server.  The following lines should be added to the beginning of your submission script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PORT=XXX                                         # port number of the license server&lt;br /&gt;
LICENSE_IP=AAA.BBB.CCC.DDD                       # IP address of the license server&lt;br /&gt;
ssh gpc01 -L${PORT}:${LICENSE_IP}:${PORT} -N &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This last line will tunnel the port from the compute node back to the license server, through gpc01.  The port number and IP address of the licence server must be supplied by the system administrator of the license server.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using a different Consortium ==&lt;br /&gt;
&lt;br /&gt;
Both [https://www.sharcnet.ca/my/software/show/54 Sharcnet] and [https://www.westgrid.ca/support/software/matlab Westgrid] have purchased different types of MATLAB licenses.  Users can contact those consortia if they wish to attempt to run on those systems.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=BGQ_OpenFOAM&amp;diff=9389</id>
		<title>BGQ OpenFOAM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=BGQ_OpenFOAM&amp;diff=9389"/>
		<updated>2018-08-31T23:03:10Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Using OpenFOAM on BG/Q ==&lt;br /&gt;
There are various OpenFOAM versions installed on BGQ. You can see the list by typing &amp;quot;module avail&amp;quot; on the terminal:&lt;br /&gt;
* OpenFOAM/2.3.1(default)&lt;br /&gt;
* OpenFOAM/2.4.0&lt;br /&gt;
* OpenFOAM/3.0.1&lt;br /&gt;
* OpenFOAM/5.0&lt;br /&gt;
and&lt;br /&gt;
* FEN/OpenFOAM/2.2.0&lt;br /&gt;
* FEN/OpenFOAM/2.3.0&lt;br /&gt;
* FEN/OpenFOAM/2.4.0&lt;br /&gt;
* FEN/OpenFOAM/3.0.1&lt;br /&gt;
* FEN/OpenFOAM/5.0 &lt;br /&gt;
&lt;br /&gt;
The modules start with FEN refer to the installations can be used on the Front-End-Nodes. Therefore if you want to run serial tasks such as blockMesh, decomposePar or reconstructParMesh, please use FEN/OpenFOAM/* modules. Do not forget that FEN is not a dedicated area, each Front-End-Node is shared among connected users and only has 32GB of memory. So if you try to decompose a case with 100 million cells, you will occupy the whole FEN machine and run out of memory therefore make it unavailable for everyone.&lt;br /&gt;
&lt;br /&gt;
When you want to submit a job, you should do that on the FEN using a batch script by typing the modules you want load inside the batch script. This is the only way of using compute nodes on BGQ. There is a sample batch script below. You can use it as a template and modify it according to your needs.&lt;br /&gt;
&lt;br /&gt;
== Running Serial OpenFOAM Tasks ==&lt;br /&gt;
&lt;br /&gt;
As it has been written in the previous section, if you want to run serial tasks you need to use one of the FEN based modules. Most common serial tasks are:&lt;br /&gt;
* blockMesh: Creates the block structured computational volume consists of hex elements.&lt;br /&gt;
* decomposePar: Parallelises a serial case. Grid partitioning.&lt;br /&gt;
* reconstructPar: Reconstructs a parallel case (results). &lt;br /&gt;
* reconstructParMesh: Reconstructs a parallel case (mesh). &lt;br /&gt;
&lt;br /&gt;
These binaries are not available on the compute nodes, therefore you can use these tools only on the FEN anyway.&lt;br /&gt;
&lt;br /&gt;
== Parallelizing OpenFOAM Cases ==&lt;br /&gt;
&lt;br /&gt;
In order to run OpenFOAM in parallel, the problem needs to be decomposed into a number of subdomains that match the number of processors that will be used. OpenFOAM has a  '''[http://www.openfoam.org/docs/user/running-applications-parallel.php decomposePar]''' utility that performs this operation. The control for this is done creating a OpenFOAM dictionary called decomposeParDict in the system directory of your case folder. decomposeParDict is the input file for the command &amp;quot;decomposePar -force&amp;quot;. Below is an example file for decomposing an OpenFOAM case for running on 4 cores.&lt;br /&gt;
&lt;br /&gt;
'''system/decomposeParDict'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*--------------------------------*- C++ -*----------------------------------*\&lt;br /&gt;
| =========                 |                                                 |&lt;br /&gt;
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |&lt;br /&gt;
|  \\    /   O peration     | Version:  2.4.0                                 |&lt;br /&gt;
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |&lt;br /&gt;
|    \\/     M anipulation  |                                                 |&lt;br /&gt;
\*---------------------------------------------------------------------------*/&lt;br /&gt;
FoamFile&lt;br /&gt;
{&lt;br /&gt;
    version     2.0;&lt;br /&gt;
    format      ascii;&lt;br /&gt;
    class       dictionary;&lt;br /&gt;
    location    &amp;quot;system&amp;quot;;&lt;br /&gt;
    object      decomposeParDict;&lt;br /&gt;
}&lt;br /&gt;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
&lt;br /&gt;
numberOfSubdomains 4;&lt;br /&gt;
&lt;br /&gt;
method          simple;&lt;br /&gt;
&lt;br /&gt;
simpleCoeffs&lt;br /&gt;
{&lt;br /&gt;
    n               ( 2 2 1 );&lt;br /&gt;
    delta           0.001;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ************************************************************************* //&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option for decomposition is hierarchical. If you use this method, then similar to simple you have to define hierarchicalCoeffs. Only difference between simple and hierarchical is that with hierarchical method you can define the order of the decomposition operation (xyz or zyx). There are more complicated methods of decomposition supported by OpenFOAM but since this a serial tasks that needs to be performed on FEN, these two methods are suggested.&lt;br /&gt;
&lt;br /&gt;
The crucial part of the decomposeParDict is the numberOfSubdomains defined in the file. The intended number of cores should match this value. Therefore if one wants to run a case on 64 nodes using all cores then numberOfSubdomains should be 1024. Also, multiplication of the n values should be equal to this number for consistency. Otherwise OpenFOAM will complain because of the mismatch.&lt;br /&gt;
&lt;br /&gt;
== Running Parallel Meshing ==&lt;br /&gt;
The built-in meshing tool comes with OpenFOAM package is called snappyHexMesh. This tool reads inputs from the &amp;quot;system/snappyHexMeshDict&amp;quot; file and writes outputs to the &amp;quot;constant/polyMesh&amp;quot; folder (if used with -overwrite flag, otherwise writes to separate time folders 1/, 2/). snappyHexMesh operates on the outputs of blockMesh, refines specified regions, snaps out solid areas from the volume and adds boundary layers if enabled. &lt;br /&gt;
&lt;br /&gt;
Before running mesh generation one needs to run &amp;quot;decomposePar -force&amp;quot;, so that the case is parallelised and made available to run parallel executions on it. One can submit the script below to run parallel mesh generation on BG/Q:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# @ job_name           = motorBike_mesh&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job By Size&amp;quot;&lt;br /&gt;
# @ error              = $(jobid).err&lt;br /&gt;
# @ output             = $(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 06:00:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ queue &lt;br /&gt;
&lt;br /&gt;
# Load modules&lt;br /&gt;
module purge&lt;br /&gt;
module load binutils/2.23 bgqgcc/4.8.1 mpich2/gcc-4.8.1 OpenFOAM/5.0&lt;br /&gt;
source $FOAM_DOT_FILE&lt;br /&gt;
&lt;br /&gt;
# NOTE: when using --env-all there is a limit of 8192 characters that can be passed to runjob&lt;br /&gt;
# so removing LS_COLORS should free up enough space&lt;br /&gt;
export -n LS_COLORS&lt;br /&gt;
&lt;br /&gt;
# Disabling the pt2pt small message optimizations - Solves hanging problems&lt;br /&gt;
export PAMID_SHORT=0&lt;br /&gt;
&lt;br /&gt;
# Sets the cutoff point for switching from eager to rendezvous protocol at 50MB&lt;br /&gt;
export PAMID_EAGER=50M&lt;br /&gt;
&lt;br /&gt;
# Do not optimise collective comm. - Solves termination with signal 36 issue&lt;br /&gt;
export PAMID_COLLECTIVES=0&lt;br /&gt;
&lt;br /&gt;
# Do not generate core dump files&lt;br /&gt;
export BG_COREDUMPDISABLED=1&lt;br /&gt;
&lt;br /&gt;
# Run mesh generation&lt;br /&gt;
runjob --np 1024 --ranks-per-node=16 --env-all : $FOAM_APPBIN/snappyHexMesh -overwrite -parallel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Loadleveler Submission Script for Solvers ==&lt;br /&gt;
&lt;br /&gt;
The following is a sample script for running the OpenFOAM tutorial case on BG/Q:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# @ job_name           = bgqopenfoam&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job By Size&amp;quot;&lt;br /&gt;
# @ error              = $(job_name).$(Host).$(jobid).err&lt;br /&gt;
# @ output             = $(job_name).$(Host).$(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 06:00:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ queue &lt;br /&gt;
&lt;br /&gt;
#------------------ Solver on BGQ --------------------&lt;br /&gt;
# Load BGQ OpenFOAM modules&lt;br /&gt;
module purge&lt;br /&gt;
module load binutils/2.23 bgqgcc/4.8.1 mpich2/gcc-4.8.1 OpenFOAM/5.0&lt;br /&gt;
source $FOAM_DOT_FILE&lt;br /&gt;
&lt;br /&gt;
# NOTE: when using --env-all there is a limit of 8192 characters that can passed to runjob&lt;br /&gt;
# so removing LS_COLORS should free up enough space&lt;br /&gt;
export -n LS_COLORS&lt;br /&gt;
&lt;br /&gt;
# Some solvers, simpleFOAM particularly, will hang on startup when using the default&lt;br /&gt;
# network parameters.  Disabling the pt2pt small message optimizations seems to allow it to run.&lt;br /&gt;
export PAMID_SHORT=0&lt;br /&gt;
export PAMID_EAGER=50M&lt;br /&gt;
&lt;br /&gt;
# Do not optimise collective comm.&lt;br /&gt;
export PAMID_COLLECTIVES=0&lt;br /&gt;
&lt;br /&gt;
# Do not generate core dump files&lt;br /&gt;
export BG_COREDUMPDISABLED=1&lt;br /&gt;
&lt;br /&gt;
# Run solver&lt;br /&gt;
runjob --np 1024 --env-all  : $FOAM_APPBIN/icoFoam -parallel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Typical OpenFOAM Applications on BG/Q ==&lt;br /&gt;
A list of examples will be shared here. These sample cases are derived from applications that are run on BG/Q but changed for confidentiality reasons. It can guide new users for their specific use cases. Most of the information here is OpenFOAM specific, not BG/Q specific.&lt;br /&gt;
&lt;br /&gt;
=== Wind Flow Around Buildings ===&lt;br /&gt;
This is a tutorial case that can be found in $FOAM_TUTORIALS/incompressible/simpleFoam/windAroundBuildings&lt;br /&gt;
&lt;br /&gt;
=== Rotational Flows in OpenFOAM ===&lt;br /&gt;
Information will be added soon!&lt;br /&gt;
&lt;br /&gt;
=== LES Models in OpenFOAM ===&lt;br /&gt;
Information will be added soon!&lt;br /&gt;
&lt;br /&gt;
=== Multiphase Flows in OpenFOAM ===&lt;br /&gt;
Information will be added soon!&lt;br /&gt;
&lt;br /&gt;
== Post-Processing== &lt;br /&gt;
&lt;br /&gt;
This will be updated as the ParaView installation on Niagara will be completed!&lt;br /&gt;
&lt;br /&gt;
https://support.scinet.utoronto.ca/wiki/index.php/Using_Paraview&lt;br /&gt;
&lt;br /&gt;
== General Tips and Tricks ==&lt;br /&gt;
&lt;br /&gt;
* Run serial tasks on FEN using FEN/OpenFOAM/* modules&lt;br /&gt;
* Make a quality check for your mesh using checkMesh tool. Be careful that if you run a serial checkMesh in a parallel case, it will only return results from &amp;quot;case/constant/polyMesh&amp;quot; not from &amp;quot;case/processor*/constant/polyMesh&amp;quot;&lt;br /&gt;
* Perform test runs using debug nodes before you submit large jobs. Request debug session with &amp;quot;debugjob -i&amp;quot; and use runjob.&lt;br /&gt;
* Always work with binary files. This can be set in the &amp;quot;case/system/controlDict&amp;quot;.&lt;br /&gt;
* You can convert cases from ascii to binary using foamFormatConvert command.&lt;br /&gt;
* Keep your simulations under $SCRATCH.&lt;br /&gt;
* If you write your own code, keep them under $HOME. Preferably create a directory &amp;quot;$HOME/OpenFOAM/username-X.Y/src&amp;quot; and work here.&lt;br /&gt;
* If you write your own code, do not forget to compile them to $FOAM_USER_APPBIN or $FOAM_USER_LIBBIN. You might need to compile shared objects on debug nodes as well.&lt;br /&gt;
* OpenFOAM is a pure MPI code, there is no multithreading in OpenFOAM.&lt;br /&gt;
* Each and every node on BG/Q has 16 GB memory and 16 compute cores. Some OpenFOAM functions, especially snappyHexMesh, are very memory consuming up to 4GB memory per 1M cells. Use 8 ranks per node if you run out of memory however be careful with that. Do not waste resources. Usually solvers require 1GB memory per 1M cells which allows users to fully utilize all 16 compute cores on a node.&lt;br /&gt;
* Try collated option using the version 5.0. It significantly reduces the number of files however master processor gets overloaded.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Python&amp;diff=9388</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Python&amp;diff=9388"/>
		<updated>2018-08-31T23:01:36Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.python.org/ Python] is programming language that continues to grow in popularity for scientific computing.   It is very fast to write code in, but the software that results is much much slower than C or Fortran; one should be wary of doing too much compute-intensive work in Python.     &lt;br /&gt;
&lt;br /&gt;
There is a dizzying amount of documentation available for programming in Python on the [http://python.org/ Python.org webpage]; SciNet has given a mini-course of 8 lectures on [[Research Computing with Python]] in the Fall of 2013.&lt;br /&gt;
An excellent set of material for teaching scientists to program in Python is also available at the [http://software-carpentry.org/4_0/python/ Software Carpentry homepage].&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__ &lt;br /&gt;
&lt;br /&gt;
== Python on the GPC ==&lt;br /&gt;
&lt;br /&gt;
We currently have several versions of python installed, compiled against fast intel math libraries.  To load the python modules, type the following commands:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Version&lt;br /&gt;
! Command&lt;br /&gt;
|-&lt;br /&gt;
|2.7.2&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load gcc intel python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.7.3&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load gcc intel/13.1.1 python/2.7.3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.7.5&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load gcc intel/13.1.1 python/2.7.5&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.7.8&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load intel/15.0.2 python/2.7.8&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.7.11&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load anaconda2/4.0.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.7.13&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load anaconda2/4.3.1&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|3.3.4&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load gcc intel/14.0.1 python/3.3.4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|3.5.1&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load anaconda3/4.0.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|3.6.1&lt;br /&gt;
|&amp;lt;tt&amp;gt;module load anaconda3/4.4.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modules installed system-wide ==&lt;br /&gt;
&lt;br /&gt;
Many optional packages are available for Python which greatly extend the language adding important new functionality.  Those packages which are likely to be important to all of our users &amp;amp;mdash; eg, [http://numpy.scipy.org/ NumPy], [http://www.scipy.org/ SciPy], and [http://matplotlib.sourceforge.net/ Matplotlib] are installed system-wide.&lt;br /&gt;
&lt;br /&gt;
Below is a list of the packages currently installed system-wide.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!{{Hl2}}| Module  &lt;br /&gt;
!{{Hl2}}| python/2.7.2 &lt;br /&gt;
!{{Hl2}}| python/2.7.3 &lt;br /&gt;
!{{Hl2}}| python/2.7.5 &lt;br /&gt;
!{{Hl2}}| python/2.7.8&lt;br /&gt;
!{{Hl2}}| python/3.3.4&lt;br /&gt;
!{{Hl2}}| Comments&lt;br /&gt;
|-  &lt;br /&gt;
|[http://www.scipy.org/ SciPy]&lt;br /&gt;
| 0.10.0&lt;br /&gt;
| 0.11.0&lt;br /&gt;
| 0.14.0&lt;br /&gt;
| 0.14.0&lt;br /&gt;
| 0.14.0&lt;br /&gt;
| An Open-source software for mathematics, science, and engineering.  Version in Python 2.7.x is linked against very fast MKL numerical libraries. &lt;br /&gt;
|-&lt;br /&gt;
|[http://numpy.scipy.org/ NumPy]&lt;br /&gt;
| 1.6.1&lt;br /&gt;
| 1.7.0&lt;br /&gt;
| 1.7.0&lt;br /&gt;
| 1.9.1&lt;br /&gt;
| 1.8.1&lt;br /&gt;
| NumPy is the fundamental package needed for scientific computing with Python. Contains fast arrays, tools for integrating C/C++ and Fortran code, linear algebra solvers, etc.  SciPy is built on top of NumPy.&lt;br /&gt;
|-&lt;br /&gt;
| [http://mpi4py.scipy.org/ mpi4py]&lt;br /&gt;
| 1.2.2&lt;br /&gt;
| 1.2.2&lt;br /&gt;
| 1.2.2&lt;br /&gt;
| 1.2.2&lt;br /&gt;
| 1.2.2&lt;br /&gt;
| A pythonic interface to mpi.   Available with openmpi; must load an openmpi module for this to work. (There is an issue with openmpi 1.4.x + infiniband, however it does appear to work fine with IntelMPI)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.scipy.org/SciPyPackages/NumExpr Numexpr]&lt;br /&gt;
| 2.0&lt;br /&gt;
| 2.0.1&lt;br /&gt;
| 2.2.1&lt;br /&gt;
| 2.4&lt;br /&gt;
| 2.4_rc2&lt;br /&gt;
| Fast, memory-efficient elementwise operations on Numpy arrays.&lt;br /&gt;
|-&lt;br /&gt;
| [http://dirac.cnrs-orleans.fr/plone/software/scientificpython/ ScientificPython]&lt;br /&gt;
| 2.8 &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| A collection of scientific python utilities.   Does not include MPI support.  No longer supported.&lt;br /&gt;
|-&lt;br /&gt;
| [http://yt.enzotools.org/ yt]&lt;br /&gt;
| 2.2&lt;br /&gt;
| 2.5.3&lt;br /&gt;
| 2.5.5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| A collection of python tools for analyzing astrophysical simulation output.&lt;br /&gt;
|-&lt;br /&gt;
| [http://ipython.scipy.org/moin/ iPython]&lt;br /&gt;
| 0.11 &lt;br /&gt;
| 0.13.1&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 2.3.0&lt;br /&gt;
| 1.2.1&lt;br /&gt;
| An enhanced interactive python.&lt;br /&gt;
|-&lt;br /&gt;
| [http://matplotlib.sourceforge.net/ Matplotlib], pylab&lt;br /&gt;
| 1.1.0&lt;br /&gt;
| 1.2.0&lt;br /&gt;
| 1.3.0&lt;br /&gt;
| 1.4.2&lt;br /&gt;
| 1.3.1&lt;br /&gt;
| Matlab-like plotting for python.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pytables.org/moin PyTables]&lt;br /&gt;
| 2.3.1 &lt;br /&gt;
| 2.4.0&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3.1.1&lt;br /&gt;
| 3.1.1&lt;br /&gt;
| Fast and efficient access to HDF5 files (and HDF5-format NetCDF4 files.)   Requires the &amp;lt;tt&amp;gt;hdf5/184-p1-v18-serial-gcc&amp;lt;/tt&amp;gt; module to be loaded. &lt;br /&gt;
|-&lt;br /&gt;
| [http://code.google.com/p/netcdf4-python/ NetCDF4-python]&lt;br /&gt;
| 0.9.8&lt;br /&gt;
| 1.0.4&lt;br /&gt;
| 1.1.1&lt;br /&gt;
| -&lt;br /&gt;
| 1.1.0&lt;br /&gt;
| Python interface to NetCDF4 files.   Requires the &amp;lt;tt&amp;gt;netcdf/4.0.1_hdf5_v18-serial.shared-nofortran&amp;lt;/tt&amp;gt; module to be loaded. &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pyngl.ucar.edu/Nio.shtml pyNIO]&lt;br /&gt;
| 1.4.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Yet another Python interface to NetCDF4 files; again, requires the &amp;lt;tt&amp;gt;netcdf/4.0.1_hdf5_v18-serial.shared-nofortran&amp;lt;/tt&amp;gt; module.  No longer supported.&lt;br /&gt;
|-&lt;br /&gt;
| [http://alfven.org/wp/hdf5-for-python/ h5py]&lt;br /&gt;
| 2.0.1&lt;br /&gt;
| 2.1.3&lt;br /&gt;
| 2.2.0&lt;br /&gt;
| 2.3.1&lt;br /&gt;
| 2.3.0&lt;br /&gt;
| Yet another Python interface to HDF5 files; again, requires an HDF5 module to be loaded.&lt;br /&gt;
|-&lt;br /&gt;
| [http://pysvn.tigris.org/ PySVN]&lt;br /&gt;
| 1.7.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Python interface to the svn version control system. &lt;br /&gt;
|-&lt;br /&gt;
| [http://mercurial.selenic.com/ Mercurial]&lt;br /&gt;
| 2.0.1&lt;br /&gt;
| 2.6.2&lt;br /&gt;
| 2.7.1&lt;br /&gt;
| 3.2&lt;br /&gt;
| -&lt;br /&gt;
| A distributed version-control system written in Python.&lt;br /&gt;
|-&lt;br /&gt;
| [http://cython.org/ Cython]&lt;br /&gt;
| 0.15.1&lt;br /&gt;
| 0.18&lt;br /&gt;
| 0.19.1&lt;br /&gt;
| 0.21.1&lt;br /&gt;
| 0.20.1&lt;br /&gt;
| Cython is a compiler which compiles Python-like code files to C code and allows them to be easily called from Python.&lt;br /&gt;
|-&lt;br /&gt;
| [http://code.google.com/p/python-nose/ nose]&lt;br /&gt;
| 1.1.2&lt;br /&gt;
| 1.2.1&lt;br /&gt;
| 1.3.0&lt;br /&gt;
| 1.3.4&lt;br /&gt;
| 1.3.0&lt;br /&gt;
| A unit-testing framework for python.&lt;br /&gt;
|- &lt;br /&gt;
| [http://pypi.python.org/pypi/setuptools setuptools]&lt;br /&gt;
| 0.6c11&lt;br /&gt;
| 0.6c11&lt;br /&gt;
| 1.1&lt;br /&gt;
| 7.0&lt;br /&gt;
| 5.1&lt;br /&gt;
| Enables easy installation of new python modules&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandas.pydata.org/ pandas]&lt;br /&gt;
| 0.13.0&lt;br /&gt;
| 0.13.0&lt;br /&gt;
| 0.13.0&lt;br /&gt;
| 0.15.0&lt;br /&gt;
| 0.14.1&lt;br /&gt;
| high-performance, easy-to-use data structures and data analysis tools.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.astropy.org astropy]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 0.3&lt;br /&gt;
| 0.4.2&lt;br /&gt;
| 0.3.2&lt;br /&gt;
| astronomical routines&lt;br /&gt;
|-&lt;br /&gt;
| [http://briansimulator.org/ brian]&lt;br /&gt;
| 1.4.1&lt;br /&gt;
| 1.4.1&lt;br /&gt;
| 1.4.1&lt;br /&gt;
| 1.4.1&lt;br /&gt;
| -&lt;br /&gt;
| spiking neural network simulator&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Producing Matplotlib Figures on GPC Compute Nodes and in Job Scripts ==&lt;br /&gt;
&lt;br /&gt;
The conventional way of producing figures from python using matplotlib i.e., &lt;br /&gt;
&lt;br /&gt;
    import matplotlib.pyplot as plt&lt;br /&gt;
    plt.plot(.....)&lt;br /&gt;
    plt.savefig(...)&lt;br /&gt;
&lt;br /&gt;
will not work on the GPC compute nodes. The reason is that pyplot will try to open the figure in a window on the screen, but the compute nodes do not have screens or window managers.  There is an easy workaround, however, that sets up a different 'backend' to matplotlib, one that does not try to open a window, as follows:&lt;br /&gt;
 &lt;br /&gt;
    import matplotlib as mpl&lt;br /&gt;
    mpl.use('Agg')&lt;br /&gt;
    import matplotlib.pyplot as plt&lt;br /&gt;
    plt.plot(.....)&lt;br /&gt;
    plt.savefig(...)&lt;br /&gt;
&lt;br /&gt;
It is essential that the &amp;lt;tt&amp;gt;mpl.use('Agg')&amp;lt;/tt&amp;gt; command precedes the importing of pyplot. &lt;br /&gt;
&lt;br /&gt;
== Installing your own Python Modules ==&lt;br /&gt;
&lt;br /&gt;
Python provides an easy way for users to install the libraries they need in their home directories rather than having them installed system-wide. There are so many optional  packages for Python people could potentially want (see e.g. http://pypi.python.org/pypi), that we recommend users install these additional packages locally in their home directories.  This is almost certainly the easiest way to deal with the wide range of packages, ensure they're up to date, and ensure that users' package choices don't conflict. &lt;br /&gt;
&lt;br /&gt;
To install your own Python modules, follow the instructions below.   Where the instructions say &amp;lt;tt&amp;gt;python2.X&amp;lt;/tt&amp;gt;, type &amp;lt;tt&amp;gt;python2.6&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;python2.7&amp;lt;/tt&amp;gt; depending on the version of python you are using.&lt;br /&gt;
&lt;br /&gt;
* First, create a directory in your home directory, &amp;lt;tt&amp;gt;${HOME}/lib/python2.X/site-packages&amp;lt;/tt&amp;gt;, where the packages will go.&lt;br /&gt;
* Next, in your &amp;lt;tt&amp;gt;.bashrc&amp;lt;/tt&amp;gt;, *after* you &amp;lt;tt&amp;gt;module load python&amp;lt;/tt&amp;gt; and in the &amp;quot;GPC&amp;quot; section, add the following line:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
export PYTHONPATH=${PYTHONPATH}:${HOME}/lib/python2.X/site-packages/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Re-load the modified .bashrc by typing &amp;lt;tt&amp;gt;source ~/.bashrc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Now, if it's a standard python package and instructions say that you can use easy_intall to install it,&lt;br /&gt;
** install with the following command. where &amp;lt;tt&amp;gt;packagename&amp;lt;/tt&amp;gt; is the name of the package you are installing: &lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
easy_install --prefix=${HOME} -O1 [packagename]&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
** Continue doing this until all of the packages you need to install are successfully installed.&lt;br /&gt;
** If, upon importing the new python package, you get error messages like &amp;lt;tt&amp;gt;undefined symbol: __stack_chk_guard&amp;lt;/tt&amp;gt;, you may need to use the following command instead:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
LDFLAGS=-fstack-protector easy_install --prefix=${HOME} -O1 [packagename]&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* If easy_install isn't an option for your package, and the installation instructions instead talk about downloading a file and using &amp;lt;tt&amp;gt;python setup.py install&amp;lt;/tt&amp;gt; then instead:&lt;br /&gt;
** Download the relevant files&lt;br /&gt;
** You will probably have to uncompress and untar them: &amp;lt;tt&amp;gt;tar -xzvf packagename.tgz&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;tar -xjvf packagename.bz2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** cd into the newly created directory, and run &lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
python setup.py install --prefix=${HOME}&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Now, the install process may have added some .egg files or directories to your path.  For each .egg directory, add that to your python path as well in your .bashrc, in the same place as you had updated PYTHONPATH before: eg,&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
export PYTHONPATH=${PYTHONPATH}:${HOME}/lib/python2.X/site-packages:${HOME}/lib/python2.X/site-packages/packagename1-x.y.z-yy2.X.egg:${HOME}/lib/python2.X/site-packages/packagename2-a.b.c-py2.X.egg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You should now be done!   Now, re-source your .bashrc and test your new python modules.&lt;br /&gt;
&lt;br /&gt;
* In order to keep your .bashrc relatively uncluttered, and to avoid potential conflicts among software modules, we recommend that users create their own  modules (for the &amp;quot;module&amp;quot; system, not specifically python modules).  &lt;br /&gt;
&lt;br /&gt;
[[Brian|Here]] is an example module for the [[Brian]] package, including instructions for the installation of the python [[Brian]] package itself.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=GPC_MPI_Versions&amp;diff=9387</id>
		<title>GPC MPI Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=GPC_MPI_Versions&amp;diff=9387"/>
		<updated>2018-08-09T17:32:22Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can only use ONE mpi version at a time as most versions use the same &lt;br /&gt;
names for the mpirun and compiler wrappers, so be careful which modules you &lt;br /&gt;
have loaded in your &amp;lt;tt&amp;gt;~/.bashrc&amp;lt;/tt&amp;gt;.  For this reason, we recommend generally not loading any modules in your .bashrc.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===OpenMPI===&lt;br /&gt;
&lt;br /&gt;
To use [http://www.open-mpi.org/ OpenMPI] compiled with the intel compilers load the modules &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intel openmpi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
or for the gcc version use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc openmpi/1.4.2-gcc-v4.4.0-ofed &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The MPI library wrappers for compiling are  mpicc/mpicxx/mpif90/mpif77.&lt;br /&gt;
&lt;br /&gt;
OpenMPI has been built to support various communication methods and automatically uses the best method&lt;br /&gt;
depending on how and where it is run.  To explicitly specify the method you can use the following &amp;lt;tt&amp;gt;--mca&amp;lt;/tt&amp;gt;&lt;br /&gt;
flags following for infiniband&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun --mca pml ob1 --mca btl self,sm,openib -np 16  ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the following for IPoIB (not recommended)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun --mca pml ob1 --mca btl self,sm,tcp --mca btl_tcp_if_exclude lo,eth0 -np 16 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your program runs into what appears to be memory issues with larger jobs try using the xrc communications&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun --mca pml ob1 --mca btl_openib_receive_queues X,128,256,192,128:X,2048,256,128,32:X,12288,256,128,32 --mca btl_openib_max_send_size 12288&amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are still having issues you can try openmpi &amp;gt; 1.6 which uses MellanoX Messaging library (MXM) by default over 128 mpi tasks&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load openmpi/intel/1.6.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or can be explicitly asked for by using if using less than 128 mpi tasks&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun--mca mtl mxm --mca mtl_mxm_np 2  -np 16 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To NOT use MXM, regardless the number of mpi tasks use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun --mca pml ob1 -np 16 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For mixed openMP/MPI applications, set OMP_NUM_THREADS to the number of threads per process and add '&amp;lt;tt&amp;gt;--bynode&amp;lt;/tt&amp;gt;' to the mpirun command, e.g.,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=4&lt;br /&gt;
mpirun -np 6 --bynode ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
would start 6 MPI processes on different nodes, each with 4 openMP threads. If your script requests 3 nodes, each node gets 2 MPI processes. &lt;br /&gt;
&lt;br /&gt;
For more information on available flags see the OpenMPI [http://www.open-mpi.org/faq/ FAQ]&lt;br /&gt;
&lt;br /&gt;
===IntelMPI===&lt;br /&gt;
&lt;br /&gt;
[http://software.intel.com/en-us/intel-mpi-library/ IntelMPI] is also a [http://www.mcs.anl.gov/research/projects/mpich2/ MPICH2] derivative&lt;br /&gt;
customized by Intel. To use IntelMPI (4.x) compiled with the intel compilers load the modules  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intel intelmpi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The MPI library wrappers for compiling are  mpicc/mpicxx/mpif90/mpif77.&lt;br /&gt;
&lt;br /&gt;
IntelMPI requires a .mpd.conf file containing the variable &amp;quot;MPD_SECRETWORD=...&amp;quot; in your $HOME directory. To create this file use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;MPD_SECRETWORD=ABC123&amp;quot; &amp;gt; ~/.mpd.conf&lt;br /&gt;
chmod 600  ~/.mpd.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IntelMPI, like OpenMPI, has been built to support various communication methods and automatically uses the best method&lt;br /&gt;
depending on how and where it is run.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun -np 16 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To explicitly specify the method you can use the following flags to use &lt;br /&gt;
the following flags for infiniband (dapl) and shared memory (best performance on IB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun -np 16 -env I_MPI_FABRICS=shm:dapl ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or the following for openfabrics (ibverbs) infiniband&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun -np 16 -genv I_MPI_FABRICS=shm:ofa ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or the following for IPoIB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpirun -np 16 -env I_MPI_TCP_NETMASK=ib -env I_MPI_FABRICS shm:tcp ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you run into communication errors that appear related to memory try some of the following flags&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intelmpi/4.0.3.008&lt;br /&gt;
mpirun -np 16 -genv I_MPI_FABRICS=shm:ofa -genv I_MPI_OFA_USE_XRC=1 -genv I_MPI_OFA_DYNAMIC_QPS=1 -genv I_MPI_OFA_NUM_RDMA_CONNECTIONS=-1 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For hybrid openMP/MPI runs, set &amp;lt;tt&amp;gt;OMP_NUM_THREADS&amp;lt;/tt&amp;gt; to the desired number of OpenMP threads per MPI process and specify the number of MPI processes per node on the mpirun command line with &amp;lt;tt&amp;gt;-ppn &amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt;. E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=4&lt;br /&gt;
mpirun -ppn 2 -np 6 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
would start a total of 6 MPI processes each with 4 threads, with each node running 2 MPI processes. Your script should request 3 nodes in this case.&lt;br /&gt;
''Note: to compile for hybrid openMP/MPI with IntelMPI, you need to add the flag &amp;lt;tt&amp;gt;-mt_mpi&amp;lt;/tt&amp;gt; to your compilation command (i.e. mpicc/mpif90/mpicxx).''&lt;br /&gt;
&lt;br /&gt;
For more information on these an other flags see Intel's [http://software.intel.com/en-us/articles/intel-mpi-library-documentation/ Documentation]&lt;br /&gt;
page especially the &amp;quot;Getting Started (Linux)&amp;quot; Guide.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Data_Management&amp;diff=9386</id>
		<title>Data Management</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Data_Management&amp;diff=9386"/>
		<updated>2018-08-09T17:32:13Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Storage Space'''==&lt;br /&gt;
SciNet's storage system is based on IBM's [http://en.wikipedia.org/wiki/IBM_General_Parallel_File_System GPFS] (General Parallel File System).   There are two main systems for user data: &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt;, a small, backed-up space where user home directories are located, and &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt;, a large system for input or output data for jobs; data on &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt; is not only not backed up (a third storage system, /project, exist only for groups with LRAC/NRAC allocations). Data placed on scratch will be deleted if it has not been accessed in 3 months.  SciNet does not provide long-term storage for large data sets.  &lt;br /&gt;
&lt;br /&gt;
===Overview of the different file systems===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! {{Hl2}} | file system &lt;br /&gt;
! {{Hl2}} | purpose &lt;br /&gt;
! {{Hl2}} | user quota &lt;br /&gt;
! {{Hl2}} | block size &lt;br /&gt;
! {{Hl2}} | backed up&lt;br /&gt;
! {{Hl2}} | purged&lt;br /&gt;
! {{Hl2}} | access &lt;br /&gt;
|- &lt;br /&gt;
| /home&lt;br /&gt;
| development&lt;br /&gt;
| 50 GB&lt;br /&gt;
| 256 KB&lt;br /&gt;
| yes&lt;br /&gt;
| never&lt;br /&gt;
| read-only on compute nodes (r/w on login, devel and datamover1) &lt;br /&gt;
|- &lt;br /&gt;
| /scratch&lt;br /&gt;
| computation&lt;br /&gt;
| first of (20 TB ; 1 million files)&lt;br /&gt;
| 4 MB&lt;br /&gt;
| no&lt;br /&gt;
| files &amp;gt; 3 months&lt;br /&gt;
| read/write on all nodes&lt;br /&gt;
|- &lt;br /&gt;
| /project&lt;br /&gt;
| computation&lt;br /&gt;
| by allocation&lt;br /&gt;
| 256 KB&lt;br /&gt;
| yes&lt;br /&gt;
| never&lt;br /&gt;
| read/write on all nodes &lt;br /&gt;
|}&lt;br /&gt;
project is included in scratch&lt;br /&gt;
&lt;br /&gt;
===Home Disk Space===&lt;br /&gt;
&lt;br /&gt;
Every SciNet user gets a 50GB directory on &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; in a directory &amp;lt;tt&amp;gt;/home/G/GROUP/USER&amp;lt;/tt&amp;gt;, which is regularly backed-up.   Home is visible from &amp;lt;tt&amp;gt;login.scinet&amp;lt;/tt&amp;gt; nodes, and from the development nodes on [[GPC_Quickstart | GPC]] and the [[TCS_Quickstart | TCS]].  However, on the compute nodes of the GPC clusters -- as when jobs are running -- &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; is mounted '''''read-only'''''; thus GPC jobs can read files in /home but cannot write to files there.   &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; is a good place to put code, input files for runs, and anything else that needs to be kept to reproduce runs.  On the other hand, &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; is not a good place to put many small files, since&lt;br /&gt;
the block size for the file system is 256KB, so you would quickly run out of disk quota and you will make the backup system very slow.&lt;br /&gt;
&lt;br /&gt;
If your application absolutely insists on writing material to your home account and you can't find a way to instruct it to write somewhere else, an alternative is to create a link pointing from your account under /home to a location under /scratch.&lt;br /&gt;
&lt;br /&gt;
===Scratch Disk Space===&lt;br /&gt;
&lt;br /&gt;
Every SciNet user also gets a directory in &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt; called &amp;lt;tt&amp;gt;/scratch/G/GROUP/USER&amp;lt;/tt&amp;gt;.   Scratch is visible from the &amp;lt;tt&amp;gt;login.scinet&amp;lt;/tt&amp;gt; nodes,  the development nodes on [[GPC_Quickstart | GPC]] and the [[TCS_Quickstart | TCS]], and on the compute nodes of the clusters, mounted as read-write.   Thus jobs would normally write their output somewhere in &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt;.  There are '''NO''' backups of anything on &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There is a large amount of space available on &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt; but it is purged routinely so that all users running jobs and generating large outputs will have room to store their data temporarily.  Computational results which you want to keep longer than this must be copied (using &amp;lt;tt&amp;gt;scp&amp;lt;/tt&amp;gt;) off of SciNet entirely and to your local system.   SciNet does not routinely provide long-term storage for large data sets. &lt;br /&gt;
&lt;br /&gt;
Also note that the shared parallel file system was not designed to do many small file transactions. For that reason, the number of files that any user can have on scratch is limited to 1 million. This limit should be thought of as a safeguard, not an invitation to create one million files. Please see [[File System and I/O dos and don'ts]]. &lt;br /&gt;
&lt;br /&gt;
===Scratch Disk Purging Policy===&lt;br /&gt;
&lt;br /&gt;
In order to ensure that there is always significant space available for running jobs '''we automatically delete files in /scratch that have not been accessed or modified for more than 3 months by the actual deletion day on the 15th of each month'''. Note that we recently changed the cut out reference to the ''MostRecentOf(atime,mtime)''. This policy is subject to revision depending on its effectiveness. More details about the purging process and how users can check if their files will be deleted follows. If you have files scheduled for deletion you should move them to a more permanent locations such as your departmental server or your /project space (for PIs who have either been allocated disk space by the LRAC or have bought diskspace).&lt;br /&gt;
&lt;br /&gt;
On the '''first''' of each month, a list of files scheduled for purging is produced, and an email notification is sent to each user on that list. Furthermore, at/or about the '''12th''' of each month a 2nd scan produces a more current assessment and another email notification is sent. This way users can double check that they have indeed taken care of all the files they needed to relocate before the purging deadline. Those files will be automatically deleted on the '''15th''' of the same month unless they have been accessed or relocated in the interim. If you have files scheduled for deletion then they will be listed in a file in /scratch/t/todelete/current, which has your userid and groupid in the filename. For example, if user xxyz wants to check if they have files scheduled for deletion they can issue the following command on a system which mounts /scratch (e.g. a scinet login node): '''ls -1 /scratch/t/todelete/current |grep xxyz'''. In the example below, the name of this file indicates that user xxyz is part of group abc, has 9,560 files scheduled for deletion and they take up 1.0TB of space:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [xxyz@scinet04 ~]$ ls -1 /scratch/t/todelete/current |grep xxyz&lt;br /&gt;
 -rw-r----- 1 xxyz     root       1733059 Jan 12 11:46 10001___xxyz_______abc_________1.00T_____9560files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file itself contains a list of all files scheduled for deletion (in the last column) and can be viewed with standard commands like more/less/cat - e.g. '''more /scratch/t/todelete/current/10001___xxyz_______abc_________1.00T_____9560files'''&lt;br /&gt;
&lt;br /&gt;
Similarly, you can also verify all other users on your group by using the ls command with grep on your group. For example: '''ls -1 /scratch/t/todelete/current |grep abc'''. That will list all other users in the same group that xxyz is part of, and have files to be purged on the 15th. Members of the same group have access to each other's contents.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Preparing these assessments takes several hours. If you change the access/modification time of a file in the interim, that will not be detected until the next cycle. A way for you to get immediate feedback is to use the ''''ls -lu'''' command on the file to verify the atime and ''''ls -la'''' for the mtime. If the file atime/mtime has been updated in the meantime, coming the purging date on the 15th it will no longer be deleted.&lt;br /&gt;
&lt;br /&gt;
===Project Disk Space===&lt;br /&gt;
&lt;br /&gt;
Investigators who have been granted allocations through the [http://wiki.scinethpc.ca/wiki/index.php/Application_Process LRAC/NRAC Application Process] may have been allocated disk space in addition to compute time.   For the period of time that the allocation is granted, they will have disk space on the &amp;lt;tt&amp;gt;/project&amp;lt;/tt&amp;gt; disk system.  Space on project is a subset of scratch, but is not purged and is backed up. All members of the investigators groups will have access to this disk system, which will be mounted read/write everywhere.&lt;br /&gt;
&lt;br /&gt;
===How much Disk Space Do I have left?===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;'''/scinet/gpc/bin6/diskUsage'''&amp;lt;/tt&amp;gt; command, available on the login nodes, datamovers and the GPC devel nodes, provides information in a number of ways on the home, scratch, and project file systems. For instance, how much disk space is being used by yourself and your group (with the -a option), or how much your usage has changed over a certain period (&amp;quot;delta information&amp;quot;) or you may generate plots of your usage over time. Please see the usage help below for more details.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: diskUsage [-h|-?| [-a] [-u &amp;lt;user&amp;gt;] [-de|-plot]&lt;br /&gt;
       -h|-?: help&lt;br /&gt;
       -a: list usages of all members on the group&lt;br /&gt;
       -u &amp;lt;user&amp;gt;: as another user on your group&lt;br /&gt;
       -de: include delta information&lt;br /&gt;
       -plot: create plots of disk usages&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Did you know that you can check which of your directories have more than 1000 files with the &amp;lt;tt&amp;gt;'''/scinet/gpc/bin6/topUserDirOver1000list'''&amp;lt;/tt&amp;gt; command and which have more than 1GB of material with the &amp;lt;tt&amp;gt;'''/scinet/gpc/bin6/topUserDirOver1GBlist'''&amp;lt;/tt&amp;gt; command?&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* information on usage and quota is only updated hourly!&lt;br /&gt;
* contents of project count against space and #files limits on scratch&lt;br /&gt;
&lt;br /&gt;
===Performance===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/IBM_General_Parallel_File_System GPFS] is a high-performance filesystem which provides rapid reads and writes to large datasets in parallel from many nodes.  As a consequence of this design, however, '''the file system performs quite ''poorly'' at accessing data sets which consist of many, small files.'''  For instance, you will find that reading data in from one 16MB file is enormously faster than from 400 40KB files. Such small files are also quite wasteful of space, as the blocksize for the scratch filesystem is 16MB. This is something you should keep in mind when planning your input/output strategy for runs on SciNet.&lt;br /&gt;
&lt;br /&gt;
For instance, if you run multi-process jobs, having each process write to a file of its own is not an scalable I/O solution. A directory gets locked by the first process accessing it, so all other processes have to wait for it. Not only has the code just become considerably less parallel, chances are the file system will have a time-out while waiting for your other processes, leading your program to crash mysteriously.&lt;br /&gt;
Consider using MPI-IO (part of the MPI-2 standard), which allows files to be opened simultaneously by different processes, or using a dedicated process for I/O to which all other processes send their data, and which subsequently writes this data to a single file.&lt;br /&gt;
&lt;br /&gt;
===Local Disk===&lt;br /&gt;
&lt;br /&gt;
The compute nodes on the GPC '''do not contain hard drives''' so there is no local disk available to use during your computation.  You can however use part of a compute nodes RAM like a local disk ('ramdisk') but this will reduce how much memory is available for your&lt;br /&gt;
program.  This can be accessed using &amp;lt;tt&amp;gt;/dev/shm/&amp;lt;/tt&amp;gt; and is currently set to 8GB.  Anything written&lt;br /&gt;
to this location that you want to keep must be copied back to the &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt; filesystem as &amp;lt;tt&amp;gt;/dev/shm&amp;lt;/tt&amp;gt; is wiped after each job and since it is in memory will not survive through a reboot of the node. More on ramdisk usage can be found [[User_Ramdisk | here]].&lt;br /&gt;
&lt;br /&gt;
Note that the absense of hard drives also means that the nodes cannot swap memory, so be sure that your computation fits within memory.&lt;br /&gt;
&lt;br /&gt;
===Buying storage space on GPFS or HPSS===&lt;br /&gt;
&lt;br /&gt;
Groups can buy space on GPFS or HPSS rather than rely on the [http://wiki.scinethpc.ca/wiki/index.php/Application_Process annual allocation process].  A good budgetary number would be:&lt;br /&gt;
&lt;br /&gt;
GPFS $400/TB&lt;br /&gt;
&lt;br /&gt;
HPSS $150/TB&lt;br /&gt;
 &lt;br /&gt;
This is a one-time cost. We have no formal, written data retention policy at this point but the intent is to keep any HPSS data (including migrating to new tape technologies) as long as SciNet is in operation. These numbers are for budgetary purposes only and subject to change (e.g. as markets and technologies evolve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Data Transfer'''==&lt;br /&gt;
{{:Data_Transfer}}&lt;br /&gt;
&lt;br /&gt;
=='''File/Ownership Management (ACL)'''==&lt;br /&gt;
* By default, at SciNet, users within the same group have read permission to each other's files (not write)&lt;br /&gt;
* You may use access control list ('''ACL''') to allow your supervisor (or another user within your group) to manage files for you (i.e., create, move, rename, delete), while still retaining your access and permission as the original owner of the files/directories.&lt;br /&gt;
* '''NOTE''': We highly recommend that you never give write permission to other users on the top level of your home directory (/home/G/GROUP/[owner]), since that would seriously compromise your privacy, in addition to disable ssh key authentication, among other things. If necessary, make specific sub-directories under your home directory so that other users can manipulate/access files from those.&lt;br /&gt;
* If you need to set up permissions across groups [mailto:support@scinet.utoronto.ca contact us] (and the other group's supervisor!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Using  setfacl/getfacl===&lt;br /&gt;
* To allow [supervisor] to manage files in /project/g/group/[owner] using '''setfacl''' and '''getfacl''' commands, follow the 3-steps below as the [owner] account from a shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1) $ /scinet/gpc/bin/setfacl -d -m user:[supervisor]:rwx /project/g/group/[owner]&lt;br /&gt;
   (every *new* file/directory inside [owner] will inherit [supervisor] ownership by default from now on)&lt;br /&gt;
&lt;br /&gt;
2) $ /scinet/gpc/bin/setfacl -d -m user:[owner]:rwx /project/g/group/[owner]&lt;br /&gt;
   (but will also inherit [owner] ownership, ie, ownership of both by default, for files/directories created by [supervisor])&lt;br /&gt;
&lt;br /&gt;
3) $ /scinet/gpc/bin/setfacl -Rm user:[supervisor]:rwx /project/g/group/[owner]&lt;br /&gt;
   (recursively modify all *existing* files/directories inside [owner] to also be rwx by [supervisor])&lt;br /&gt;
&lt;br /&gt;
   $ /scinet/gpc/bin/getfacl /project/g/group/[owner]&lt;br /&gt;
   (to determine the current ACL attributes)&lt;br /&gt;
&lt;br /&gt;
   $ /scinet/gpc/bin/setfacl -b /project/g/group/[owner]&lt;br /&gt;
   (to remove any previously set ACL)&lt;br /&gt;
&lt;br /&gt;
PS: on the datamovers getfacl, setfacl and chacl will be on your path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information on using [http://linux.die.net/man/1/setfacl &amp;lt;tt&amp;gt;setfacl&amp;lt;/tt&amp;gt;] or [http://linux.die.net/man/1/getfacl &amp;lt;tt&amp;gt;getfacl&amp;lt;/tt&amp;gt;] see their man pages.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using mmputacl/mmgetacl===&lt;br /&gt;
* You may use gpfs' native '''mmputacl''' and '''mmgetacl''' commands. The advantages are that you can set &amp;quot;control&amp;quot; permission and that [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.gpfs.doc%2Fgpfs31%2Fbl1adm1160.html POSIX or NFS v4 style ACL] are supported. You will need first to create a /tmp/supervisor.acl file with the following contents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user::rwxc&lt;br /&gt;
group::----&lt;br /&gt;
other::----&lt;br /&gt;
mask::rwxc&lt;br /&gt;
user:[owner]:rwxc&lt;br /&gt;
user:[supervisor]:rwxc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then issue the following 2 commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1) $ mmputacl -i /tmp/supervisor.acl /project/g/group/[owner]&lt;br /&gt;
2) $ mmputacl -d -i /tmp/supervisor.acl /project/g/group/[owner]&lt;br /&gt;
   (every *new* file/directory inside [owner] will inherit [supervisor] ownership by default as well as &lt;br /&gt;
   [owner] ownership, ie, ownership of both by default, for files/directories created by [supervisor])&lt;br /&gt;
&lt;br /&gt;
   $ mmgetacl /project/g/group/[owner]&lt;br /&gt;
   (to determine the current ACL attributes)&lt;br /&gt;
&lt;br /&gt;
   $ mmdelacl -d /project/g/group/[owner]&lt;br /&gt;
   (to remove any previously set ACL)&lt;br /&gt;
&lt;br /&gt;
   $ mmeditacl /project/g/group/[owner]&lt;br /&gt;
   (to create or change a GPFS access control list)&lt;br /&gt;
   (for this command to work set the EDITOR environment variable: export EDITOR=/usr/bin/vi)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTES:&lt;br /&gt;
* There is no option to recursively add or remove ACL attributes using a gpfs built-in command to existing files. You'll need to use the -i option as above for each file or directory individually. [[Data_Management#bash_script_that_you_may_adapt_to_recursively_add_or_remove_ACL_attributes_using_gpfs_built-in_commands | Here is a sample bash script you may use for that purpose]]&lt;br /&gt;
&lt;br /&gt;
* mmputacl/setfacl will not overwrite the original linux group permissions for a directory when copied to another directory already with ACLs, hence the &amp;quot;#effective:r-x&amp;quot; note you may see from time to time with mmgetacf/getfacl. If you want to give rwx permissions to everyone in your group you should simply rely on the plain unix 'chmod g+rwx' command. You may do that before or after copying the original material to another folder with the ACLs.&lt;br /&gt;
&lt;br /&gt;
For more information on using [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.gpfs.doc%2Fgpfs31%2Fbl1adm11120.html &amp;lt;tt&amp;gt;mmputacl&amp;lt;/tt&amp;gt;] or [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.gpfs.doc%2Fgpfs31%2Fbl1adm11120.html &amp;lt;tt&amp;gt;mmgetaclacl&amp;lt;/tt&amp;gt;] see their man pages.&lt;br /&gt;
&lt;br /&gt;
===Appendix (ACL)===&lt;br /&gt;
====bash script that you may adapt to recursively add or remove ACL attributes using gpfs built-in commands====&lt;br /&gt;
Courtesy of Agata Disks (http://csngwinfo.in2p3.fr/mediawiki/index.php/GPFS_ACL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# USAGE&lt;br /&gt;
#     - on one directory:     ./set_acl.sh dir_name&lt;br /&gt;
#     - on more directories:  ./set_acl.sh 'dir_nam*'&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Path of the file that contains the ACL&lt;br /&gt;
ACL_FILE_PATH=/agatadisks/data/acl_file.acl&lt;br /&gt;
&lt;br /&gt;
# Directories onto the ACLs have to be set&lt;br /&gt;
dirs=$1&lt;br /&gt;
&lt;br /&gt;
# Recursive function that sets ACL to files and directories&lt;br /&gt;
set_acl () {&lt;br /&gt;
  curr_dir=$1&lt;br /&gt;
  for args in $curr_dir/*&lt;br /&gt;
  do&lt;br /&gt;
    if [ -f $args ]; then&lt;br /&gt;
      echo &amp;quot;ACL set on file $args&amp;quot;&lt;br /&gt;
      mmputacl -i $ACL_FILE_PATH $args&lt;br /&gt;
      if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;ERROR: ACL not set on $args&amp;quot;&lt;br /&gt;
        exit -1&lt;br /&gt;
      fi&lt;br /&gt;
    fi&lt;br /&gt;
    if [ -d $args ]; then&lt;br /&gt;
      # Set Default ACL in directory&lt;br /&gt;
      mmputacl -i $ACL_FILE_PATH $args -d&lt;br /&gt;
      if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;ERROR: Default ACL not set on $args&amp;quot;&lt;br /&gt;
        exit -1&lt;br /&gt;
      fi&lt;br /&gt;
      echo &amp;quot;Default ACL set on directory $args&amp;quot;&lt;br /&gt;
      # Set ACL in directory&lt;br /&gt;
      mmputacl -i $ACL_FILE_PATH $args&lt;br /&gt;
      if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;ERROR: ACL not set on $args&amp;quot;&lt;br /&gt;
        exit -1&lt;br /&gt;
      fi&lt;br /&gt;
      echo &amp;quot;ACL set on directory $args&amp;quot;&lt;br /&gt;
      set_acl $args&lt;br /&gt;
    fi&lt;br /&gt;
  done&lt;br /&gt;
}&lt;br /&gt;
for dir in $dirs&lt;br /&gt;
do&lt;br /&gt;
  if [ ! -d $dir ]; then&lt;br /&gt;
    echo &amp;quot;ERROR: $dir is not a directory&amp;quot;&lt;br /&gt;
    exit -1&lt;br /&gt;
  fi&lt;br /&gt;
  set_acl $dir&lt;br /&gt;
done&lt;br /&gt;
exit 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[HPSS|'''High Performance Storage System (HPSS)''']]==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==More questions on data management?==&lt;br /&gt;
&lt;br /&gt;
Check out the [[FAQ#Data_on_SciNet_disks|FAQ]].&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Scheduler&amp;diff=9385</id>
		<title>Scheduler</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Scheduler&amp;diff=9385"/>
		<updated>2018-08-09T17:32:02Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The queueing system used at SciNet is based around Cluster Resources [http://www.adaptivecomputing.com/products/hpc-products/moab-hpc-basic-edition/ Moab Workload Manager].&lt;br /&gt;
Moab is used on both the GPC and TCS however [http://www.adaptivecomputing.com/products/open-source/torque/ Torque] is used as the backend resource manager on the GPC and IBM's [http://www.ibm.com/software/products/en/tivoliworkloadschedulerloadleveler/ LoadLeveler] is used on the TCS.&lt;br /&gt;
&lt;br /&gt;
This page outlines some of the most common Moab commands with full documentation available from Moab [http://docs.adaptivecomputing.com/mwm/7-2-9/help.htm#a.gcommandoverview.html%3FTocPath%3D4.0%2520Scheduler%2520Commands|_____0 here], the torque (pbs) commands full documentation is [http://docs.adaptivecomputing.com/torque/4-2-9/help.htm here].&lt;br /&gt;
&lt;br /&gt;
Some common questions about the queuing system can be found on the [[FAQ]] as well.&lt;br /&gt;
&lt;br /&gt;
=== Queues ===&lt;br /&gt;
&lt;br /&gt;
==== GPC ====&lt;br /&gt;
&lt;br /&gt;
===== batch =====&lt;br /&gt;
&lt;br /&gt;
The batch queue is the default queue on the GPC allowing the user access to all the &lt;br /&gt;
resources for jobs between 15 minutes and upto 48 hours.  If a specific queue is not specified, &amp;lt;tt&amp;gt;-q&amp;lt;/tt&amp;gt; flag,&lt;br /&gt;
then a job is submitted to the batch queue.  Most jobs will run in batch, and user's can use&lt;br /&gt;
feature flags to determine the type of nodes they require.&lt;br /&gt;
&lt;br /&gt;
For example, to request two nodes anywhere on the GPC (QDR or DDR), use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PBS -l nodes=2:ppn=8,walltime=1:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For two nodes using DDR, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PBS -l nodes=2:ddr:ppn=8,walltime=1:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get two nodes using QDR, instead, you would use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PBS -l nodes=2:qdr:ppn=8,walltime=1:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== debug =====&lt;br /&gt;
&lt;br /&gt;
A debug queue has been set up primarily for code developers to quickly test&lt;br /&gt;
and evaluate their codes and configurations without having to wait in the batch queue.  There are 10 nodes&lt;br /&gt;
currently reserved for the debug queue.  It has quite restrictive limits to promote high turnover&lt;br /&gt;
and availability thus a user can only use 2 nodes (16 cores) for 2 hours, to a maximum&lt;br /&gt;
of 8 nodes (64 cores) for 1/2 an hour and can only have one job in the debug queue at a time.  There&lt;br /&gt;
is no minimum time limit on this queue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qsub -l nodes=1:ppn=8,walltime=1:00:00 -q debug -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== largemem =====&lt;br /&gt;
&lt;br /&gt;
The largemem queue is used for accessing one of two 16 core with 128 GB memory intel Xeon (non-nehalem) nodes. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qsub -l nodes=1:ppn=16,walltime=1:00:00 -q largemem -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCS ====&lt;br /&gt;
&lt;br /&gt;
The TCS currently only has one queue, or class, in use called &amp;quot;verylong&amp;quot; and its only&lt;br /&gt;
limitation is that jobs must be under 48 hours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#@ class           = verylong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Job Info===&lt;br /&gt;
&lt;br /&gt;
To see all jobs queued on a system use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Three sections are shown; running, idle, and blocked.  Idle jobs are commonly referred to as queued jobs &lt;br /&gt;
as they meet all the requirements, however they are waiting for available resources.  Blocked jobs &lt;br /&gt;
are either caused by improper resource requests or more commonly by exceeding a user or groups allowable&lt;br /&gt;
resources.   For example if you are allowed to submit 10 jobs and you submit 20, the first 10&lt;br /&gt;
jobs will be submitted properly and either run right away or be queued, however the other 10 jobs&lt;br /&gt;
will be blocked and the jobs won't be submitted to the queue until one of the first 10 finishes.&lt;br /&gt;
&lt;br /&gt;
=== Available Resources ===&lt;br /&gt;
&lt;br /&gt;
Determining when your job will run can be tricky as it involves a combination of queue type, node type, system reservations, and job priority. The following commands are provided to help you figure out what resources are currently available, however they may not tell you exactly when your job will run for the aforementioned reasons.&lt;br /&gt;
&lt;br /&gt;
==== GPC ====&lt;br /&gt;
To show how many qdr nodes are currently free, use the show back fill command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showbf -f qdr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To show how many ddr nodes are free, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showbf -f ddr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCS ====&lt;br /&gt;
To show how many TCS nodes are free, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showbf -c verylong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example checking for a qdr job&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showbf -f qdr&lt;br /&gt;
Partition     Tasks  Nodes      Duration   StartOffset       StartDate&lt;br /&gt;
---------     -----  -----  ------------  ------------  --------------&lt;br /&gt;
ALL           14728   1839       7:36:23      00:00:00  00:23:37_09/24&lt;br /&gt;
ALL             256     30      INFINITY      00:00:00  00:23:37_09/24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shows that for jobs under 7:36:23 you can use 1839 nodes, but if you submit&lt;br /&gt;
a job over that time only 30 will be available.  In this case this is&lt;br /&gt;
due to a large reservation made my SciNet staff, but from a users point&lt;br /&gt;
of view, showbf tells you very simply what is available and at what time point.&lt;br /&gt;
In this case, a user may wish to set #PBS -l walltime=7:30:00 in their script, or add -l walltime=7:30:00 to their qsub command in order to ensure that the jobs backfill the reserved nodes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' showbf shows currently available nodes, however just because nodes are available&lt;br /&gt;
doesn't mean that your job will start right away.  Job priority, system reservations &lt;br /&gt;
along with dedicated nodes, such as those for the debug queue, will alter when jobs &lt;br /&gt;
run so even if enough nodes appear &amp;quot;free&amp;quot;, it doesn't mean your job will actually run right &lt;br /&gt;
away.&lt;br /&gt;
&lt;br /&gt;
=== Job Submission ===&lt;br /&gt;
&lt;br /&gt;
==== Interactive ====&lt;br /&gt;
&lt;br /&gt;
On the GPC an interactive queue session can be requested using the following &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qsub -l nodes=2:ppn=8,walltime=1:00:00 -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you may experience longer than usual delays when requesting an interactive session, try specifying the &amp;quot;debug&amp;quot; queue:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qsub -l nodes=2:ppn=8,walltime=1:00:00 -I -q debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Non-interactive (Batch) ====&lt;br /&gt;
&lt;br /&gt;
For a non-interactive job submission you require a submission script formatted for the appropriate resource manger. Examples&lt;br /&gt;
are provided for the [[GPC_Quickstart#Submitting_A_Batch_Job | GPC]] and [[TCS_Quickstart#Submitting_A_Job | TCS]].&lt;br /&gt;
&lt;br /&gt;
=== Job Status ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qstat jobid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To see the status of all your jobs, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
showq -u username&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qstat -u username&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your job appears to be blocked, you can try the following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ checkjob jobid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which gives more verbose and often a bit confusing output.&lt;br /&gt;
&lt;br /&gt;
=== Cancel a Job ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ canceljob jobid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To cancel all of your jobs, try this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ canceljob `showq | grep yourusername | cut -c -8` &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or using the torque commands (these tend to work faster for larger number of jobs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qdel `qstat | grep yourusername | cut -c -8` &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accounting ===&lt;br /&gt;
&lt;br /&gt;
For any user with an NRAC/LRAC allocation, a special account with the Resource Allocation Project (RAP) identifier (RAPI) from Compute Canada Database (CCDB) is set up in order to access the allocated resources.  Please use the following instructions to run your job using your special allocation.  This is necessary both for accounting purposes as well as to assign the appropriate priority to your jobs.&lt;br /&gt;
&lt;br /&gt;
Each job run on the system will have a default RAP associated with it.  Most users already have their default RAP properly set.  However, if you have more than one allocation (different RAPs),  you may need/want to change your default RAP in order to charge your jobs to a particular RAP.&lt;br /&gt;
&lt;br /&gt;
==== Changing your default RAP ====&lt;br /&gt;
&lt;br /&gt;
# Go to the [https://portal.scinet.utoronto.ca portal], login with your SciNet username and password.&lt;br /&gt;
# Click on &amp;quot;Change SciNet default RAP&amp;quot; and change your default RAP.&lt;br /&gt;
&lt;br /&gt;
==== Specifying the RAP for GPC ====&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may want to assign a RAP for each particular job you run.  There are two ways to specify an account for Moab/Torque: From the command line or inside the batch submission script.&lt;br /&gt;
&lt;br /&gt;
===== Command line =====&lt;br /&gt;
&lt;br /&gt;
Use the '-A RAPI' flag when you submit your job using qsub.  Note that the command line option will override the submission script if an account is specified on both the submission script and the command line.  &amp;quot;RAPI&amp;quot; is the RAP Identifier, e.g. abc-123-de.&lt;br /&gt;
&lt;br /&gt;
===== Submission Script =====&lt;br /&gt;
&lt;br /&gt;
Add a line in your submit script as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PBS -A RAPI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please replace &amp;quot;RAPI&amp;quot; with your RAP Identifier.&lt;br /&gt;
&lt;br /&gt;
==== Specifiying the RAP for TCS ====&lt;br /&gt;
&lt;br /&gt;
Add a line in your submit script as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @ account_no = RAPI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please replace &amp;quot;RAPI&amp;quot; with your RAP Identifier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Stats ===&lt;br /&gt;
&lt;br /&gt;
Show current usage stats for a $USER&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showstats -u $USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reservations ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ showres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard users can only see their reservations not other users or system ones.&lt;br /&gt;
To determine what is available a user can use &amp;quot;showbf&amp;quot;, it shows what resources are&lt;br /&gt;
available and at what time level, taking into account running jobs and all the reservations. Refer to the [[Moab#Available_Resources | Available Resources]] section of this page for more details.&lt;br /&gt;
&lt;br /&gt;
=== Job Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Sometimes you may want one job not to start until another job finishes, however&lt;br /&gt;
you would like to submit them both at the same time.  This can be done&lt;br /&gt;
using job dependencies on both the GPC and TCS, however the commands &lt;br /&gt;
are different due to the underlying resource managers being different.&lt;br /&gt;
&lt;br /&gt;
==== GPC ====&lt;br /&gt;
&lt;br /&gt;
Use the -W flag with the following syntax in your submission script to have this job not start&lt;br /&gt;
until the job with jobid has successfully finished&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-W depend=afterok:jobid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This functionality also allows to add dependencies on several jobs, eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-W depend=afterok:jobid1:jobid2:...:jobidN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in this case, the job will not start until all the jobs jobid1, jobid2, ..., jobidN have successfully finished.  Note that the length of the string &amp;quot;afterok:jobid1:jobid2...:jobidN&amp;quot; cannot exceed 1024 characters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More detailed syntax, dependency options and examples can be found &lt;br /&gt;
[[http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm#-W here]].&lt;br /&gt;
&lt;br /&gt;
==== TCS ====&lt;br /&gt;
&lt;br /&gt;
Loadleveler does job dependencies using what they call steps.&lt;br /&gt;
See the [[TCS_Quickstart#Steps | TCS Quickstart]] guide for an example.&lt;br /&gt;
&lt;br /&gt;
=== Adjusting Job Priority ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The ability to adjust job priorities downwards can also be of use to adjust relative priorities of jobs between users who are running jobs of the same allocation (eg, a default or NRAC allocation of the same PI).   Priorities are determined by how much of the time of that allocation been currently used, and all users using that account will have identical priorities.   This mechanism allows users to voluntarily reduce their priority to allow other users of the same allocation to run ahead of them.&lt;br /&gt;
&lt;br /&gt;
In principle, by adjusting a jobs priority downwards, you could reduce your jobs priority to the point that someone elses job entirely could go ahead of yours.  In practice, however, this is extremely unlikely.   Users with NRAC allocations have priorities that are extremely large positive numbers that depend on their allocation and how much of it they have already used during the past fairshare window (2 weeks); it is very unlikely that two groups would have priorities that are within 10 or 100 or 1000 of each other.&lt;br /&gt;
&lt;br /&gt;
Note that at the moment, we do not allow priorities to go negative; they are integers that can go no lower than 1.  (This may change in the future)  That means that users of accounts that have already used their full allocation during the current fairshare period (eg, over the past two weeks), and so whose priority would normally be negative but is capped at 1, can not lower their priority any further.   Similar, users with a `default' allocation have priority 1, and cannot lower their priorities any further.&lt;br /&gt;
&lt;br /&gt;
==== GPC ====&lt;br /&gt;
&lt;br /&gt;
Moab allows users to adjust their jobs' priority moderately downwards, with the &amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt; flag; that is, on a qsub line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qsub ... -p -10  JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or in a script&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
#PBS -p -10&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The number used (-10 in the examples above) can be any negative number down to -1024.   &lt;br /&gt;
&lt;br /&gt;
The ability to adjust job priorities downwards can be useful when you are running a number of jobs and want some to enter the queue at higher priorities than others.   Note that if you absolutely require some jobs to start before others, you could use [[#Job Dependencies | job dependencies]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a job that is currently queued, one can adjust its priority with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qalter -p -10 JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
This is OLD, pre-fairshare info&lt;br /&gt;
&lt;br /&gt;
==== TCS ====&lt;br /&gt;
&lt;br /&gt;
TCS users can adjust their priorities by putting the following line in their scripts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#@ user_priority = XXX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the number can be between 0 (which is 50 below the default priority) to 1 (the default priority).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Suspending a Running Job ===&lt;br /&gt;
&lt;br /&gt;
Separate from, and in addition to, the ability to place a hold on a queued job, you may want to suspend a running job. For example, you may want to test the timing of events in a weakly coupled parallel environment.&lt;br /&gt;
&lt;br /&gt;
==== GPC ====&lt;br /&gt;
&lt;br /&gt;
To suspend a job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsig -s STOP &amp;lt;jobid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to start it again:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsig -s CONT &amp;lt;jobid&amp;gt;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scripts are suspendable by default, so you don't need to add any signal handling for this to work.&lt;br /&gt;
As far as we can tell, the result is identical to using fg and ctrl-Z (or kill -STOP &amp;lt;PID&amp;gt;) in an interactive run.&lt;br /&gt;
&lt;br /&gt;
More about using (and trapping) signals can be found on the [[Using Signals]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== QDR Network Switch Affinity ===&lt;br /&gt;
&lt;br /&gt;
The QDR network is globally 5:1 oversubscribed, but on switch it has full 1:1 cross-section whereas the DDR is completely 1:1 non-blocking. &lt;br /&gt;
When a job is submitted to the GPC QDR nodes, the queuing system tries to fulfill the requirements with nodes on the same switch to improve network &lt;br /&gt;
performance. If not enough nodes are available on the same switch to satisfy the job request, the queue will then use any available nodes. This behavior can be changed &lt;br /&gt;
by using the submission flag &amp;quot; -l nodesetisoptional=false &amp;quot; which forces the queuing system to only&lt;br /&gt;
run this job on the same switch, thus the job will stay queued until enough nodes on one switch are available&lt;br /&gt;
to satisfy this request.  Note that the maximum number of nodes on one switch is 30, so &lt;br /&gt;
a request of greater than 30 nodes with this flag will never run. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub -l nodes=4:ppn=8,walltime=10:00,nodesetisoptional=false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple Job Submissions ===&lt;br /&gt;
&lt;br /&gt;
If you are doing doing batch processing of a number of similar jobs on the GPC, torque has a feature called job arrays that can be used to simplify this process. &lt;br /&gt;
By using the &amp;quot;-t 0-N&amp;quot; option on the command line during job submission or putting it in the job script file, #PBS -t 0-N, torque will expand your &lt;br /&gt;
single job submission into N+1 jobs and sets the environment variable PBS_ARRAYID equal to that jobs specific number, ie 0-N, for each job.  This &lt;br /&gt;
reduces the amount of calls to qsub, and can allow the user to have many less submission scripts. Job arrays also have the benefit of batching &lt;br /&gt;
groups of jobs allowing commands like qalter, qdel, qhold to work on all or a subset of the job array jobs with one command, instead of having &lt;br /&gt;
to run the command for each job.&lt;br /&gt;
&lt;br /&gt;
In the following example, 10 jobs are submitted using a single command &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub -t 0-9 jobscript.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the submission script then modifies the job based on the PBS_ARRAYID.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=10:00:00&lt;br /&gt;
#PBS -N array_jobs&lt;br /&gt;
&lt;br /&gt;
cd ${PBS_O_WORKDIR}&lt;br /&gt;
mkdir job.${PBS_ARRAYID}&lt;br /&gt;
cd job.${PBS_ARRAYID}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Running job ${PBS_ARRAYID}&amp;quot;&lt;br /&gt;
mpirun -np 8 ./mycode &amp;gt;&amp;amp; array_job.${PBS_ARRAYID}.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOBID and the job name both get the additional ARRAYID added onto them in the form of a hyphen, ie JOBID-ARRAYID.  If for example you wanted&lt;br /&gt;
to cancel all the jobs in a job array you would use &amp;quot;qdel JOBID&amp;quot;, whereas if you wanted to cancel just one of the jobs you would use  &lt;br /&gt;
&amp;quot;qdel JOBID-ARRAYID&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
See [http://docs.adaptivecomputing.com/torque/4-1-3/Content/topics/2-jobs/multiJobSubmission.htm here] and [http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm here]&lt;br /&gt;
for full details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Job Tools and Scripts ===&lt;br /&gt;
&lt;br /&gt;
The following list of commands and scripts are useful at the moment of monitoring and managing submissions and jobs.&lt;br /&gt;
We have discussed them in a recent [https://support.scinet.utoronto.ca/education/go.php/183/file_storage/index.php/download/1/files%5B%5D/3702/ TechTalk].&lt;br /&gt;
More details can be found [https://wiki.scinet.utoronto.ca/wiki/index.php/SciNet_Command_Line_Utilities here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- showq --&amp;gt;&lt;br /&gt;
&amp;lt;!-- showbf --&amp;gt;&lt;br /&gt;
&amp;lt;!-- checkjob --&amp;gt;&lt;br /&gt;
&amp;lt;!-- showstats --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
showstart jobID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition, the following scripts are available:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diskUsage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
informs about the user and group file system usage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
offers a shorter version for the user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsum&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
similar to showq, summarizes by user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobperf jobID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
informs about the performance per-node of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobError &amp;lt;jobID | jobNAME&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
displays on realtime the error output of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobOutput &amp;lt;jobID | jobNAME&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
displays on realtime the standard output of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobcd &amp;lt;jobID | jobNAME&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
allows users to quickly move into the working directory of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobscript &amp;lt;jobID | jobNAME&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
displays the submission script used when submitting a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobssh &amp;lt;jobID | jobNAME&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
allows users to connect to the head-node of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobtop &amp;lt;jobID | jobNAME&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
allows users to &amp;quot;top&amp;quot; on the head-node of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobtree [user]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
displays the jobs tree of dependencies for a given user&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobdep &amp;lt;jobID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
displays the dependencies of a given job.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jobperf &amp;lt;jobID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
displays current performance statistics of a given job (must be running).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Monitoring Jobs===&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/images/a/a0/TechTalkJobMonitoring.pdf Tech Talk on Monitoring Jobs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Checking the memory usage from jobs===&lt;br /&gt;
&lt;br /&gt;
In many occasions it can be really useful to take a look at how much memory your job is using while it is running.&lt;br /&gt;
There a couple of ways to do so:&lt;br /&gt;
&lt;br /&gt;
1) using some of the [https://wiki.scinet.utoronto.ca/wiki/index.php/SciNet_Command_Line_Utilities command line utilities] we have developed, e.g: by using the '''jobperf''' or '''jobtop''' utilities, it will allow you to check the job performance and head's node utilization respectively.&lt;br /&gt;
&lt;br /&gt;
2) ''ssh'' into the nodes where your job is being run and check for memory usage and system stats right there. For instance, trying the 'top' or 'free' commands, in those nodes.&lt;br /&gt;
&lt;br /&gt;
Also, it always a good a idea and strongly encouraged to inspect the standard output-log and error-log generated for your job submissions.&lt;br /&gt;
These files are named respectively: ''JobName.{o|e}jobIdNumber''; where ''JobName'' is the name you gave to the job (via the '-N' PBS flag) and ''JobIdNumber'' is the id number of the job.&lt;br /&gt;
These files are saved in the working directory after the job is finished, but they can be also accessed on real-time using the '''jobError''' and '''jobOutput''' [https://wiki.scinet.utoronto.ca/wiki/index.php/SciNet_Command_Line_Utilities command line utilities].&lt;br /&gt;
&lt;br /&gt;
Other related topics to memory usage: &amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/GPC_Quickstart#Ram_Disk Using Ram Disk]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/GPC_Quickstart#Memory_Configuration Different Memory Configuration nodes]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/FAQ#Monitoring_jobs_in_the_queue Monitoring Jobs in the Queue]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Software_and_Libraries&amp;diff=9384</id>
		<title>Software and Libraries</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Software_and_Libraries&amp;diff=9384"/>
		<updated>2018-08-09T17:31:23Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Software Module System =&lt;br /&gt;
&lt;br /&gt;
All the software listed on this page is accessed using a modules system.  This means that much of the software is not &lt;br /&gt;
accessible by default but has to be loaded using the module command. The&lt;br /&gt;
reason is that&lt;br /&gt;
* it allows us to easily keep multiple versions of software for different users on the system;&lt;br /&gt;
* it allows users to easily switch between versions.&lt;br /&gt;
The module system works similarly on the GPC and the TCS, although different modules are installed on these two systems.&lt;br /&gt;
&lt;br /&gt;
Note that, generally, if you compile a program with a module loaded, you will have to run it with that same module loaded, to make dynamically linked libraries accessible.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!{{Hl2}}|Function&lt;br /&gt;
!{{Hl2}}|Command&lt;br /&gt;
!{{Hl2}}|Comments&lt;br /&gt;
|-&lt;br /&gt;
|List available software packages:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module avail&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
*If a module is not listed here, it is not supported.&lt;br /&gt;
*The flag &amp;quot;(default)&amp;quot; is never part of the name.&lt;br /&gt;
|-&lt;br /&gt;
|Use particular software:&lt;br /&gt;
|&amp;lt;pre&amp;gt; $ module load [module-name] &amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
*If possible, specify only the short name (the part before the &amp;quot;/&amp;quot;). &lt;br /&gt;
*When ambiguous, this loads the default one. &lt;br /&gt;
|-&lt;br /&gt;
|List available versions of a specific software package:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module avail [short-module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|List currently loaded modules:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module list&amp;lt;/pre&amp;gt;&lt;br /&gt;
|For reproducability, it is a good idea to put this in your job scripts, so you know exactly what modules(+version) were used.&lt;br /&gt;
|-&lt;br /&gt;
|Get description of a particular module:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module help [module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Remove a module from your shell:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module unload [module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Remove all modules:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module purge&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Replace one loaded module with another:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module switch [old-module-name] [new-module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Find a module by name and check its dependencies:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module find [part-of-module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| This is a module extension by SciNet for the GPC&lt;br /&gt;
|-&lt;br /&gt;
|Find one way to resolve module dependencies:&lt;br /&gt;
|&amp;lt;pre&amp;gt;$ module advice [module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
| This is a module extension by SciNet for the GPC&lt;br /&gt;
|}&lt;br /&gt;
Modules that load libraries, define environment variables pointing to the location of library files and include files for use Makefiles. These environment variables follow the naming convention&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCINET_[short-module-name]_BASE&lt;br /&gt;
SCINET_[short-module-name]_LIB&lt;br /&gt;
SCINET_[short-module-name]_INC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
for the base location of the module's files, the location of the libraries binaries and the header files, respectively.&lt;br /&gt;
&lt;br /&gt;
So to compile and link the library, you will have to add &amp;lt;tt&amp;gt;-I${SCINET_[short-module-name]_INC}&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;-L${SCINET_[short-module-name]_LIB}&amp;lt;/tt&amp;gt;, respectively, in addition to the usual &amp;lt;tt&amp;gt;-l[libname]&amp;lt;/tt&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Errors in loaded modules can arise for a few reasons, for instance:&lt;br /&gt;
* A module by that name may not exist.&lt;br /&gt;
* Some modules require other modules to have been loaded; it this requirement is not met when you try to load that module, an error message will be printed explaining what module is needed.&lt;br /&gt;
* Some modules cannot be loaded together: an error message will be printed explaining which modules conflict.&lt;br /&gt;
&lt;br /&gt;
It is no longer recommended to load modules in the file [[Important_.bashrc_guidelines|.bashrc]] in your home directory, rather, load them explicitly on the command-line and in your job scripts.&lt;br /&gt;
&lt;br /&gt;
===Makefile example of using modules===&lt;br /&gt;
&lt;br /&gt;
For a single-file c++-code using boost's threading library, the Makefile could contain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CPPFLAGS=-I${SCINET_BOOST_INC}&lt;br /&gt;
LDFLAGS=-L${SCINET_BOOST_LIB}&lt;br /&gt;
LDLIBS=-lboost_thread&lt;br /&gt;
all: boostthreadexample&lt;br /&gt;
boostthreadexample: boostthreadexample.o&lt;br /&gt;
boostthreadexample.o: boostthreadexample.cpp&lt;br /&gt;
clean:&lt;br /&gt;
  \rm -f boostthreadexample.o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the command line, you'd type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load intel/15.0.2 openmpi/intel/1.6.4 cxxlibraries/boost/1.55.0-intel&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: openmpi is loaded here because the boost module includes the boost:mpi package, which is however not used in this example).&lt;br /&gt;
&lt;br /&gt;
===CMake example of using modules===&lt;br /&gt;
&lt;br /&gt;
Several versions of CMake are installed on the GPC: the default version is 2.6 (which may be too old in many cases), but there are  more version available as modules Currently (Dec 2015), the most recent installed version is &amp;lt;tt&amp;gt;cmake/3.4.0&amp;lt;/tt&amp;gt; (type &amp;lt;tt&amp;gt;module avail cmake&amp;lt;/tt&amp;gt; to see all available version.&lt;br /&gt;
&lt;br /&gt;
Using cmake with the environment module eco-system requires a few tweaks. Because these tweaks are almost never discussed in the compilation instructions of package that use cmake, and are even hard to find in the CMake documentation itself, we explain these tweaks here.&lt;br /&gt;
&lt;br /&gt;
For compiling the above example of a single-file c++ code using boost's threading library with CMake, one way is to have the CMakeLists.txt could contain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include_directories($ENV{SCINET_BOOST_INC})&lt;br /&gt;
link_directories($ENV{SCINET_BOOST_LIB})&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
project(boostthreadexample)&lt;br /&gt;
add_executable(boostthreadexample boostthreadexample.cpp)&lt;br /&gt;
target_link_libraries(boostthreadexample boost_thread)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure the include_directories and link_directories commands are given before the add_executable, or they may not take effect.&lt;br /&gt;
&lt;br /&gt;
On the command line, you could then compile as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load intel/15.0.2 openmpi/intel/1.6.4 cxxlibraries/boost/1.55.0-intel&lt;br /&gt;
$ cmake .&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Although it is better to use a separate build directory. (Note: openmpi is loaded here because the boost module includes the boost:mpi package, which is however not used in this example).&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;i&amp;gt;alternative setup&amp;lt;/i&amp;gt; for working cmake is to keep the CMakeLists.txt simple and standard:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
project(boostthreadexample)&lt;br /&gt;
add_executable(boostthreadexample boostthreadexample.cpp)&lt;br /&gt;
target_link_libraries(boostthreadexample boost_thread)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then to use the environment variables to get the paths&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load intel/15.0.2 openmpi/intel/1.6.4 cxxlibraries/boost/1.55.0-intel&lt;br /&gt;
$ CMAKE_PREFIX=${SCINET_BOOST_BASE}&lt;br /&gt;
$ CMAKE_INCLUDE_PATH=${SCINET_BOOST_INC}&lt;br /&gt;
$ CMAKE_LIBRARY_PATH=${SCINET_BOOST_LIB}&lt;br /&gt;
$ CMAKE_PROGRAM_PATH=${SCINET_BOOST_BIN}&lt;br /&gt;
$ cmake .&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Default and non-default modules ==&lt;br /&gt;
&lt;br /&gt;
When you load a module with its 'short' name, you will get the ''default'' version, which is the most recent (usually), recommended version of that library or piece of software.  In general, using the short module name is the way to go. However, you may have code that depends on the intricacies of a non-default version.  For that reason, the most common older versions are also available as modules.  You can find all available modules using the &amp;lt;tt&amp;gt;module avail&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Naming convention ==&lt;br /&gt;
&lt;br /&gt;
For modules that access applications, the full name of a module is as follows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  [short-module-name]/[version-number]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To have all modules conform to this convention, a number of modules' name change on Nov 3, 2010:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''old name'''&lt;br /&gt;
| '''new name'''&lt;br /&gt;
| '''remarks'''&lt;br /&gt;
|-&lt;br /&gt;
|autoconf/autoconf-2.64 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|autoconf/2.64&lt;br /&gt;
|''short name unchanged''&lt;br /&gt;
|-&lt;br /&gt;
|cuda/cuda-3.0           &lt;br /&gt;
|cuda/3.0&lt;br /&gt;
|''default's short name unchanged''&lt;br /&gt;
|-&lt;br /&gt;
|cuda/cuda-3.1          &lt;br /&gt;
|cuda/3.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|debuggers/ddd-3.3.12   &lt;br /&gt;
|ddd/3.3.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|debuggers/gdb-7.1       &lt;br /&gt;
|gdb/7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|editors/nano/2.2.4      &lt;br /&gt;
|nano/2.2.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|emacs/emacs-23.1        &lt;br /&gt;
|emacs/23.1.1&lt;br /&gt;
|''short name unchanged''&lt;br /&gt;
|-&lt;br /&gt;
|gcc/gcc-4.4.0           &lt;br /&gt;
|gcc/4.4.0&lt;br /&gt;
|''short name unchanged''&lt;br /&gt;
|-&lt;br /&gt;
|graphics/ncview         &lt;br /&gt;
|ncview/1.93&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|graphics/graphics       &lt;br /&gt;
|grace/5.1.22&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|                        &lt;br /&gt;
|gnuplot/4.2.6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|svn/svn165              &lt;br /&gt;
|svn/1.6.5&lt;br /&gt;
|''short name unchanged''&lt;br /&gt;
|-&lt;br /&gt;
|visualization/paraview  &lt;br /&gt;
|paraview/3.8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|amber10/amber10         &lt;br /&gt;
|amber/10.0.30 &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gamess/gamess           &lt;br /&gt;
|gamess/May2209 &amp;amp;nbsp;&lt;br /&gt;
|''default's short name unchanged''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==modulefind - Finding modules by name==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;module avail&amp;lt;/tt&amp;gt; command will only show you modules whose names start with the argument that you give it, and will alsi return modules that you cannot load due to conflicts with already loaded modules.&lt;br /&gt;
&lt;br /&gt;
A little SciNet utility called &amp;lt;tt&amp;gt;modulefind&amp;lt;/tt&amp;gt; (one word) or &amp;lt;tt&amp;gt;module find&amp;lt;/tt&amp;gt; (two words) can do that. It will list all installed modules which contain the arguments, and will determine  whether those modules have &lt;br /&gt;
been loaded, could be loaded, cannot because of conflicts with&lt;br /&gt;
already loaded modules, or have unresolved dependencies &lt;br /&gt;
(i.e. for which other modules need to be loaded first).  This is especially useful in cases like the &amp;quot;boost&amp;quot; libraries, whose module names are cxxlibraries/boost/1.47.0-gcc and cxxlibraries/boost/1.47.0-gcc, for the gcc and intel compiler, respectively.  &amp;lt;tt&amp;gt;modulefind boost&amp;lt;/tt&amp;gt; will find those, whereas &amp;lt;tt&amp;gt;module avail boost&amp;lt;/tt&amp;gt; will not.&lt;br /&gt;
&lt;br /&gt;
Note that just &amp;lt;tt&amp;gt;module find&amp;lt;/tt&amp;gt; will list all top-level modules.&lt;br /&gt;
&lt;br /&gt;
== Making your own modules ==&lt;br /&gt;
&lt;br /&gt;
How to make your own modules (e.g. for local installations or to access optional perl modules, ...), is possible and described on the [[Installing your own modules]] page.&lt;br /&gt;
&lt;br /&gt;
== Deprecated modules ==&lt;br /&gt;
&lt;br /&gt;
Some older software modules for which newer versions exist, get deprecated, which means they do not get maintained.  Since deprecated modules should only be needed in rare exceptional cases, they are not listed by the &amp;lt;tt&amp;gt;module avail&amp;lt;/tt&amp;gt; command.  However, if you have a piece of legacy code that really depends on a deprecated version of a library (and we urge you to check that it does not work with newer versions!), then you can load a deprecated version by &amp;lt;pre&amp;gt;module load use.deprecated [deprecated-module-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Currently (Oct 5,2010), the following modules are deprecated on the GPC: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc/gcc-4.3.2          hdf5/184-v16-serial     intel/intel-v11.1.046               openmpi/1.3.3-intel-v11.0-ofed&lt;br /&gt;
hdf5/183-v16-openmpi   hdf5/184-v18-intelmpi   intelmpi/impi-3.2.1.009             openmpi/1.3.2-intel-v11.0-ofed.orig&lt;br /&gt;
hdf5/183-v18-openmpi   hdf5/184-v18-openmpi    intelmpi/impi-3.2.2.006             pgplot/5.2.2-gcc.old            &lt;br /&gt;
hdf5/184-v16-intelmpi  hdf5/184-v18-serial     intelmpi/impi-4.0.0.013             pgplot/5.2.2-intel.old&lt;br /&gt;
hdf5/184-v16-openmpi   intel/intel-v11.0.081   intelmpi/impi-4.0.0.025               &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the TCS, currently (Oct 5,2010) the only deprecated module is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ncl/5.1.1old&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Before using any of these deprecated modules, make sure that there is not a regular module that satisfies your needs, likely by a ''very similar name''.&lt;br /&gt;
&lt;br /&gt;
== Commercial software ==&lt;br /&gt;
&lt;br /&gt;
Apart from the compilers on our systems and the ddt parallel debugger, we generally do not provide licensed application software, e.g., no Gaussian, IDL, Matlab, etc. &lt;br /&gt;
See the [https://support.scinet.utoronto.ca/wiki/index.php/FAQ#How_can_I_run_Matlab_.2F_IDL_.2F_Gaussian_.2F_my_favourite_commercial_software_at_SciNet.3F FAQ].&lt;br /&gt;
&lt;br /&gt;
== Other software and libraries ==&lt;br /&gt;
&lt;br /&gt;
If you want to use a piece of software or a library that is not on the list, you can in principle install it yourself in you &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
Note however that building libraries and software from source often uses a lot of files. To avoid running out of disk space, building software is therefore best done from the &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt;, from which&lt;br /&gt;
you can copy/install only the libraries, header files and binaries to your &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
If you suspect that a particular piece of software or a library would be of use to other users of SciNet as well, contact us, and we will consider adding it to the system.&lt;br /&gt;
&lt;br /&gt;
== Software lists ==&lt;br /&gt;
=== Gravity.Viz GPU Software ===&lt;br /&gt;
&lt;br /&gt;
The CPUs in the GPU nodes of the Gravity cluster are of the same kind as those of the GPC, so all modules available on the GPC are available on the GPU nodes with a CentOS 6 image. This means that the different cuda variants that are available as modules, can be loaded on those GPC nodes as well, although they are of little use on that system.&lt;br /&gt;
&lt;br /&gt;
=== GPC Software ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!{{Hl2}}| Software  &lt;br /&gt;
!{{Hl2}}| Versions&lt;br /&gt;
!{{Hl2}}| Comments&lt;br /&gt;
!{{Hl2}}| Command/Library&lt;br /&gt;
!{{Hl2}}| Module Name&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Compilers'''''&lt;br /&gt;
|-  &lt;br /&gt;
|Intel Compiler&lt;br /&gt;
|12.1.3*, 12.1.5, 13.1.1, 14.0.1, 15.0, 15.0.1, 15.0.2, 15.0.6, 16.0.3&lt;br /&gt;
| includes MKL library, which includes BLAS, LAPACK, FFT, ...&lt;br /&gt;
| &amp;lt;tt&amp;gt;icpc,icc,ifort&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;intel&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| GCC Compiler&lt;br /&gt;
| 4.4.6, 4.6.1*, 4.7.0, 4.7.2, 4.8.1, 4.9.0, 5.2.0&lt;br /&gt;
| Version 5.2.0 supports [[Co-array_Fortran_on_the_GPC|coarrays]]&lt;br /&gt;
| &amp;lt;tt&amp;gt;gcc,g++,gfortran&amp;lt;br&amp;gt;caf,cafrun (gcc/5.2.0 only)&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Cuda&lt;br /&gt;
| 3.2, 4.0, 4.1*, 4.2, 5.0, 5.5, 6.0&lt;br /&gt;
| NVIDIA's extension to C for GPGPU programming&lt;br /&gt;
| &amp;lt;tt&amp;gt;nvcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cuda&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler&lt;br /&gt;
| 13.2&lt;br /&gt;
| supports OpenACC and CUDA Fortran &lt;br /&gt;
| &amp;lt;tt&amp;gt;pgcc,pgcpp,pgfortran&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;pgi&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IntelMPI&lt;br /&gt;
| 4.0.2, 4.0.3, 4.1.2*, 5.0.1, 5.0.2&lt;br /&gt;
| MPICH2 based MPI (intelmpi/5.* are in the 'experimental' modules)&lt;br /&gt;
| &amp;lt;tt&amp;gt;mpicc,mpiCC,mpif77,mpif90&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;intelmpi&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| OpenMPI&lt;br /&gt;
| 1.4.4*, 1.5.4, 1.6.4, 1.8.3&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;tt&amp;gt;mpicc,mpiCC,mpif77,mpif90&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;openmpi&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| UPC&lt;br /&gt;
| 2.12.2&lt;br /&gt;
| Berkley Unified Parallel C Implementation&lt;br /&gt;
| &amp;lt;tt&amp;gt;upcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;upc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Haskell&lt;br /&gt;
| 7.4.2*, 6.12.3&lt;br /&gt;
| Haskell compiler and Cabal package manager&lt;br /&gt;
| &amp;lt;tt&amp;gt;ghc,cabal&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;haskell&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Editors'''''&lt;br /&gt;
|- &lt;br /&gt;
| Nano&lt;br /&gt;
| 2.2.4&lt;br /&gt;
| Nano's another editor&lt;br /&gt;
| &amp;lt;tt&amp;gt;nano&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;nano&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Emacs&lt;br /&gt;
| 23.1.1, 24.4*&lt;br /&gt;
| New version of popular text editor&lt;br /&gt;
| &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Vim&lt;br /&gt;
| 7.2.4*, 7.4.5&lt;br /&gt;
| Vi editor. No module needs to be loaded for the default version&lt;br /&gt;
| &amp;lt;tt&amp;gt;vim&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;vim&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| XEmacs&lt;br /&gt;
| 21.4.22&lt;br /&gt;
| XEmacs editor&lt;br /&gt;
| &amp;lt;tt&amp;gt;xemacs&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;xemacs&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Midnight Commander&lt;br /&gt;
| 4.7.0*, 4.8.14&lt;br /&gt;
| A visual file manager within the terminal with builtin editor and viewer&lt;br /&gt;
| &amp;lt;tt&amp;gt;mc, mcedit, mcview&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;mc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Development tools'''''&lt;br /&gt;
|-&lt;br /&gt;
| Autoconf&lt;br /&gt;
| 2.68&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;tt&amp;gt;autoconf, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;autoconf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Automake&lt;br /&gt;
| 1.11.2&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;tt&amp;gt;aclocal, automake&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;automake&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| CMake&lt;br /&gt;
| 2.8.6, 2.8.8*, 3.1.0&lt;br /&gt;
| cross-platform, open-source build system&lt;br /&gt;
| &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Scons&lt;br /&gt;
| 2.0&lt;br /&gt;
| Software construction tool&lt;br /&gt;
| &amp;lt;tt&amp;gt;scons&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;scons&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Git&lt;br /&gt;
| 1.7.1, 1.7.10*, 1.9.5&lt;br /&gt;
| Revision control system&lt;br /&gt;
| &amp;lt;tt&amp;gt;git,gitk&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Git-annex&lt;br /&gt;
| 4.20130827, 5.20150219*&lt;br /&gt;
| Revision control system&lt;br /&gt;
| &amp;lt;tt&amp;gt;git,gitk&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;git-annex&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Intel tools&lt;br /&gt;
| 2013, 2015&lt;br /&gt;
| Intel Code Analysis Tools&lt;br /&gt;
| Vtune Amplifier XE, Inspector XE&lt;br /&gt;
| &amp;lt;tt&amp;gt;inteltools&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mercurial&lt;br /&gt;
| 1.8.2&lt;br /&gt;
| Version control system&amp;lt;br&amp;gt;(part of the python module!)&lt;br /&gt;
| &amp;lt;tt&amp;gt;hg&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Debug and performance tools'''''&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.allinea.com/products/ddt/ DDT]&lt;br /&gt;
| 4.0, 4.1, 4.2.1*&lt;br /&gt;
| Allinea's Distributed Debugging Tool, + MAP MPI Profiler&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt, map&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| DDD&lt;br /&gt;
| 3.3.12&lt;br /&gt;
| Data Display Debugger&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddd&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| GDB&lt;br /&gt;
| 7.3.1*, 7.6&lt;br /&gt;
| GNU debugger (the intel idbc debugger is available by default)&lt;br /&gt;
| &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| MPE2&lt;br /&gt;
| 2.4.5&lt;br /&gt;
| Multi-Processing Environment with intel + OpenMPI&lt;br /&gt;
| &amp;lt;tt&amp;gt;mpecc, mpefc, jumpshot&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;mpe&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Introduction_To_Performance#OpenSpeedShop_.28profiling.2C_MPI_tracing:_GPC.29 | OpenSpeedShop]]&lt;br /&gt;
| 2.1&lt;br /&gt;
| sampling and MPI tracing&lt;br /&gt;
| &amp;lt;tt&amp;gt;openss, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;openspeedshop&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Introduction_To_Performance#Scalasca_.28profiling.2C_tracing:_TCS.2C_GPC.29 | Scalasca]]&lt;br /&gt;
| 1.3.3, 1.4.3*&lt;br /&gt;
| SCalable performance Analysis of LArge SCale Applications (Compiled with OpenMPI)&lt;br /&gt;
| &amp;lt;tt&amp;gt;scalasca&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;scalasca&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://ipm-hpc.sourceforge.net IPM]&lt;br /&gt;
| 0.983&lt;br /&gt;
| Integrated Performance Monitors http://ipm-hpc.sourceforge.net/]&lt;br /&gt;
| &amp;lt;tt&amp;gt;ipm, ipm_parse, ploticus,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ipm&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[Performance_And_Debugging_Tools:_GPC#Valgrind | Valgrind]]&lt;br /&gt;
| 3.7,0*, 3.9.0&lt;br /&gt;
| Memory checking utility&lt;br /&gt;
| &amp;lt;tt&amp;gt;valgrind,cachegrind&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;valgrind&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Padb&lt;br /&gt;
| 3.2 &lt;br /&gt;
| examine and debug parallel programs&lt;br /&gt;
| &amp;lt;tt&amp;gt;padb&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;padb&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|&amp;lt;span id=&amp;quot;anchor_viz&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Visualization tools'''''&lt;br /&gt;
|- &lt;br /&gt;
| Grace&lt;br /&gt;
| 5.1.22&lt;br /&gt;
| Plotting utility&lt;br /&gt;
| &amp;lt;tt&amp;gt;xmgrace&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;grace&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Gnuplot&lt;br /&gt;
| 4.2.6, 4.6.1*&lt;br /&gt;
| Plotting utility&amp;lt;br&amp;gt;Requires 'extras' module if used on compute nodes.&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnuplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnuplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[ Using_Paraview | ParaView ]]&lt;br /&gt;
| 3.12.0*, 3.14.1, 4.1.0&lt;br /&gt;
| Scientific visualization, server only&lt;br /&gt;
| &amp;lt;tt&amp;gt;pvserver,pvbatch,pvpython&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;paraview&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| VMD&lt;br /&gt;
| 1.8.6, 1.9*&lt;br /&gt;
| Visualization and analysis utility&lt;br /&gt;
| &amp;lt;tt&amp;gt;vmd&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;vmd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://visit.llnl.gov/ VisIt]&lt;br /&gt;
| 2.6.3, 2.6.3-parallel*, 2.10.0-bin, 2.10.0-bin_mesa&lt;br /&gt;
| Interactive, scalable, visualization, animation and analysis tool&lt;br /&gt;
| &amp;lt;tt&amp;gt;visit&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;visit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| NCL/NCARG&lt;br /&gt;
| 6.0.0&lt;br /&gt;
| NCARG graphics and ncl utilities&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncl&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| ROOT&lt;br /&gt;
| 5.30.00, 5.30.03*, 5.34.03, 6.02.02&lt;br /&gt;
| ROOT Analysis Framework from CERN&lt;br /&gt;
| &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ROOT&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| ImageMagick&lt;br /&gt;
| 6.6.7&lt;br /&gt;
| Image manipulation tools&lt;br /&gt;
| &amp;lt;tt&amp;gt;convert,animate,composite,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ImageMagick&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PGPLOT&lt;br /&gt;
| 5.2.2&lt;br /&gt;
| Graphics subroutine library&lt;br /&gt;
| &amp;lt;tt&amp;gt;libcpgplot,libpgplot,libtkpgplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;pgplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://users.monash.edu.au/~dprice/splash Splash ]&lt;br /&gt;
| 2.6.0&lt;br /&gt;
| Visualization suite for SPH simulations&lt;br /&gt;
| &amp;lt;tt&amp;gt;asplash, dsplash, gsplash, nsplash, rsplash, srsplash, ssplash, tsplash, vsplash&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;splash&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Storage tools and libraries'''''&lt;br /&gt;
|- &lt;br /&gt;
| NetCDF&lt;br /&gt;
| 4.1.3*, 4.2.1, 4.3.2&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncdump,ncgen,libnetcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;netcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Ncview&lt;br /&gt;
| 2.1.1, 2.1.&lt;br /&gt;
| Visualization for NetCDF files&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncview&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncview&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| NCO&lt;br /&gt;
| 4.0.8, 4.3.2&lt;br /&gt;
| NCO utilities to manipulate netCDF files&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncap, ncap2, ncatted, etc.&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;nco&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| CDO&lt;br /&gt;
| 1.5.1, 1.5.4*, 1.6.1&lt;br /&gt;
| Climate Data Operators&lt;br /&gt;
| &amp;lt;tt&amp;gt;cdo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cdo&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| UDUNITS&lt;br /&gt;
| 2.1.11&lt;br /&gt;
| unit conversion utilities&lt;br /&gt;
| &amp;lt;tt&amp;gt;libudunits2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;udunits&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| HDF4&lt;br /&gt;
| 4.2.6&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;h4fc,hdiff,...,libdf,libsz&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hdf4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[Hdf5 | HDF5]]&lt;br /&gt;
| 1.8.7-v18*&lt;br /&gt;
| Scientific data storage and retrieval, parallel I/O&lt;br /&gt;
| &amp;lt;tt&amp;gt;h5ls, h5diff, ..., libhdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.arg0.net/encfs EncFS ]&lt;br /&gt;
| 1.74&lt;br /&gt;
| EncFS provides an encrypted filesystem in user-space, (works ONLY on gpc01..04)&lt;br /&gt;
| &amp;lt;tt&amp;gt;encfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;encfs&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Applications'''''&lt;br /&gt;
|- &lt;br /&gt;
| [[amber|AMBER 10]]&lt;br /&gt;
| Amber 10 + Amber Tools 1.3&lt;br /&gt;
| Amber Molecular Dynamics Package&lt;br /&gt;
| &amp;lt;tt&amp;gt;sander, sander.MPI&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;amber&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| antlr&lt;br /&gt;
| 2.7.7&lt;br /&gt;
| ANother Tool for Language Recognition&lt;br /&gt;
| &amp;lt;tt&amp;gt;antlr, antlr-config&amp;lt;br&amp;gt;libantlr, antlr.jar, antlr.py&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;antlr&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[gamess|GAMESS (US)]]&lt;br /&gt;
| August 18, 2011 R1&lt;br /&gt;
| General Atomic and Molecular Electronic Structure System&lt;br /&gt;
| &amp;lt;tt&amp;gt;rungms&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gamess&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[gromacs|GROMACS]]&lt;br /&gt;
| 4.5.5, 4.5.7, 4.6.2, 4.6.3, 4.6.7, 5.0.4&lt;br /&gt;
| GROMACS molecular dynamics, single precision, MPI&lt;br /&gt;
| &amp;lt;tt&amp;gt;grompp, mdrun, gmx, gmx_mpi&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gromacs&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[namd|NAMD]]&lt;br /&gt;
| 2.8, 2.9*&lt;br /&gt;
| NAMD - Scalable Molecular Dynamics&lt;br /&gt;
| &amp;lt;tt&amp;gt;namdmpiexec, namd2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;namd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[nwchem|NWChem]]&lt;br /&gt;
| 6.0&lt;br /&gt;
| NWChem Quantum Chemistry&lt;br /&gt;
| &amp;lt;tt&amp;gt;nwchem&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;nwchem&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.quantum-espresso.org/index.php Quantum Espresso]&lt;br /&gt;
| 4.3.2, 5.0.3&lt;br /&gt;
| Quantum Chemistry &lt;br /&gt;
| &amp;lt;tt&amp;gt;pw.x, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;espresso&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://blast.ncbi.nlm.nih.gov BLAST]&lt;br /&gt;
| 2.2.23+&lt;br /&gt;
| Basic Local Alignment Search Tool&lt;br /&gt;
| &amp;lt;tt&amp;gt;blastn,blastp,blastx,psiblast,tblastn...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;blast&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://denovoassembler.sourceforge.net RAY]&lt;br /&gt;
| 2.1.0 (small k-mer), 2.2.0, 2.3.1&lt;br /&gt;
| Parallel de novo genome assemblies&lt;br /&gt;
| &amp;lt;tt&amp;gt;Ray&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ray&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[https://www.cp2k.org CP2K]]&lt;br /&gt;
| 3.0&lt;br /&gt;
| DFT molecular dynamics, MPI&lt;br /&gt;
| &amp;lt;tt&amp;gt;cp2k.psmp&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cp2k&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[cpmd|CPMD]]&lt;br /&gt;
| 3.13.2&lt;br /&gt;
| Carr-Parinello molecular dynamics, MPI&lt;br /&gt;
| &amp;lt;tt&amp;gt;cpmd.x&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cpmd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[R Statistical Package|R]] &lt;br /&gt;
| 2.13.1, 2.14.1, 2.15.1*, 3.0.0, 3.0.1, 3.1.1&lt;br /&gt;
| statistical computing&lt;br /&gt;
| &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Octave&lt;br /&gt;
| 3.4.3*, 3.8.1&lt;br /&gt;
| Matlab-like environment&lt;br /&gt;
| &amp;lt;tt&amp;gt;octave&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;octave&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openfoam.org OpenFOAM ]&lt;br /&gt;
| 2.1.0, 2.3.0&lt;br /&gt;
| Open Source CFD Package&lt;br /&gt;
| &amp;lt;tt&amp;gt;*foam&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;openfoam&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bedtools&lt;br /&gt;
| 2.21.0&lt;br /&gt;
| Toolset for genome arithmetic&lt;br /&gt;
| &amp;lt;tt&amp;gt;bedtools ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;bedtools&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Samtools&lt;br /&gt;
| 0.1.19&lt;br /&gt;
| Suite of programs for interacting with high-throughput sequencing data&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;tt&amp;gt;samtools&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://mrbayes.sourceforge.net/  MrBayes ]&lt;br /&gt;
| 3.2.4&lt;br /&gt;
| MrBayes is a program for Bayesian inference and model choice across a wide range of phylogenetic and evolutionary models.&lt;br /&gt;
| &amp;lt;tt&amp;gt;mb&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;mrbayes&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Stacks&lt;br /&gt;
| 1.28 1.29*&lt;br /&gt;
| A software pipeline for building loci from short-read sequences.&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;tt&amp;gt;stacks&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Libraries'''''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mcs.anl.gov/petsc/petsc-as/  PETSc ]&lt;br /&gt;
| 3.1*, 3.2, 3.3, 3.4.4&lt;br /&gt;
| Portable, Extensible Toolkit for Scientific Computation (PETSc)&lt;br /&gt;
| &amp;lt;tt&amp;gt;libpetsc, etc.. &amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;petsc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BOOST&lt;br /&gt;
| 1.47.0, 1.54, 1.55&lt;br /&gt;
| C++ Boost libraries&lt;br /&gt;
| &amp;lt;tt&amp;gt;libboost...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cxxlibraries/boost&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Rarray&lt;br /&gt;
| 1.0&lt;br /&gt;
| C++ multidimensional array library&lt;br /&gt;
| &amp;lt;tt&amp;gt;rarray&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cxxlibraries/rarray&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[Armadillo C++ linear algebra library | Armadillo]]&lt;br /&gt;
| 3.910.0&lt;br /&gt;
| C++ armadillo libraries (implement Matlab-like syntax)&lt;br /&gt;
| &amp;lt;tt&amp;gt;armadillo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;armadillo&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.tacc.utexas.edu/tacc-projects/gotoblas2/ GotoBLAS]&lt;br /&gt;
| 1.13&lt;br /&gt;
| Optimized BLAS implementation &lt;br /&gt;
| &amp;lt;tt&amp;gt;libgoto2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gotoblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| OpenBLAS&lt;br /&gt;
| 1.13, 0.2.13*&lt;br /&gt;
| Open BLAS implementation including lapack, cblas and lapacke. Note that compilations with the Intel c/c++ compiler will need to link with &amp;lt;tt&amp;gt;-lifcore&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;libopenblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;openblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| GSL&lt;br /&gt;
| 1.13*, 1.15&lt;br /&gt;
| GNU Scientific Library&lt;br /&gt;
| &amp;lt;tt&amp;gt;libgsl, libgslcblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gsl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| FFTW&lt;br /&gt;
| 2.1.5, 3.3.0, 3.3.3*&lt;br /&gt;
| fast Fourier transform library&lt;br /&gt;
''Be careful in combining fftw3 and MKL: you need to link fftw3 first, with'' &amp;lt;tt&amp;gt;-L${SCINET_FFTW_LIB} -lfftw3&amp;lt;/tt&amp;gt;, then link MKL&lt;br /&gt;
| &amp;lt;tt&amp;gt;libfftw3&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;fftw&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| LAPACK&lt;br /&gt;
| &lt;br /&gt;
| Provided by the Intel MKL library&lt;br /&gt;
| See http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/&lt;br /&gt;
| &amp;lt;tt&amp;gt;intel&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [http://freshmeat.net/projects/rlog  RLog ]&lt;br /&gt;
| 1.4&lt;br /&gt;
| RLog provides a flexible message logging facility for C++ programs and libraries.&lt;br /&gt;
| &amp;lt;tt&amp;gt;librlog&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cxxlibraries/rlog&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Scripting/interpreted languages'''''&lt;br /&gt;
|-&lt;br /&gt;
| [[GNU Parallel]]&lt;br /&gt;
| 2012-10-22, 20140622*&lt;br /&gt;
| execute commands in parallel&lt;br /&gt;
| &amp;lt;tt&amp;gt;parallel&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnu-parallel&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[Python]]&lt;br /&gt;
| 2.7.2*, 2.7.3, , 2.7.5, 2.7.8&lt;br /&gt;
| Python programming language. See [[Python]] page for details on installed packages.&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[Python]]&lt;br /&gt;
| 3.3.4&lt;br /&gt;
| Python programming language. Modules included : numpy 1.8.1 , scipy 0.14.0 , matlotlib 1.3.1 , ipython 1.2.1 , cython 0.20.1 , h5py-2.3.0 , tables-3.1.1 , netCDF4-1.1.0 , astropy-0.3.2 , scikit_learn-0.15.0b1&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Ruby&lt;br /&gt;
| 1.9.1*, 1.9.3&lt;br /&gt;
| Ruby programming language&lt;br /&gt;
| &amp;lt;tt&amp;gt;ruby&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ruby&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Java&lt;br /&gt;
| 1.6.0, 1.7.1*&lt;br /&gt;
| IBM's Java JRE ad SDK&lt;br /&gt;
| &amp;lt;tt&amp;gt;java&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;javac&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;java&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Other'''''&lt;br /&gt;
|-&lt;br /&gt;
| [[VNC]]&lt;br /&gt;
|&lt;br /&gt;
| 'Virtual Network Computing', an alterative for X forwarding. Only works on the devel nodes. See our [[VNC]] wiki page.&lt;br /&gt;
| &amp;lt;tt&amp;gt;vncstart, vncstop, vncstatus,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt; vnc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Xlibraries&lt;br /&gt;
|&lt;br /&gt;
| A collection of X graphics libraries and tools&lt;br /&gt;
| &amp;lt;tt&amp;gt;xterm&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;xpdf&amp;lt;/tt&amp;gt;, ...&lt;br /&gt;
| &amp;lt;tt&amp;gt;Xlibraries&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Extras&lt;br /&gt;
|&lt;br /&gt;
| A collection of standard linux and home-grown tools&lt;br /&gt;
| &amp;lt;tt&amp;gt;bc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;screen&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;xxdiff&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;modulefind&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ish&amp;lt;/tt&amp;gt;, ...&lt;br /&gt;
| &amp;lt;tt&amp;gt;extras&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''* Several versions of this module are installed; listed is the default version.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
=== TCS Software ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!{{Hl2}} |Software  &lt;br /&gt;
!{{Hl2}}| Version&lt;br /&gt;
!{{Hl2}}| Comments&lt;br /&gt;
!{{Hl2}}| Command/Library&lt;br /&gt;
!{{Hl2}}| Module Name&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Compilers'''''&lt;br /&gt;
|-&lt;br /&gt;
|IBM compilers&lt;br /&gt;
|10.1,11.1,12.1(c/c++)&amp;lt;br&amp;gt;12.1,13.1,14.1(fortran)&lt;br /&gt;
| See [[TCS Quickstart]]&lt;br /&gt;
| &amp;lt;tt&amp;gt;xlc,xlC,xlf,xlc_r,xlC_r,xlf_r&amp;lt;/tt&amp;gt;&lt;br /&gt;
| ''oldest versions are standard available'' ''xlf'' ''vacpp''&lt;br /&gt;
|-&lt;br /&gt;
|IBM MPI library&lt;br /&gt;
|&lt;br /&gt;
| See [[TCS Quickstart]]&lt;br /&gt;
| &amp;lt;tt&amp;gt;mpcc,mpCC,mpxlf,mpcc_r,mpCC_r,mpxlf_r&amp;lt;/tt&amp;gt;&lt;br /&gt;
| ''standard available''&lt;br /&gt;
|-&lt;br /&gt;
| UPC&lt;br /&gt;
| 1.2&lt;br /&gt;
| Unified Parallel C&lt;br /&gt;
| &amp;lt;tt&amp;gt;xlupc&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;upc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|IBM fortran compiler&lt;br /&gt;
|13.1, 14.1&lt;br /&gt;
| newer version &lt;br /&gt;
| &amp;lt;tt&amp;gt;xlf,xlf_r&amp;lt;/tt&amp;gt;&lt;br /&gt;
| xlf/13.1&lt;br /&gt;
|-&lt;br /&gt;
|IBM c/c++ compilers&lt;br /&gt;
|11.1, 12.1&lt;br /&gt;
| new versions&lt;br /&gt;
| &amp;lt;tt&amp;gt;xlc,xlC,xlc_r,xlC_r&amp;lt;/tt&amp;gt;&lt;br /&gt;
| vacpp&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Debug/performancs tools'''''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.allinea.com/products/ddt/ DDT]&lt;br /&gt;
| 4.0, 4.1, 4.2.1*&lt;br /&gt;
| Allinea's Distributed Debugging Tool&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MPE2&lt;br /&gt;
| 1.0.6&lt;br /&gt;
| Performance Visualization for Parallel Programs   &lt;br /&gt;
| &amp;lt;tt&amp;gt;libmpe&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;mpe&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Scalasca&lt;br /&gt;
| 1.2&lt;br /&gt;
| SCalable performance Analysis of LArge SCale Applications&lt;br /&gt;
| &amp;lt;tt&amp;gt;scalasca, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;scalasca&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Storage tools and libraries'''''&lt;br /&gt;
|-&lt;br /&gt;
| HDF4&lt;br /&gt;
| 4.2.5&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;h4fc, hdiff, ..., libdf, libsz&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hdf4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HDF5&lt;br /&gt;
|&lt;br /&gt;
| Scientific data storage and retrieval, parallel I/O&amp;lt;br&amp;gt;Part of the extras module on the tcs:&amp;lt;br&amp;gt;compile with &amp;lt;tt&amp;gt;-I${SCINET_EXTRAS_INC}&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; link with &amp;lt;tt&amp;gt;-L${SCINET_EXTRAS_LIB}&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;libhdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;extras&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NetCDF + ncview&lt;br /&gt;
| 4.0.1*&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncdump, ncgen, libnetcdf, ncview&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;netcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| parallel netCDF&lt;br /&gt;
| 1.1.1*&lt;br /&gt;
| Scientific data storage and retrieval using MPI-IO&lt;br /&gt;
| &amp;lt;tt&amp;gt;libpnetcdf.a&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;parallel-netcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NCO&lt;br /&gt;
| 3.9.6*&lt;br /&gt;
| NCO utilities to manipulate netCDF files&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncap, ncap2, ncatted, &amp;lt;/tt&amp;gt; etc.&lt;br /&gt;
| &amp;lt;tt&amp;gt;nco&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Libraries'''''&lt;br /&gt;
|-&lt;br /&gt;
| FFTW&lt;br /&gt;
| 3.2.2&lt;br /&gt;
| Fast Fourier transform library&amp;lt;br&amp;gt;Part of the extras module on the tcs:&amp;lt;br&amp;gt;compile with &amp;lt;tt&amp;gt;-I${SCINET_EXTRAS_INC}&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; link with &amp;lt;tt&amp;gt;-L${SCINET_EXTRAS_LIB}&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;libfftw, libfftw_mpi,libfftw3&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;extras&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GSL&lt;br /&gt;
| 1.13&lt;br /&gt;
| GNU Scientific Library&lt;br /&gt;
| &amp;lt;tt&amp;gt;libgsl, libgslcblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gsl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| LAPACK+SCALAPACK&lt;br /&gt;
| 3.4.2+2.0.2&lt;br /&gt;
| Linear algebra package. Note that essl, which comes with the ibm compilers contains a large part of lapack as well.&lt;br /&gt;
| &amp;lt;tt&amp;gt;liblapack,libscalapack,libblacs&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;lapack&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PetSc&lt;br /&gt;
| 3.2&lt;br /&gt;
| Portable, Extensible Toolkit for Scientific Computation. With external packages mumps, chaco, hypre, parmetis, prometheus, plapack, superlu, sprng.&lt;br /&gt;
| &amp;lt;tt&amp;gt;libpetsc,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;petsc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| extras&lt;br /&gt;
|&lt;br /&gt;
| Adds paths to a fuller set of libraries to your user environment&amp;lt;br&amp;gt; compile with &amp;lt;tt&amp;gt;-I${SCINET_EXTRAS_INC}&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; link with &amp;lt;tt&amp;gt;-L${SCINET_EXTRAS_LIB}&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;libfftw, libfftw_mpi, libfftw3, libhdf5, liblapack, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;extras&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Applications'''''&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.quantum-espresso.org/index.php Quantum Espresso]&lt;br /&gt;
| 5.4.0&lt;br /&gt;
| Quantum Chemistry &lt;br /&gt;
| &amp;lt;tt&amp;gt;pw.x, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;espresso&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Other'''''&lt;br /&gt;
|-&lt;br /&gt;
| gmake&lt;br /&gt;
| 3.82&lt;br /&gt;
| GNU's make. Replaces AIX make or gmake 3.80.&lt;br /&gt;
| &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gmake&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gmake&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| antlr&lt;br /&gt;
| 2.7.7&lt;br /&gt;
| ANother Tool for Language Recognition&lt;br /&gt;
| &amp;lt;tt&amp;gt;antlr, antlr-config&amp;lt;br&amp;gt;libantlr, antlr.jar, antlr.py&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;antlr&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NCL&lt;br /&gt;
| 5.1.1&lt;br /&gt;
| NCAR Command Language&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncl, libncl, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
''* Several versions of this module are installed; listed is the default version.''&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== P7 Software ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!{{Hl2}} |Software  &lt;br /&gt;
!{{Hl2}}| Version&lt;br /&gt;
!{{Hl2}}| Comments&lt;br /&gt;
!{{Hl2}}| Command/Library&lt;br /&gt;
!{{Hl2}}| Module Name&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Compilers'''''&lt;br /&gt;
|-&lt;br /&gt;
|IBM fortran compiler&lt;br /&gt;
|14.1, 13.1&lt;br /&gt;
|See [[P7 Linux Cluster]]&lt;br /&gt;
|&amp;lt;tt&amp;gt;xlf,xlf_r,xlf90,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|xlf&lt;br /&gt;
|-&lt;br /&gt;
|IBM c/c++ compilers&lt;br /&gt;
|12.1, 11.1&lt;br /&gt;
|See [[P7 Linux Cluster]]&lt;br /&gt;
|&amp;lt;tt&amp;gt;xlc,xlC,xlc_r,xlC_r,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|vacpp&lt;br /&gt;
|-&lt;br /&gt;
| Binutils&lt;br /&gt;
| 2.23.2&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;tt&amp;gt;addr2line, ar, ld, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;binutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|IBM MPI library&lt;br /&gt;
|5.2.2&lt;br /&gt;
|IBM's Parallel Environment&lt;br /&gt;
|&amp;lt;tt&amp;gt;mpcc,mpCC,mpfort,mpiexec&amp;lt;/tt&amp;gt;&lt;br /&gt;
|pe&lt;br /&gt;
|- &lt;br /&gt;
| GCC Compiler&lt;br /&gt;
| 4.6.1 , 4.8.1&lt;br /&gt;
| GNU Compiler Collection&lt;br /&gt;
| &amp;lt;tt&amp;gt;gcc,g++,gfortran&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Java&lt;br /&gt;
| 7.0&lt;br /&gt;
| IBM Java 1.7 implementation&lt;br /&gt;
| &amp;lt;tt&amp;gt;javac&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;jdk&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Debug/performancs tools'''''&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.allinea.com/products/ddt/ DDT]&lt;br /&gt;
| 4.0, 4.1, 4.2.1*&lt;br /&gt;
| Allinea's Distributed Debugging Tool&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Storage tools and libraries'''''&lt;br /&gt;
|-&lt;br /&gt;
| HDF5&lt;br /&gt;
| 1.8.7&lt;br /&gt;
| Scientific data storage and retrieval, parallel I/O&lt;br /&gt;
| &amp;lt;tt&amp;gt;libhdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NetCDF&lt;br /&gt;
| 4.1.3&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncdump, ncgen, libnetcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;netcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| parallel netCDF&lt;br /&gt;
| 1.2.0&lt;br /&gt;
| Scientific data storage and retrieval using MPI-IO&lt;br /&gt;
| &amp;lt;tt&amp;gt;libpnetcdf.a&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;parallel-netcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NCO&lt;br /&gt;
| 4.0.8&lt;br /&gt;
| NCO utilities to manipulate netCDF files&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncap2, ncatted, &amp;lt;/tt&amp;gt; etc.&lt;br /&gt;
| &amp;lt;tt&amp;gt;nco&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Libraries'''''&lt;br /&gt;
|-&lt;br /&gt;
| GSL&lt;br /&gt;
| 1.13&lt;br /&gt;
| GNU Scientific Library&lt;br /&gt;
| &amp;lt;tt&amp;gt;libgsl, libgslcblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gsl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Scripting/interpreted languages'''''&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]]&lt;br /&gt;
| 2.7.5&lt;br /&gt;
| Python programming language. Modules included : numpy-1.8.0 , scipy-0.13.2 , matplotlib-1.3.1 , pyfits-3.2 , h5py-2.2.1&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Other'''''&lt;br /&gt;
|-&lt;br /&gt;
| gnuplot&lt;br /&gt;
| 4.6.1&lt;br /&gt;
| command-driven interactive function and data plotting program&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnuplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnuplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| antlr&lt;br /&gt;
| 2.7.7&lt;br /&gt;
| ANother Tool for Language Recognition&lt;br /&gt;
| &amp;lt;tt&amp;gt;antlr, antlr-config&amp;lt;br&amp;gt;libantlr, antlr.jar, antlr.py&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;antlr&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| udunits&lt;br /&gt;
| 2.1.11&lt;br /&gt;
| unit conversion utilities&lt;br /&gt;
| &amp;lt;tt&amp;gt;libudunits2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;udunits&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| extras&lt;br /&gt;
|&lt;br /&gt;
| Adds paths to a fuller set of applications and libraries to your user environment&lt;br /&gt;
| &amp;lt;tt&amp;gt;bindlaunch, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;extras&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Manuals=&lt;br /&gt;
{{:Manuals}}&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=FAQ&amp;diff=9383</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=FAQ&amp;diff=9383"/>
		<updated>2018-08-09T17:30:57Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Basics==&lt;br /&gt;
===Whom do I contact for support?===&lt;br /&gt;
&lt;br /&gt;
Whom do I contact if I have problems or questions about how to use the SciNet systems?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
E-mail [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;]  &lt;br /&gt;
&lt;br /&gt;
In your email, please include the following information:&lt;br /&gt;
&lt;br /&gt;
* your username on SciNet&lt;br /&gt;
* the cluster that your question pertains to (GPC or TCS; SciNet is not a cluster!),&lt;br /&gt;
* any relevant error messages&lt;br /&gt;
* the commands you typed before the errors occured&lt;br /&gt;
* the path to your code (if applicable)&lt;br /&gt;
* the location of the job scripts (if applicable)&lt;br /&gt;
* the directory from which it was submitted (if applicable)&lt;br /&gt;
* a description of what it is supposed to do (if applicable)&lt;br /&gt;
* if your problem is about connecting to SciNet, the type of computer you are connecting from.&lt;br /&gt;
&lt;br /&gt;
Note that your password should never, never, never be to sent to us, even if your question is about your account.&lt;br /&gt;
&lt;br /&gt;
Try to avoid sending email only to specific individuals at SciNet. Your chances of a quick reply increase significantly if you email our team!&lt;br /&gt;
&lt;br /&gt;
===What does ''code scaling'' mean?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please see [[Introduction_To_Performance#Parallel_Speedup|A Performance Primer]]&lt;br /&gt;
&lt;br /&gt;
===What do you mean by ''throughput''?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please see [[Introduction_To_Performance#Throughput|A Performance Primer]].&lt;br /&gt;
&lt;br /&gt;
Here is a simple example:&lt;br /&gt;
&lt;br /&gt;
Suppose you need to do 10 computations.  Say each of these runs for&lt;br /&gt;
1 day on 8 cores, but they take &amp;quot;only&amp;quot; 18 hours on 16 cores.  What is the&lt;br /&gt;
fastest way to get all 10 computations done - as 8-core jobs or as&lt;br /&gt;
16-core jobs?  Let us assume you have 2 nodes at your disposal.&lt;br /&gt;
The answer, after some simple arithmetic, is that running your 10&lt;br /&gt;
jobs as 8-core jobs will take 5 days, whereas if you ran them&lt;br /&gt;
as 16-core jobs it would take 7.5 days.  Take your own conclusions...&lt;br /&gt;
&lt;br /&gt;
===I changed my .bashrc/.bash_profile and now nothing works===&lt;br /&gt;
&lt;br /&gt;
The default startup scripts provided by SciNet, and guidelines for them, can be found [[Important_.bashrc_guidelines|here]].  Certain things - like sourcing &amp;lt;tt&amp;gt;/etc/profile&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;/etc/bashrc&amp;lt;/tt&amp;gt; are ''required'' for various SciNet routines to work!   &lt;br /&gt;
&lt;br /&gt;
If the situation is so bad that you cannot even log in, please send email [mailto:support@scinet.utoronto.ca support].&lt;br /&gt;
&lt;br /&gt;
===Could I have my login shell changed to (t)csh?===&lt;br /&gt;
&lt;br /&gt;
The login shell used on our systems is bash. While the tcsh is available on the GPC and the TCS, we do not support it as the default login shell at present.  So &amp;quot;chsh&amp;quot; will not work, but you can always run tcsh interactively. Also, csh scripts will be executed correctly provided that they have the correct &amp;quot;shebang&amp;quot; &amp;lt;tt&amp;gt;#!/bin/tcsh&amp;lt;/tt&amp;gt; at the top.&lt;br /&gt;
&lt;br /&gt;
===How can I run Matlab / IDL / Gaussian / my favourite commercial software at SciNet?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Because SciNet serves such a disparate group of user communities, there is just no way we can buy licenses for everyone's commercial package.   The only commercial software we have purchased is that which in principle can benefit everyone -- fast compilers and math libraries (Intel's on GPC, and IBM's on TCS).&lt;br /&gt;
&lt;br /&gt;
If your research group requires a commercial package that you already have or are willing to buy licenses for, contact us at [mailto:support@scinet.utoronto.ca support@scinet] and we can work together to find out if it is feasible to implement the packages licensing arrangement on the SciNet clusters, and if so, what is the the best way to do it.&lt;br /&gt;
&lt;br /&gt;
Note that it is important that you contact us before installing commercially licensed software on SciNet machines, even if you have a way to do it in your own directory without requiring sysadmin intervention.   It puts us in a very awkward position if someone is found to be running unlicensed or invalidly licensed software on our systems, so we need to be aware of what is being installed where.&lt;br /&gt;
&lt;br /&gt;
===Do you have a recommended ssh program that will allow scinet access from Windows machines?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
The [[Ssh#SSH_for_Windows_Users | SSH for Windows users]] programs we recommend are:&lt;br /&gt;
&lt;br /&gt;
* [http://mobaxterm.mobatek.net/en/ MobaXterm] is a tabbed ssh client with some Cygwin tools, including ssh and X, all wrapped up into one executable.&lt;br /&gt;
* [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY]  - this is a terminal for windows that connects via ssh.  It is a quick install and will get you up and running quickly.&amp;lt;br/&amp;gt; '''WARNING:''' Make sure you download putty from the official website, because there are &amp;quot;trojanized&amp;quot; versions of putty around that will send your login information to a site in Russia (as reported [http://blogs.cisco.com/security/trojanized-putty-software here]).&amp;lt;br&amp;gt;To set up your passphrase protected ssh key with putty, see [http://the.earth.li/~sgtatham/putty/0.61/htmldoc/Chapter8.html#pubkey here].&lt;br /&gt;
* [http://www.cygwin.com/ CygWin] - this is a whole linux-like environment for windows, which also includes an X window server so that you can display remote windows on your desktop.  Make sure you include the openssh and X window system in the installation for full functionality.  This is recommended if you will be doing a lot of work on Linux machines, as it makes a very similar environment available on your computer.&amp;lt;br&amp;gt;To set up your ssh keys, following the Linux instruction on the [[Ssh keys]] page.&lt;br /&gt;
&amp;lt;br&amp;gt;To set up your ssh keys, following the Linux instruction on the [[Ssh keys]] page.&lt;br /&gt;
&lt;br /&gt;
===My ssh key does not work! WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
[[Ssh_keys#Testing_Your_Key | Testing Your Key]]&lt;br /&gt;
&lt;br /&gt;
* If this doesn't work, you should be able to login using your password, and investigate the problem. For example, if during a login session you get an message similar to the one below, just follow the instruction and delete the offending key on line 3 (you can use vi to jump to that line with ESC plus : plus 3). That only means that you may have logged in from your home computer to SciNet in the past, and that key is obsolete.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh USERNAME@login.scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @&lt;br /&gt;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!&lt;br /&gt;
Someone could be eavesdropping on you right now (man-in-the-middle&lt;br /&gt;
attack)!&lt;br /&gt;
It is also possible that the RSA host key has just been changed.&lt;br /&gt;
The fingerprint for the RSA key sent by the remote host is&lt;br /&gt;
53:f9:60:71:a8:0b:5d:74:83:52:**fe:ea:1a:9e:cc:d3.&lt;br /&gt;
Please contact your system administrator.&lt;br /&gt;
Add correct host key in /home/&amp;lt;user&amp;gt;/.ssh/known_hosts to get rid of&lt;br /&gt;
this message.&lt;br /&gt;
Offending key in /home/&amp;lt;user&amp;gt;/.ssh/known_hosts:3&lt;br /&gt;
RSA host key for login.scinet.utoronto.ca &lt;br /&gt;
&amp;lt;http://login.scinet.utoronto.ca &amp;lt;http://login.scinet.utoronto.ca&amp;gt;&amp;gt; has&lt;br /&gt;
changed and you have requested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If you get the message below you may need to logout of your gnome session and log back in since the ssh-agent needs to be&lt;br /&gt;
restarted with the new passphrase ssh key.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh USERNAME@login.scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
Agent admitted failure to sign using the key.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Can't get graphics: &amp;quot;Can't open display/DISPLAY is not set&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
To use graphics on SciNet machines and have it displayed on your machine, you need to have a X server running on your computer (an X server is the standard way graphics is done on linux). One an X server is running, you can log in with the &amp;quot;-Y&amp;quot; option to ssh (&amp;quot;-X&amp;quot; sometimes also works).&lt;br /&gt;
&lt;br /&gt;
How to get an X server running on your computer, depends on the operating system.  On linux machines with a graphical interface, X will already be running.  On windows, the easiest solution is using MobaXterm, which comes with an  X server (alternatives, such as cygwin with the x11 server installed, or running putty+Xming, can also work, but are a bit more work to set up.  For Macs, you will need to install Xquartz. &lt;br /&gt;
  &lt;br /&gt;
===Remote graphics stops working after a while: &amp;quot;Can't open display&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
If you still cannot get graphics, or it works only for a while and then suddenly it &amp;quot;can't open display localhost:....&amp;quot;, your X11 graphics connection may have timed out (Macs seem to be particularly prone to this).  You'll have to tell your own computer not to allow, and not to timeout the X11 graphics connection.&lt;br /&gt;
&lt;br /&gt;
The following should fix it. The ssh configuration settings are in a file called /etc/ssh/ssh_config (or /etc/ssh_config in older OS X versions, or $HOME/.ssh/config for specific users). In the config file, find (or create) the section &amp;quot;Host *&amp;quot; (meaning all hosts) and add the following lines:&lt;br /&gt;
&lt;br /&gt;
  Host *&lt;br /&gt;
   ServerAliveInterval 60&lt;br /&gt;
   ServerAliveCountMax 3&lt;br /&gt;
   ForwardX11 yes&lt;br /&gt;
   ForwardX11Trusted yes&lt;br /&gt;
   ForwardX11Timeout 596h&lt;br /&gt;
&lt;br /&gt;
(The &amp;lt;tt&amp;gt;Host *&amp;lt;/tt&amp;gt; is only needed if there was no Host section yet to append these settings to.)&lt;br /&gt;
&lt;br /&gt;
If this does not resolve it, try it again with &amp;quot;ssh -vvv -Y ....&amp;quot;.  The &amp;quot;-vvv&amp;quot; spews out a lot of diagnostic messages. Look for anything resembling a timeout, and let us know (support AT scinet DOT utoronto DOT ca).&lt;br /&gt;
&lt;br /&gt;
===Can't forward X:  &amp;quot;Warning: No xauth data; using fake authentication data&amp;quot;, or &amp;quot;X11 connection rejected because of wrong authentication.&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
I used to be able to forward X11 windows from SciNet to my home machine, but now I'm getting these messages; what's wrong?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
This very likely means that ssh/xauth can't update your ${HOME}/.Xauthority file. &lt;br /&gt;
&lt;br /&gt;
The simplest pssible reason for this is that you've filled your 10GB /home quota and so can't write anything to your home directory.   Use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load extras&lt;br /&gt;
$ diskUsage&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
to check to see how close you are to your disk usage on ${HOME}.&lt;br /&gt;
&lt;br /&gt;
Alternately, this could mean your .Xauthority file has become broken/corrupted/confused some how, in which case you can delete that file, and when you next log in you'll get a similar warning message involving creating .Xauthority, but things should work.&lt;br /&gt;
&lt;br /&gt;
===I have a CCDB account, but I can't login to SciNet. How can I get a SciNet account?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
You must extend your CCDB application process to also get a SciNet account:&lt;br /&gt;
&lt;br /&gt;
https://wiki.scinet.utoronto.ca/wiki/index.php/Application_Process&lt;br /&gt;
&lt;br /&gt;
https://www.scinethpc.ca/getting-a-scinet-account/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How come I can not login to TCS?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
A SciNet account doesn't automatically entitle you to TCS access. At a minimum, TCS jobs need to run on at least 32 cores (64 preferred because of Simultaneous Multi Threading - [[TCS_Quickstart#Node_configuration|SMT]] - on these nodes) and need the large memory (4GB/core) and bandwidth on the system. Essentially you need to be able to explain why the work can't be done on the GPC.&lt;br /&gt;
&lt;br /&gt;
===How can I reset the password for my Compute Canada account?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
You can reset your password for your Compute Canada account here:&lt;br /&gt;
&lt;br /&gt;
https://ccdb.computecanada.ca/security/forgot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How can I change or reset the password for my SciNet account?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
To reset your password at SciNet please go to [https://portal.scinet.utoronto.ca/password_resets Password reset page].&lt;br /&gt;
&lt;br /&gt;
If you know your old password and want to change it, that can be done here after logging in on the portal:&lt;br /&gt;
&lt;br /&gt;
https://portal.scinet.utoronto.ca&lt;br /&gt;
&lt;br /&gt;
===Why am I getting the error &amp;quot;Permission denied (publickey,gssapi-with-mic,password)&amp;quot;?===&lt;br /&gt;
&lt;br /&gt;
This error can pop up in a variety of situations: when trying to log in, or when after a job has finished, when the error and output files fail to be copied (there are other possible reasons for this failure as well -- see [[FAQ#My_GPC_job_died.2C_telling_me_.60Copy_Stageout_Files_Failed.27|My GPC job died, telling me:Copy Stageout Files Failed]]).&lt;br /&gt;
In most cases, the &amp;quot;Permission denioed&amp;quot; error is caused by incorrect permission of the (hidden) .ssh directory. Ssh is used for logging in as well as for the copying of the standard error and output files after a job. &lt;br /&gt;
&lt;br /&gt;
For security reasons, &lt;br /&gt;
the directory .ssh should only be writable and readable to you, but yours &lt;br /&gt;
has read permission for everybody, and thus it fails.  You can change &lt;br /&gt;
this by&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   chmod 700 ~/.ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And to be sure, also do&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   chmod 600 ~/.ssh/id_rsa ~/authorized_keys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR:102: Tcl command execution failed? when loading modules ===&lt;br /&gt;
Modules sometimes require other modules to be loaded first.&lt;br /&gt;
Module will let you know if you didn’t.&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module purge&lt;br /&gt;
$ module load python&lt;br /&gt;
python/2.6.2(11):ERROR:151: Module ’python/2.6.2’ depends on one of the module(s) ’gcc/4.4.0’&lt;br /&gt;
python/2.6.2(11):ERROR:102: Tcl command execution failed: prereq gcc/4.4.0&lt;br /&gt;
$ gpc-f103n084-$ module load gcc python&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I compute the core-years usage of my code? ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;core-years&amp;quot; quantity is a way to account for the time your code runs, by considering the total number of cores and time used, accounting for the total number of hours in a year.&lt;br /&gt;
For instance if your code uses ''HH'' hours, in ''NN'' nodes, where each node has ''CC'' cores, then &amp;quot;core-years&amp;quot; can be computed as follow:&lt;br /&gt;
&lt;br /&gt;
''HH*(NN*CC)/(365*24)''&lt;br /&gt;
&lt;br /&gt;
If you have several independent instances (batches) running on different nodes, with ''BB'' number of batches and each batch during ''HH'' hours, then your core-years usage can be computed as,&lt;br /&gt;
&lt;br /&gt;
''BB*HH*(NN*CC)/(365*24)''&lt;br /&gt;
&lt;br /&gt;
As a general rule, in our GPC system, each node has only 8 cores, so ''CC'' will be always 8.&lt;br /&gt;
&lt;br /&gt;
==Compiling your Code==&lt;br /&gt;
&lt;br /&gt;
===How can I get g77 to work?===&lt;br /&gt;
&lt;br /&gt;
The fortran 77 compilers on the GPC are ifort and gfortran. We have dropped support for g77.  This has been a conscious decision. g77 (and the associated library libg2c) were completely replaced six years ago (Apr 2005) by the gcc 4.x branch, and haven't undergone any updates at all, even bug fixes, for over five years.  &lt;br /&gt;
If we would install g77 and libg2c, we would have to deal with the inevitable confusion caused when users accidentally link against the old, broken, wrong versions of the gcc libraries instead of the correct current versions.   &lt;br /&gt;
&lt;br /&gt;
If your code for some reason specifically requires five-plus-year-old libraries,  availability, compatibility, and unfixed-known-bug problems are only going to get worse for you over time, and this might be as good an opportunity as any to address those issues. &lt;br /&gt;
&lt;br /&gt;
''A note on porting to gfortran or ifort:''&lt;br /&gt;
&lt;br /&gt;
While gfortran and ifort are rather compatible with g77, one &lt;br /&gt;
important difference is that by default, gfortran does not preserve &lt;br /&gt;
local variables between function calls, while g77 does.   Preserved &lt;br /&gt;
local variables are for instance often used in implementations of quasi-random number &lt;br /&gt;
generators.  Proper fortran requires to declare such variables as SAVE &lt;br /&gt;
but not all old code does this.&lt;br /&gt;
Luckily, you can change gfortran's default behavior with the flag &lt;br /&gt;
&amp;lt;tt&amp;gt;-fno-automatic&amp;lt;/tt&amp;gt;.   For ifort, the corresponding flag is &amp;lt;tt&amp;gt;-noautomatic&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Where is libg2c.so?===&lt;br /&gt;
&lt;br /&gt;
libg2c.so is part of the g77 compiler, for which we dropped support. See [[#How can I get g77 to work on the GPC?]] for our reasons.&lt;br /&gt;
&lt;br /&gt;
===Autoparallelization does not work!===&lt;br /&gt;
&lt;br /&gt;
I compiled my code with the &amp;lt;tt&amp;gt;-qsmp=omp,auto&amp;lt;/tt&amp;gt; option, and then I specified that it should be run with 64 threads - with &lt;br /&gt;
 export OMP_NUM_THREADS=64&lt;br /&gt;
&lt;br /&gt;
However, when I check the load using &amp;lt;tt&amp;gt;llq1 -n&amp;lt;/tt&amp;gt;, it shows a load on the node of 1.37.  Why?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Using the autoparallelization will only get you so far.  In fact, it usually does not do too much.  What is helpful is to run the compiler with the &amp;lt;tt&amp;gt;-qreport&amp;lt;/tt&amp;gt; option, and then read the output listing carefully to see where the compiler thought it could parallelize, where it could not, and the reasons for this.  Then you can go back to your code and carefully try to address each of the issues brought up by the compiler.&lt;br /&gt;
We ''emphasize'' that this is just a rough first guide, and that the compilers are still not magical!   For more sophisticated approaches to parallelizing your code, email us at [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;]  to set up an appointment with one&lt;br /&gt;
of our technical analysts.&lt;br /&gt;
&lt;br /&gt;
===How do I link against the Intel Math Kernel Library?===&lt;br /&gt;
&lt;br /&gt;
If you need to link to the Intel Math Kernal Library (MKL) with the intel compilers, just add the &amp;lt;pre&amp;gt;-mkl&amp;lt;/pre&amp;gt; flag. There are in fact three flavours: &amp;lt;tt&amp;gt;-mkl=sequential&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;-mkl=parallel&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;-mkl=cluster&amp;lt;/tt&amp;gt;, for the serial version, the threaded version and the mpi version, respectively. (Note: The cluster version is available only when using the intelmpi module and mpi compilation wrappers.)&lt;br /&gt;
&lt;br /&gt;
If you need to link in the Intel Math Kernel Library (MKL) libraries to gcc/gfortran/c++, you are well advised to use the Intel(R) Math Kernel Library Link Line Advisor: http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ for help in devising the list of libraries to link with your code.&lt;br /&gt;
&lt;br /&gt;
'''''Note that this give the link line for the command line. When using this in Makefiles, replace $MKLPATH by ${MKLPATH}.'''''&lt;br /&gt;
&lt;br /&gt;
'''''Note too that, unless the integer arguments you will be passing to the MKL libraries are actually 64-bit integers, rather than the normal int or INTEGER types, you want to specify 32-bit integers (lp64) .'''''&lt;br /&gt;
&lt;br /&gt;
===Can the compilers on the login nodes be disabled to prevent accidentally using them?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
You can accomplish this by modifying your .bashrc to not load the compiler modules. See [[Important .bashrc guidelines]].&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;relocation truncated to fit: R_X86_64_PC32&amp;quot;: Huh?===&lt;br /&gt;
&lt;br /&gt;
What does this mean, and why can't I compile this code?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Welcome to the joys of the x86 architecture!  You're probably having trouble building arrays larger than 2GB, individually or together.   Generally, you have to try to use the medium or large x86 `memory model'.   For the intel compilers, this is specified with the compile options&lt;br /&gt;
&lt;br /&gt;
  -mcmodel=medium -shared-intel&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;feupdateenv is not implemented and will always fail&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
How do I get rid of this and what does it mean?&lt;br /&gt;
 &lt;br /&gt;
'''Answer:'''&lt;br /&gt;
First note that, as ominous as it sounds, this is really just a warning, and has to do with the intel math library. You can ignore it (unless you really are trying to manually change the exception handlers for floating point exceptions such as divide by zero), or take the safe road and get rid off it by linking with the intel math functions library:&amp;lt;pre&amp;gt;-limf&amp;lt;/pre&amp;gt;See also [[#How do I link against the Intel Math Kernel Library?]]&lt;br /&gt;
&lt;br /&gt;
===Cannot find rdmacm library when compiling on GPC===&lt;br /&gt;
&lt;br /&gt;
I get the following error building my code on GPC: &amp;quot;&amp;lt;tt&amp;gt;ld: cannot find -lrdmacm&amp;lt;/tt&amp;gt;&amp;quot;.  Where can I find this library?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
This library is part of the MPI libraries; if your compiler is having problems picking it up, it probably means you are mistakenly trying to compile on the login nodes (scinet01..scinet04).  The login nodes aren't part of the GPC; they are for logging into the data centre only.  From there you must go to the GPC or TCS development nodes to do any real work.&lt;br /&gt;
&lt;br /&gt;
=== Why do I get this error when I try to compile: &amp;quot;icpc: error #10001: could not find directory in which /usr/bin/g++41 resides&amp;quot; ?===&lt;br /&gt;
&lt;br /&gt;
You are trying to compile on the login nodes.   As described in the wiki ( https://support.scinet.utoronto.ca/wiki/index.php/GPC_Quickstart#Login ), or in the users guide you would have received with your account,   Scinet supports two main clusters, with very different architectures.  Compilation must be done on the development nodes of the appropriate cluster (in this case, gpc01-04).   Thus, log into gpc01, gpc02, gpc03, or gpc04, and compile from there.&lt;br /&gt;
&lt;br /&gt;
==Testing your Code==&lt;br /&gt;
&lt;br /&gt;
=== Can I run a something for a short time on the development nodes? ===&lt;br /&gt;
&lt;br /&gt;
I am in the process of playing around with the mpi calls in my code to get it to work. I do a lot of tests and each of them takes a couple of seconds only.  Can I do this on the development nodes?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Yes, as long as it's very brief (a few minutes).   People use the development nodes&lt;br /&gt;
for their work, and you don't want to bog it down for people, and testing a real&lt;br /&gt;
code can chew up a lot more resources than compiling, etc.    The procedures differ&lt;br /&gt;
depending on what machine you're using.&lt;br /&gt;
&lt;br /&gt;
==== TCS ====&lt;br /&gt;
&lt;br /&gt;
On the TCS you can run small MPI jobs on the tcs02 node, which is meant for &lt;br /&gt;
development use.  But even for this test run on one node, you'll need a host file --&lt;br /&gt;
a list of hosts (in this case, all tcs-f11n06, which is the `real' name of tcs02)&lt;br /&gt;
that the job will run on.  Create a file called `hostfile' containing the following:&lt;br /&gt;
&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
 tcs-f11n06&lt;br /&gt;
&lt;br /&gt;
for a 4-task run.  When you invoke &amp;quot;poe&amp;quot; or &amp;quot;mpirun&amp;quot;, there are runtime&lt;br /&gt;
arguments that you specify pointing to this file.  You can also specify it&lt;br /&gt;
in an environment variable MP_HOSTFILE, so, if your file is in your /scratch directory, say &lt;br /&gt;
${SCRATCH}/hostfile, then you would do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export MP_HOSTFILE=${SCRATCH}/hostfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in your shell.  You will also need to create a &amp;lt;tt&amp;gt;.rhosts&amp;lt;/tt&amp;gt; file in your &lt;br /&gt;
home director, again listing &amp;lt;tt&amp;gt;tcs-f11n06&amp;lt;/tt&amp;gt; so that &amp;lt;tt&amp;gt;poe&amp;lt;/tt&amp;gt;&lt;br /&gt;
can start jobs.   After that you can simply run your program.  You can use&lt;br /&gt;
mpiexec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 mpiexec -n 4 my_test_program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
adding &amp;lt;tt&amp;gt; -hostfile /path/to/my/hostfile&amp;lt;/tt&amp;gt; if you did not set the environment&lt;br /&gt;
variable above.  Alternatively, you can run it with the poe command (do a &amp;quot;man poe&amp;quot; for details), or even by&lt;br /&gt;
just directly running it.  In this case the number of MPI processes will by default&lt;br /&gt;
be the number of entries in your hostfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== GPC ====&lt;br /&gt;
&lt;br /&gt;
On the GPC one can run short test jobs on the GPC [[GPC_Quickstart#Compile.2FDevel_Nodes | development nodes ]]&amp;lt;tt&amp;gt;gpc01&amp;lt;/tt&amp;gt;..&amp;lt;tt&amp;gt;gpc04&amp;lt;/tt&amp;gt;;&lt;br /&gt;
if they are single-node jobs (which they should be) they don't need a hostfile.  Even better, though, is to request an [[ Moab#Interactive | interactive ]] job and run the tests either in regular batch queue or using a short high availability [[ Moab#debug | debug ]] queue that is reserved for this purpose.&lt;br /&gt;
&lt;br /&gt;
=== How do I run a longer (but still shorter than an hour) test job quickly ? ===&lt;br /&gt;
&lt;br /&gt;
'''Answer'''&lt;br /&gt;
&lt;br /&gt;
On the GPC there is a high turnover short queue called [[ Moab#debug | debug ]] that is designed for&lt;br /&gt;
this purpose.  You can use it by adding &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PBS -q debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to your submission script.&lt;br /&gt;
&lt;br /&gt;
==Submitting your jobs==&lt;br /&gt;
&lt;br /&gt;
===Error Submitting My Job: qsub: Bad UID for job execution MSG=ruserok failed ===&lt;br /&gt;
&lt;br /&gt;
I write up a submission script as in the examples, but when I attempt to submit the job, I get the above error.  What's wrong?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
This error will occur if you try to submit a job from the login nodes.   The login nodes are the gateway to all of SciNet's systems (GPC, TCS, P7, ARC), which have different hardware and queueing systems.  To submit a job, you must log into a development node for the particular cluster you are submitting to and submit from there.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I charge jobs to my RAC allocation? ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please see the [[Moab#Accounting|accounting section of Moab page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How can I automatically resubmit a job?===&lt;br /&gt;
&lt;br /&gt;
Commonly you may have a job that you know will take longer to run than what is &lt;br /&gt;
permissible in the queue.  As long as your program contains [[Checkpoints|checkpoint]] or &lt;br /&gt;
restart capability, you can have one job automatically submit the next. In&lt;br /&gt;
the following example it is assumed that the program finishes before &lt;br /&gt;
the 48 hour limit and then resubmits itself by logging into one&lt;br /&gt;
of the development nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque example submission script for auto resubmission&lt;br /&gt;
# SciNet GPC&lt;br /&gt;
#&lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=48:00:00&lt;br /&gt;
#PBS -N my_job&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# YOUR CODE HERE&lt;br /&gt;
./run_my_code&lt;br /&gt;
&lt;br /&gt;
# RESUBMIT 10 TIMES HERE&lt;br /&gt;
num=$NUM&lt;br /&gt;
if [ &amp;quot;$num&amp;quot; -lt 10 ]; then&lt;br /&gt;
      num=$(($num+1))&lt;br /&gt;
      ssh gpc01 &amp;quot;cd $PBS_O_WORKDIR; qsub ./script_name.sh -v NUM=$num&amp;quot;;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub script_name.sh -v NUM=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can alternatively use [[ Moab#Job_Dependencies | Job dependencies ]] through the queuing system which will not start one job until another job has completed.&lt;br /&gt;
&lt;br /&gt;
If your job can't be made to automatically stop before the 48 hour queue window, but it does write out checkpoints, you can use the timeout command to stop the program while you still have time to resubmit; for instance&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    timeout 2850m ./run_my_code argument1 argument2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will run the program for 47.5 hours (2850 minutes), and then send it SIGTERM to exit the program.&lt;br /&gt;
&lt;br /&gt;
===How can I pass in arguments to my submission script?===&lt;br /&gt;
&lt;br /&gt;
If you wish to make your scripts more generic you can use qsub's ability &lt;br /&gt;
to pass in environment variables to pass in arguments to your script.&lt;br /&gt;
The following example shows a case where an input and an output &lt;br /&gt;
file are passed in on the qsub line. Multiple variables can be &lt;br /&gt;
passed in using the qsub &amp;quot;-v&amp;quot; option and comma delimited. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# MOAB/Torque example of passing in arguments&lt;br /&gt;
# SciNet GPC&lt;br /&gt;
# &lt;br /&gt;
#PBS -l nodes=1:ppn=8,walltime=48:00:00&lt;br /&gt;
#PBS -N my_job&lt;br /&gt;
&lt;br /&gt;
# DIRECTORY TO RUN - $PBS_O_WORKDIR is directory job was submitted from&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
# YOUR CODE HERE&lt;br /&gt;
./run_my_code -f $INFILE -o $OUTFILE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub script_name.sh -v INFILE=input.txt,OUTFILE=outfile.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===I submit my GPC job, and I get an email saying it was rejected===&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
This happens because the job you've submitted breaks one of the rules of the queues and is rejected. An email&lt;br /&gt;
is sent with the JOBID, JOBNAME, and the reason it was rejected.  The following is an example where a job&lt;br /&gt;
requests more than 48 hours and was rejected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PBS Job Id: 3462493.gpc-sched&lt;br /&gt;
Job Name:   STDIN&lt;br /&gt;
job deleted&lt;br /&gt;
Job deleted at request of root@gpc-sched&lt;br /&gt;
MOAB_INFO:  job was rejected - job violates class configuration 'wclimit too high for class 'batch_ib' (345600 &amp;gt; 172800)'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jobs on the TCS or GPC may only run for 48 hours at a time; this restriction greatly increases responsiveness of the queue and queue throughput for all our users.  If your computation requires longer than that, as many do, you will have to [[ Checkpoints | checkpoint ]] your job and restart it after each 48-hour queue window.   You can manually re-submit jobs, or if you can have your job cleanly exit before the 48 hour window, there are ways to [[ FAQ#How_can_I_automatically_resubmit_a_job.3F | automatically resubmit jobs ]].&lt;br /&gt;
&lt;br /&gt;
Other rejections return a more cryptic error saying &amp;quot;job violates class configuration&amp;quot; such as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PBS Job Id: 3462409.gpc-sched&lt;br /&gt;
Job Name:   STDIN&lt;br /&gt;
job deleted&lt;br /&gt;
Job deleted at request of root@gpc-sched&lt;br /&gt;
MOAB_INFO:  job was rejected - job violates class configuration 'user required by class 'batch''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most common problems that result in this error are:&lt;br /&gt;
&lt;br /&gt;
* '''Incorrect number of processors per node''': Jobs on the GPC are scheduled per-node not per-core and since each node has 8 processor cores (ppn=8) the smallest job allowed is one node with 8 cores (nodes=1:ppn=8).  For serial jobs users must bundle or batch them together in groups of 8. See [[ FAQ#How_do_I_run_serial_jobs_on_GPC.3F | How do I run serial jobs on GPC? ]]&lt;br /&gt;
* '''No number of nodes specified''': Jobs submitted to the main queue must request a specific number of nodes, either in the submission script (with a line like &amp;lt;tt&amp;gt;#PBS -l nodes=2:ppn=8&amp;lt;/tt&amp;gt;) or on the command line (eg, &amp;lt;tt&amp;gt;qsub -l nodes=2:ppn=8,walltime=5:00:00 script.pbs&amp;lt;/tt&amp;gt;).  Note that for the debug queue, you can get away without specifying a number of nodes and a default of one will be assigned; for both technical and policy reasons, we do not enforce such a default for the main (&amp;quot;batch&amp;quot;) queue.&lt;br /&gt;
* '''There is a 15 minute walltime minimum''' on all queues except debug and if you set your walltime less than this, it will be rejected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== When submitting your job, fails saying: &amp;quot;script is written in DOS/Windows text format&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Very likely you have written your script in a windows machine, so to fix this you just need to change the format of you submission script to unix from Windows/DOS.&lt;br /&gt;
Use the command below for all your script files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dos2unix &amp;lt;pbs-script-file&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;pbs-script-file&amp;gt; has to be substituted by the name of your script file.&lt;br /&gt;
&lt;br /&gt;
==Running your jobs==&lt;br /&gt;
&lt;br /&gt;
===My job can't write to /home===&lt;br /&gt;
&lt;br /&gt;
My code works fine when I test on the development nodes, but when I submit a job, or even run interactively in the development queue on GPC, it fails.  What's wrong?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
As [[Data_Management#Home_Disk_Space | discussed]] [https://support.scinet.utoronto.ca/wiki/images/5/54/SciNet_Tutorial.pdf elsewhere], &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; is mounted read-only on the compute nodes; you can only write to &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; from the login nodes and devel nodes.  (The [[GPC_Quickstart#128Glargemem | largemem nodes]] on GPC, in this respect, are more like devel nodes than compute nodes).   In general, to run jobs you can read from &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; but you'll have to write to &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt; (or, if you were allocated space through the RAC process, on &amp;lt;tt&amp;gt;/project&amp;lt;/tt&amp;gt;).  More information on SciNet filesytems can be found on our [[Data_Management | Data Management]] page.&lt;br /&gt;
&lt;br /&gt;
===OpenMP on the TCS===&lt;br /&gt;
&lt;br /&gt;
How do I run an OpenMP job on the TCS?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please look at the [[TCS_Quickstart#Submission_Script_for_an_OpenMP_Job | TCS Quickstart ]] page.&lt;br /&gt;
&lt;br /&gt;
===Can I can use hybrid codes consisting of MPI and openMP on the GPC?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Yes. Please look at the [[GPC_Quickstart#Hybrid_MPI.2FOpenMP_jobs | GPC Quickstart ]] page.&lt;br /&gt;
&lt;br /&gt;
===How do I run serial jobs on GPC?===&lt;br /&gt;
&lt;br /&gt;
'''Answer''':&lt;br /&gt;
&lt;br /&gt;
So it should be said first that SciNet is a parallel computing resource, &lt;br /&gt;
and our priority will always be parallel jobs.   Having said that, if &lt;br /&gt;
you can make efficient use of the resources using serial jobs and get &lt;br /&gt;
good science done, that's good too, and we're happy to help you.&lt;br /&gt;
&lt;br /&gt;
The GPC nodes each have 8 processing cores, and making efficient use of these &lt;br /&gt;
nodes means using all eight cores.  As a result, we'd like to have the &lt;br /&gt;
users take up whole nodes (eg, run multiples of 8 jobs) at a time.  &lt;br /&gt;
&lt;br /&gt;
It depends on the nature of your job what the best strategy is. Several approaches are presented on the [[User_Serial|serial run wiki page]].&lt;br /&gt;
&lt;br /&gt;
===Why can't I request only a single cpu for my job on GPC?===&lt;br /&gt;
&lt;br /&gt;
'''Answer''':&lt;br /&gt;
&lt;br /&gt;
On GPC, computers are allocated by the node - that is, in chunks of 8 processors.   If you want to run a job that requires only one processor, you need to bundle the jobs into groups of 8, so as to not be wasting the other 7 for 48 hours. See [[User_Serial|serial run wiki page]].&lt;br /&gt;
&lt;br /&gt;
===How do I run serial jobs on TCS?===&lt;br /&gt;
&lt;br /&gt;
'''Answer''': You don't.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===But in the queue I found a user who is running jobs on GPC, each of which is using only one processor, so why can't I?===&lt;br /&gt;
&lt;br /&gt;
'''Answer''':&lt;br /&gt;
&lt;br /&gt;
The pradat* and atlaspt* jobs, amongst others, are jobs of the ATLAS high energy physics project. That they are reported as single cpu jobs is an artifact of the moab scheduler. They are in fact being automatically bundled into 8-job bundles but have to run individually to be compatible with their international grid-based systems.&lt;br /&gt;
&lt;br /&gt;
===How do I use the ramdisk on GPC?===&lt;br /&gt;
&lt;br /&gt;
To use the ramdisk, create and read to / write from files in /dev/shm/.. just as one would to (eg) ${SCRATCH}. Only the amount of RAM needed to store the files will be taken up by the temporary file system; thus if you have 8 serial jobs each requiring 1 GB of RAM, and 1GB is taken up by various OS services, you would still have approximately 7GB available to use as ramdisk on a 16GB node. However, if you were to write 8 GB of data to the RAM disk, this would exceed available memory and your job would likely crash.&lt;br /&gt;
&lt;br /&gt;
It is very important to delete your files from ram disk at the end of your job. If you do not do this, the next user to use that node will have less RAM available than they might expect, and this might kill their jobs.&lt;br /&gt;
&lt;br /&gt;
''More details on how to setup your script to use the ramdisk can be found on the [[User_Ramdisk|Ramdisk wiki page]].''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How can I run a job longer than 48 hours? ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
The SciNet queues have a queue limit of 48 hours.   This is pretty typical for systems of its size in Canada and elsewhere, and larger systems commonly have shorter limits.   The limits are there to ensure that every user gets a fair share of the system (so that no one user ties up lots of nodes for a long time), and for safety (so that if one memory board in one node fails in the middle of a very long job, you haven't lost a months' worth of work).&lt;br /&gt;
&lt;br /&gt;
Since many of us have simulations that require more than that much time, most widely-used scientific applications have &amp;quot;checkpoint-restart&amp;quot; functionality, where every so often the complete state of the calculation is stored as a checkpoint file, and one can restart a simulation from one of these.   In fact, these restart files tend to be quite useful for a number of purposes.&lt;br /&gt;
&lt;br /&gt;
If your job will take longer, you will have to submit your job in multiple parts, restarting from a checkpoint each time.  In this way, one can run a simulation much longer than the queue limit.  In fact, one can even write job scripts which automatically re-submit themselves until a run is completed, using [[FAQ#How_can_I_automatically_resubmit_a_job.3F | automatic resubmission. ]]&lt;br /&gt;
&lt;br /&gt;
=== Why did showstart say it would take 3 hours for my job to start before, and now it says my job will start in 10 hours? ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please look at the [[FAQ#How_do_priorities_work.2Fwhy_did_that_job_jump_ahead_of_mine_in_the_queue.3F | How do priorities work/why did that job jump ahead of mine in the queue? ]] page.&lt;br /&gt;
&lt;br /&gt;
===How do priorities work/why did that job jump ahead of mine in the queue?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
The [[Moab | queueing system]] used on SciNet machines is a [http://en.wikipedia.org/wiki/Priority_queue Priority Queue].  Jobs enter the queue at the back of the queue, and slowly make their way to the front as those ahead of them are run; but a job that enters the queue with a higher priority can `cut in line'.&lt;br /&gt;
&lt;br /&gt;
The main factor which determines priority is whether or not the user (or their PI) has an [http://wiki.scinethpc.ca/wiki/index.php/Application_Process RAC allocation].  These are competitively allocated grants of computer time; there is a call for proposals towards the end of every calendar year.    Users with an allocation have high priorities in an attempt to make sure that they can use the amount of computer time the committees granted them.   Their priority decreases as they approach their allotted usage over the current window of time; by the time that they have exhausted that allotted usage, their priority is the same as users with no allocation (unallocated, or `default' users).    Unallocated users have a fixed, low, priority.&lt;br /&gt;
&lt;br /&gt;
This priority system is called `fairshare'; the scheduler attempts to make sure everyone has their fair share of the machines, where the share that's fair has been determined by the allocation committee.    The fairshare window is a rolling window of two weeks; that is, any time you have a job in the queue, the fairshare calculation of its priority is given by how much of your allocation of the machine has been used in the last 14 days.&lt;br /&gt;
&lt;br /&gt;
A particular allocation might have some fraction of GPC - say 4% of the machine (if the PI had been allocated 10 million CPU hours on GPC). The allocations have labels; (called `Resource Allocation Proposal Identifiers', or RAPIs) they look something like&lt;br /&gt;
&lt;br /&gt;
  abc-123-ab&lt;br /&gt;
&lt;br /&gt;
where abc-123 is the PIs CCRI, and the suffix specifies which of the allocations granted to the PI is to be used.  These can be specified on a job-by-job basis.  On GPC, one adds the line&lt;br /&gt;
 #PBS -A RAPI&lt;br /&gt;
to your script; on TCS, one uses&lt;br /&gt;
 # @ account_no = RAPI&lt;br /&gt;
If the allocation to charge isn't specified, a default is used; each user has such a default, which can be changed at the same portal where one changes one's password, &lt;br /&gt;
&lt;br /&gt;
 https://portal.scinet.utoronto.ca/&lt;br /&gt;
&lt;br /&gt;
A jobs priority is determined primarily by the fairshare priority of the allocation it is being charged to; the previous 14 days worth of use under that allocation is calculated and compared to the allocated fraction (here, 5%) of the machine over that window (here, 14 days).   The fairshare priority is a decreasing function of the allocation left; if there is no allocation left (eg, jobs running under that allocation have already used 379,038 CPU hours in the past 14 days), the priority is the same as that of a user with no granted allocation.   (This last part has been the topic of some debate; as the machine gets more utilized, it will probably be the case that we allow RAC users who have greatly overused their quota to have their priorities to drop below that of unallocated users, to give the unallocated users some chance to run on our increasingly crowded system; this would have no undue effect on our allocated users as they still would be able to use the amount of resources they had been allocated by the committees.)   Note that all jobs charging the same allocation get the same fairshare priority.&lt;br /&gt;
&lt;br /&gt;
There are other factors that go into calculating priority, but fairshare is the most significant.   Other factors include&lt;br /&gt;
* amount of time waiting in queue (measured in units of the requested runtime). A waiting queue job gains priority as it sits in the queue to avoid job starvation. &lt;br /&gt;
* User adjustment of priorities ( See below ).&lt;br /&gt;
&lt;br /&gt;
The major effect of these subdominant terms is to shuffle the order of jobs running under the same allocation.&lt;br /&gt;
&lt;br /&gt;
===How do we manage job priorities within our research group?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Obviously, managing shared resources within a large group - whether it &lt;br /&gt;
is conference funding or CPU time - takes some doing.   &lt;br /&gt;
&lt;br /&gt;
It's important to note that the fairshare periods are intentionally kept &lt;br /&gt;
quite short - just two weeks long. So, for example, let us say that in your resource &lt;br /&gt;
allocation you have about 10% of the machine.   Then for someone to use &lt;br /&gt;
up the whole two week amount of time in 2 days, they'd have to use 70% &lt;br /&gt;
of the machine in those two days - which is unlikely to happen by &lt;br /&gt;
accident.  If that does happen,  &lt;br /&gt;
those using the same allocation as the person who used 70% of the &lt;br /&gt;
machine over the two days will suffer by having much lower priority for &lt;br /&gt;
their jobs, but only for the next 12 days - and even then, if there are &lt;br /&gt;
idle cpus they'll still be able to compute.&lt;br /&gt;
&lt;br /&gt;
There will be online tools for seeing how the allocation is being used, &lt;br /&gt;
and those people who are in charge in your group will be able to use &lt;br /&gt;
that information to manage the users, telling them to dial it down or &lt;br /&gt;
up.   We know that managing a large research group is hard, and we want &lt;br /&gt;
to make sure we provide you the information you need to do your job &lt;br /&gt;
effectively.&lt;br /&gt;
&lt;br /&gt;
One way for users within a group to manage their priorities within the group&lt;br /&gt;
is with [[Moab#Adjusting_Job_Priority | user-adjusted priorities]]; this is&lt;br /&gt;
described in more detail on the [[Moab | Scheduling System]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Errors in running jobs==&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== I couldn't find the  .o output file in the .pbs_spool directory as I used to ===&lt;br /&gt;
&lt;br /&gt;
On Feb 24 2011, the temporary location of standard input and output files was moved from the shared file system ${SCRATCH}/.pbs_spool to the&lt;br /&gt;
node-local directory /var/spool/torque/spool (which resides in ram). The final location after a job has finished is unchanged,&lt;br /&gt;
but to check the output/error of running jobs, users will now have to ssh into the (first) node assigned to the job and look in&lt;br /&gt;
/var/spool/torque/spool.&lt;br /&gt;
&lt;br /&gt;
This alleviates access contention to the temporary directory, especially for those users that are running a lot of jobs, and  reduces the burden on the file system in general.&lt;br /&gt;
&lt;br /&gt;
Note that it is good practice to redirect output to a file rather than to count on the scheduler to do this for you.&lt;br /&gt;
&lt;br /&gt;
=== My GPC job died, telling me `Copy Stageout Files Failed' ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
When a job runs on GPC, the script's standard output and error are redirected to &lt;br /&gt;
&amp;lt;tt&amp;gt;$PBS_JOBID.gpc-sched.OU&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$PBS_JOBID.gpc-sched.ER&amp;lt;/tt&amp;gt; in&lt;br /&gt;
/var/spool/torque/spool on the (first) node on which your job is running.  At the end of the job, those .OU and .ER files are copied to where the batch script tells them to be copied, by default &amp;lt;tt&amp;gt;$PBS_JOBNAME.o$PBS_JOBID&amp;lt;/tt&amp;gt; and&amp;lt;tt&amp;gt;$PBS_JOBNAME.e$PBS_JOBID&amp;lt;/tt&amp;gt;.   (You can set those filenames to be something clearer with the -e and -o options in your PBS script.)&lt;br /&gt;
&lt;br /&gt;
When you get errors like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An error has occurred processing your job, see below.&lt;br /&gt;
request to copy stageout files failed on node&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
it means that the copying back process has failed in some way.  There could be a few reasons for this. The first thing to '''make sure that your .bashrc does not produce any output''', as the output-stageout is performed by bash and further output can cause this to fail.&lt;br /&gt;
But it also could have just been a random filesystem error, or it  could be that your job failed spectacularly enough to shortcircuit the normal job-termination process (e.g. ran out of memory very quickly) and those files just never got copied.&lt;br /&gt;
&lt;br /&gt;
Write to [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;] if your input/output files got lost, as we will probably be able to retrieve them for you (please supply at least the jobid, and any other information that may be relevant). &lt;br /&gt;
&lt;br /&gt;
Mind you that it is good practice to redirect output to a file rather than depending on the job scheduler to do this for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Another transport will be used instead===&lt;br /&gt;
&lt;br /&gt;
I get error messages like the following when running on the GPC at the start of the run, although the job seems to proceed OK.   Is this a problem?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
[[45588,1],0]: A high-performance Open MPI point-to-point messaging module&lt;br /&gt;
was unable to find any relevant network interfaces:&lt;br /&gt;
&lt;br /&gt;
Module: OpenFabrics (openib)&lt;br /&gt;
  Host: gpc-f101n005&lt;br /&gt;
&lt;br /&gt;
Another transport will be used instead, although this may result in&lt;br /&gt;
lower performance.&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Everything's fine.   The two MPI libraries scinet provides work for both the InifiniBand and the Gigabit Ethernet interconnects, and will always try to use the fastest interconnect available.   In this case, you ran on normal gigabit GPC nodes with no infiniband; but the MPI libraries have no way of knowing this, and try the infiniband first anyway.  This is just a harmless `failover' message; it tried to use the infiniband, which doesn't exist on this node, then fell back on using Gigabit ethernet (`another transport').&lt;br /&gt;
&lt;br /&gt;
With OpenMPI, this can be avoided by not looking for infiniband; eg, by using the option&lt;br /&gt;
&lt;br /&gt;
--mca btl ^openib&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IB Memory Errors, eg &amp;lt;tt&amp;gt; reg_mr Cannot allocate memory &amp;lt;/tt&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Infiniband requires more memory than ethernet; it can use RDMA (remote direct memory access) transport for which it sets aside registered memory to transfer data.&lt;br /&gt;
&lt;br /&gt;
In our current network configuration, it requires a _lot_ more memory, particularly as you go to larger process counts; unfortunately, that means you can't get around the &amp;quot;I need more memory&amp;quot; problem the usual way, by running on more nodes.   Machines with different memory or &lt;br /&gt;
network configurations may exhibit this problem at higher or lower MPI &lt;br /&gt;
task counts.&lt;br /&gt;
&lt;br /&gt;
Right now, the best workaround is to reduce the number and size of OpenIB queues, using XRC: with the OpenMPI, add the following options to your mpirun command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-mca btl_openib_receive_queues X,128,256,192,128:X,2048,256,128,32:X,12288,256,128,32 -mca btl_openib_max_send_size 12288&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Intel MPI, you should be able to do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intelmpi/4.0.3.008&lt;br /&gt;
mpirun -genv I_MPI_FABRICS=shm:ofa  -genv I_MPI_OFA_USE_XRC=1 -genv I_MPI_OFA_DYNAMIC_QPS=1 -genv I_MPI_DEBUG=5 -np XX ./mycode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the same end.  &lt;br /&gt;
&lt;br /&gt;
For more information see [[GPC MPI Versions]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===My compute job fails, saying &amp;lt;tt&amp;gt;libpng12.so.0: cannot open shared object file&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;libjpeg.so.62: cannot open shared object file&amp;lt;/tt&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
To maximize the amount of memory available for compute jobs, the compute nodes have a less complete system image than the development nodes.   In particular, since interactive graphics libraries like matplotlib and gnuplot are usually used interactively, the libraries for their use are included in the devel nodes' image but not the compute nodes.&lt;br /&gt;
&lt;br /&gt;
Many of these extra libraries are, however, available in the &amp;quot;extras&amp;quot; module.   So adding a &amp;quot;module load extras&amp;quot; to your job submission  script - or, for overkill, to your .bashrc - should enable these scripts to run on the compute nodes.&lt;br /&gt;
&lt;br /&gt;
==Monitoring jobs in the queue==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Why hasn't my job started?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Use the moab command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
checkjob -v jobid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the last couple of lines should explain why a job hasn't started.  &lt;br /&gt;
&lt;br /&gt;
Please see [[Moab| Job Scheduling System (Moab) ]] for more detailed information&lt;br /&gt;
&lt;br /&gt;
===How do I figure out when my job will run?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please see [[Moab#Available_Resources| Job Scheduling System (Moab) ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ===My GPC job is Held, and checkjob says &amp;quot;Batch:PolicyViolation&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
When this happens, you'll see your job stuck in a BatchHold state.  &lt;br /&gt;
This happens because the job you've submitted breaks one of the rules of the queues, and is being held until you modify it or kill it and re-submit a conforming job.  The most common problems are:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Running checkjob on my job gives me messages about JobFail and rejected===&lt;br /&gt;
&lt;br /&gt;
Running checkjob on my job gives me messages that suggest my job has failed, as below: what did I do wrong?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AName: test&lt;br /&gt;
State: Idle &lt;br /&gt;
Creds:  user:xxxxxx  group:xxxxxxxx  account:xxxxxxxx  class:batch_ib  qos:ibqos&lt;br /&gt;
WallTime:   00:00:00 of 8:00:00&lt;br /&gt;
BecameEligible: Wed Jul 23 10:39:27&lt;br /&gt;
SubmitTime: Wed Jul 23 10:38:22&lt;br /&gt;
  (Time Queued  Total: 00:01:47  Eligible: 00:01:05)&lt;br /&gt;
&lt;br /&gt;
Total Requested Tasks: 8&lt;br /&gt;
&lt;br /&gt;
Req[0]  TaskCount: 8  Partition: ALL  &lt;br /&gt;
Opsys: centos6computeA  Arch: ---  Features: ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notification Events: JobFail&lt;br /&gt;
&lt;br /&gt;
IWD:            /scratch/x/xxxxxxxx/xxxxxxx/xxxxxxx&lt;br /&gt;
Partition List: torque,DDR&lt;br /&gt;
Flags:          RESTARTABLE&lt;br /&gt;
Attr:           checkpoint&lt;br /&gt;
StartPriority:  76&lt;br /&gt;
rejected for Opsys        - (null)&lt;br /&gt;
rejected for State        - (null)&lt;br /&gt;
rejected for Reserved     - (null)&lt;br /&gt;
NOTE:  job req cannot run in partition torque (available procs do not meet requirements : 0 of 8 procs found)&lt;br /&gt;
idle procs: 793  feasible procs:   0&lt;br /&gt;
&lt;br /&gt;
Node Rejection Summary: [Opsys: 117][State: 2895][Reserved: 19]&lt;br /&gt;
&lt;br /&gt;
NOTE:  job violates constraints for partition SANDY (partition SANDY not in job partition mask)&lt;br /&gt;
&lt;br /&gt;
NOTE:  job violates constraints for partition GRAVITY (partition GRAVITY not in job partition mask)&lt;br /&gt;
&lt;br /&gt;
rejected for State        - (null)&lt;br /&gt;
NOTE:  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
The output from check job is a little cryptic in places, and if you are wondering why your job hasn't started yet, you might think that &amp;quot;rejection&amp;quot; and &amp;quot;JobFail&amp;quot; suggest that there's something wrong.  But the above message is actually normal; you can use the &amp;lt;tt&amp;gt;showstart&amp;lt;/tt&amp;gt; command on your job to get a (preliminary, subject to change) estimate as to when the job will start, and you'll find that it is in fact scheduled to start up in the near future.&lt;br /&gt;
&lt;br /&gt;
In the above message:&lt;br /&gt;
&lt;br /&gt;
* `Notification Events: JobFail` just means that, if notifications are enabled, you'll get a message if the job fails;&lt;br /&gt;
* `job req cannot run in partition torque` just means that the job cannot run just yet (that's why it's queued);&lt;br /&gt;
* `job req cannot run in dynamic partition DDR now (insufficient procs available: 0 &amp;lt; 8)` says why: there aren't processors available; and&lt;br /&gt;
* `job violates constraints for partition SANDY/GRAVITY` just means that the job isn't eligable to run in those paritcular (small) sections of the cluster.&lt;br /&gt;
&lt;br /&gt;
that is, the above output is the normal and expected (if somewhat cryptic) explanation as to why the job is waiting - nothing to worry about.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How can I monitor my running jobs on TCS?===&lt;br /&gt;
&lt;br /&gt;
How can I monitor the load of TCS jobs?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
You can get more information with the command &lt;br /&gt;
 /xcat/tools/tcs-scripts/LL/jobState.sh&lt;br /&gt;
which I alias as:&lt;br /&gt;
 alias llq1='/xcat/tools/tcs-scripts/LL/jobState.sh'&lt;br /&gt;
If you run &amp;quot;llq1 -n&amp;quot; you will see a listing of jobs together with a lot of information, including the load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How can I check the memory usage from my jobs?===&lt;br /&gt;
&lt;br /&gt;
How can I check the memory usage from my jobs?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
In many occasions it can be really useful to take a look at how much memory your job is using while it is running.&lt;br /&gt;
There a couple of ways to do so:&lt;br /&gt;
&lt;br /&gt;
1) using some of the [https://wiki.scinet.utoronto.ca/wiki/index.php/SciNet_Command_Line_Utilities command line utilities] we have developed, e.g: by using the '''jobperf''' or '''jobtop''' utilities, it will allow you to check the job performance and head's node utilization respectively.&lt;br /&gt;
&lt;br /&gt;
2) ''ssh'' into the nodes where your job is being run and check for memory usage and system stats right there. For instance, trying the 'top' or 'free' commands, in those nodes.&lt;br /&gt;
&lt;br /&gt;
Also, it always a good a idea and strongly encouraged to inspect the standard output-log and error-log generated for your job submissions.&lt;br /&gt;
These files are named respectively: ''JobName.{o|e}jobIdNumber''; where ''JobName'' is the name you gave to the job (via the '-N' PBS flag) and ''JobIdNumber'' is the id number of the job.&lt;br /&gt;
These files are saved in the working directory after the job is finished, but they can be also accessed on real-time using the '''jobError''' and '''jobOutput''' [https://wiki.scinet.utoronto.ca/wiki/index.php/SciNet_Command_Line_Utilities command line utilities] available loading the ''extras'' module.&lt;br /&gt;
&lt;br /&gt;
Other related topics to memory usage: &amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/GPC_Quickstart#Ram_Disk Using Ram Disk]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/GPC_Quickstart#Memory_Configuration Different Memory Configuration nodes]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/FAQ#Monitoring_jobs_in_the_queue Monitoring Jobs in the Queue]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/images/a/a0/TechTalkJobMonitoring.pdf Tech Talk on Monitoring Jobs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Can I run cron jobs on devel nodes to monitor my jobs?===&lt;br /&gt;
&lt;br /&gt;
Can I run cron jobs on devel nodes to monitor my jobs?&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
No, we do not permit cron jobs to be run by users.  To monitor the status of your jobs using a cron job running on your own machine, use the command&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh myusername@login.scinet.utoronto.ca &amp;quot;qstat -u myusername&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or some variation of this command.  Of course, you will need to have SSH keys setup on the machine running the cron job, so that password entry won't be necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How does one check the amount of used CPU-hours in a project, and how does one get statistics for each user in the project? ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
This information is available on the scinet portal,https://portal.scinet.utoronto.ca, See also [[SciNet Usage Reports]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Errors in running jobs==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===On GPC, `Job cannot be executed'===&lt;br /&gt;
&lt;br /&gt;
I get error messages like this trying to run on GPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PBS Job Id: 30414.gpc-sched&lt;br /&gt;
Job Name:   namd&lt;br /&gt;
Exec host:  gpc-f120n011/7+gpc-f120n011/6+gpc-f120n011/5+gpc-f120n011/4+gpc-f120n011/3+gpc-f120n011/2+gpc-f120n011/1+gpc-f120n011/0&lt;br /&gt;
Aborted by PBS Server &lt;br /&gt;
Job cannot be executed&lt;br /&gt;
See Administrator for help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PBS Job Id: 30414.gpc-sched&lt;br /&gt;
Job Name:   namd&lt;br /&gt;
Exec host:  gpc-f120n011/7+gpc-f120n011/6+gpc-f120n011/5+gpc-f120n011/4+gpc-f120n011/3+gpc-f120n011/2+gpc-f120n011/1+gpc-f120n011/0&lt;br /&gt;
An error has occurred processing your job, see below.&lt;br /&gt;
request to copy stageout files failed on node 'gpc-f120n011/7+gpc-f120n011/6+gpc-f120n011/5+gpc-f120n011/4+gpc-f120n011/3+gpc-f120n011/2+gpc-f120n011/1+gpc-f120n011/0' for job 30414.gpc-sched&lt;br /&gt;
&lt;br /&gt;
Unable to copy file 30414.gpc-sched.OU to USER@gpc-f101n084.scinet.local:/scratch/G/GROUP/USER/projects/sim-performance-test/runtime/l/namd/8/namd.o30414&lt;br /&gt;
*** error from copy&lt;br /&gt;
30414.gpc-sched.OU: No such file or directory&lt;br /&gt;
*** end error output&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Try doing the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ${SCRATCH}/.pbs_spool&lt;br /&gt;
ln -s ${SCRATCH}/.pbs_spool ~/.pbs_spool&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is how all new accounts are setup on SciNet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; on GPC for compute jobs is mounted as a read-only file system.   &lt;br /&gt;
PBS by default tries to spool its output  files to &amp;lt;tt&amp;gt;${HOME}/.pbs_spool&amp;lt;/tt&amp;gt;&lt;br /&gt;
which fails as it tries to write to a read-only file  &lt;br /&gt;
system.    New accounts at SciNet  get around this by having ${HOME}/.pbs_spool  &lt;br /&gt;
point to somewhere appropriate on &amp;lt;tt&amp;gt;/scratch&amp;lt;/tt&amp;gt;, but if you've deleted that link&lt;br /&gt;
or directory, or had an old account, you will see errors like the above.&lt;br /&gt;
&lt;br /&gt;
'''On Feb 24, the input/output mechanism has been reconfigured to use a local ramdisk as the temporary location, which means that .pbs_spool is no longer needed and this error should not occur anymore.'''&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== I couldn't find the  .o output file in the .pbs_spool directory as I used to ===&lt;br /&gt;
&lt;br /&gt;
On Feb 24 2011, the temporary location of standard input and output files was moved from the shared file system ${SCRATCH}/.pbs_spool to the&lt;br /&gt;
node-local directory /var/spool/torque/spool (which resides in ram). The final location after a job has finished is unchanged,&lt;br /&gt;
but to check the output/error of running jobs, users will now have to ssh into the (first) node assigned to the job and look in&lt;br /&gt;
/var/spool/torque/spool.&lt;br /&gt;
&lt;br /&gt;
This alleviates access contention to the temporary directory, especially for those users that are running a lot of jobs, and  reduces the burden on the file system in general.&lt;br /&gt;
&lt;br /&gt;
Note that it is good practice to redirect output to a file rather than to count on the scheduler to do this for you.&lt;br /&gt;
&lt;br /&gt;
=== My GPC job died, telling me `Copy Stageout Files Failed' ===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
When a job runs on GPC, the script's standard output and error are redirected to &lt;br /&gt;
&amp;lt;tt&amp;gt;$PBS_JOBID.gpc-sched.OU&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$PBS_JOBID.gpc-sched.ER&amp;lt;/tt&amp;gt; in&lt;br /&gt;
/var/spool/torque/spool on the (first) node on which your job is running.  At the end of the job, those .OU and .ER files are copied to where the batch script tells them to be copied, by default &amp;lt;tt&amp;gt;$PBS_JOBNAME.o$PBS_JOBID&amp;lt;/tt&amp;gt; and&amp;lt;tt&amp;gt;$PBS_JOBNAME.e$PBS_JOBID&amp;lt;/tt&amp;gt;.   (You can set those filenames to be something clearer with the -e and -o options in your PBS script.)&lt;br /&gt;
&lt;br /&gt;
When you get errors like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An error has occurred processing your job, see below.&lt;br /&gt;
request to copy stageout files failed on node&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
it means that the copying back process has failed in some way.  There could be a few reasons for this. The first thing to '''make sure that your .bashrc does not produce any output''', as the output-stageout is performed by bash and further output can cause this to fail.&lt;br /&gt;
But it also could have just been a random filesystem error, or it  could be that your job failed spectacularly enough to shortcircuit the normal job-termination process (e.g. ran out of memory very quickly) and those files just never got copied.&lt;br /&gt;
&lt;br /&gt;
Write to [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;] if your input/output files got lost, as we will probably be able to retrieve them for you (please supply at least the jobid, and any other information that may be relevant). &lt;br /&gt;
&lt;br /&gt;
Mind you that it is good practice to redirect output to a file rather than depending on the job scheduler to do this for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Another transport will be used instead===&lt;br /&gt;
&lt;br /&gt;
I get error messages like the following when running on the GPC at the start of the run, although the job seems to proceed OK.   Is this a problem?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
[[45588,1],0]: A high-performance Open MPI point-to-point messaging module&lt;br /&gt;
was unable to find any relevant network interfaces:&lt;br /&gt;
&lt;br /&gt;
Module: OpenFabrics (openib)&lt;br /&gt;
  Host: gpc-f101n005&lt;br /&gt;
&lt;br /&gt;
Another transport will be used instead, although this may result in&lt;br /&gt;
lower performance.&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Everything's fine.   The two MPI libraries scinet provides work for both the InifiniBand and the Gigabit Ethernet interconnects, and will always try to use the fastest interconnect available.   In this case, you ran on normal gigabit GPC nodes with no infiniband; but the MPI libraries have no way of knowing this, and try the infiniband first anyway.  This is just a harmless `failover' message; it tried to use the infiniband, which doesn't exist on this node, then fell back on using Gigabit ethernet (`another transport').&lt;br /&gt;
&lt;br /&gt;
With OpenMPI, this can be avoided by not looking for infiniband; eg, by using the option&lt;br /&gt;
&lt;br /&gt;
--mca btl ^openib&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IB Memory Errors, eg &amp;lt;tt&amp;gt; reg_mr Cannot allocate memory &amp;lt;/tt&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Infiniband requires more memory than ethernet; it can use RDMA (remote direct memory access) transport for which it sets aside registered memory to transfer data.&lt;br /&gt;
&lt;br /&gt;
In our current network configuration, it requires a _lot_ more memory, particularly as you go to larger process counts; unfortunately, that means you can't get around the &amp;quot;I need more memory&amp;quot; problem the usual way, by running on more nodes.   Machines with different memory or &lt;br /&gt;
network configurations may exhibit this problem at higher or lower MPI &lt;br /&gt;
task counts.&lt;br /&gt;
&lt;br /&gt;
Right now, the best workaround is to reduce the number and size of OpenIB queues, using XRC: with the OpenMPI, add the following options to your mpirun command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-mca btl_openib_receive_queues X,128,256,192,128:X,2048,256,128,32:X,12288,256,128,32 -mca btl_openib_max_send_size 12288&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Intel MPI, you should be able to do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intelmpi/4.0.3.008&lt;br /&gt;
mpirun -genv I_MPI_FABRICS=shm:ofa  -genv I_MPI_OFA_USE_XRC=1 -genv I_MPI_OFA_DYNAMIC_QPS=1 -genv I_MPI_DEBUG=5 -np XX ./mycode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the same end.  &lt;br /&gt;
&lt;br /&gt;
For more information see [[GPC MPI Versions]].&lt;br /&gt;
&lt;br /&gt;
===My compute job fails, saying &amp;lt;tt&amp;gt;libpng12.so.0: cannot open shared object file&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;libjpeg.so.62: cannot open shared object file&amp;lt;/tt&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
To maximize the amount of memory available for compute jobs, the compute nodes have a less complete system image than the development nodes.   In particular, since interactive graphics libraries like matplotlib and gnuplot are usually used interactively, the libraries for their use are included in the devel nodes' image but not the compute nodes.&lt;br /&gt;
&lt;br /&gt;
Many of these extra libraries are, however, available in the &amp;quot;extras&amp;quot; module.   So adding a &amp;quot;module load extras&amp;quot; to your job submission  script - or, for overkill, to your .bashrc - should enable these scripts to run on the compute nodes.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data on SciNet disks==&lt;br /&gt;
&lt;br /&gt;
===How do I find out my disk usage?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
The standard unix/linux utilities for finding the amount of disk space used by a directory are very slow, and notoriously inefficient on the GPFS filesystems that we run on the SciNet systems.  There are utilities that very quickly report your disk usage:&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;'''diskUsage'''&amp;lt;/tt&amp;gt; command, available with the 'extras' module on the login nodes, datamovers and the GPC devel nodes, provides information in a number of ways on the home, scratch, and project file systems. For instance, how much disk space is being used by yourself and your group (with the -a option), or how much your usage has changed over a certain period (&amp;quot;delta information&amp;quot;) or you may generate plots of your usage over time.&lt;br /&gt;
This information is only updated hourly!&lt;br /&gt;
&lt;br /&gt;
More information about these filesystems is available at the [[Data_Management | Data_Management]].&lt;br /&gt;
&lt;br /&gt;
===How do I transfer data to/from SciNet?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
All incoming connections to SciNet go through relatively low-speed connections to the &amp;lt;tt&amp;gt;login.scinet&amp;lt;/tt&amp;gt; gateways, so using scp to copy files the same way you ssh in is not an effective way to move lots of data.  Better tools are described in our page on [[Data_Management#Data_Transfer | Data Transfer]].&lt;br /&gt;
&lt;br /&gt;
===My group works with data files of size 1-2 GB.  Is this too large to  transfer by scp to login.scinet.utoronto.ca ?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Generally, occasion transfers of data less than 10GB is perfectly acceptible to so through the login nodes. See [[Data_Management#Data_Transfer | Data Transfer]].&lt;br /&gt;
&lt;br /&gt;
===How can I check if I have files in /scratch that are scheduled for automatic deletion?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please see [[Storage_Quickstart#Scratch_Disk_Purging_Policy | Storage At SciNet]]&lt;br /&gt;
&lt;br /&gt;
===How to allow my supervisor to manage files for me using ACL-based commands?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
&lt;br /&gt;
Please see [[Data_Management#File.2FOwnership_Management_.28ACL.29 | File/Ownership Management]]&lt;br /&gt;
&lt;br /&gt;
===Can we buy extra storage space on SciNet?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
Yes, please see [[Data_Management#Buying_storage_space_on_GPFS_or_HPSS | Buying storage space on GPFS or HPSS ]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Can I transfer files between BGQ and HPSS?===&lt;br /&gt;
&lt;br /&gt;
'''Answer:'''&lt;br /&gt;
Yes, please see [https://support.scinet.utoronto.ca/wiki/index.php/BGQ#Bridge_to_HPSS Bridge to HPSS ]  for more details.&lt;br /&gt;
&lt;br /&gt;
==Keep 'em Coming!==&lt;br /&gt;
&lt;br /&gt;
===Next question, please===&lt;br /&gt;
&lt;br /&gt;
Send your question to [mailto:support@scinet.utoronto.ca &amp;lt;support@scinet.utoronto.ca&amp;gt;];  we'll answer it asap!&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Knowledge_Base:_Tutorials_and_Manuals&amp;diff=9382</id>
		<title>Knowledge Base: Tutorials and Manuals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Knowledge_Base:_Tutorials_and_Manuals&amp;diff=9382"/>
		<updated>2018-08-09T17:30:23Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. The links below may still contain valuable information, but for current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Training material=&lt;br /&gt;
&lt;br /&gt;
For upcoming classes, see our [https://support.scinet.utoronto.ca/education/ Training and Education website]!&lt;br /&gt;
==SciNet Basics==&lt;br /&gt;
* [[Media:SciNet_Tutorial.pdf|SciNet User Tutorial]]&lt;br /&gt;
* [[SciNet Command Line Utilities]]&lt;br /&gt;
* Intro to SciNet May 2014: [http://support.scinet.utoronto.ca/CourseVideo/SciNetIntroMay2014/IntroMay2014.html Video]/[[Media:IntroScinetMay2014.pdf|Slides]]&lt;br /&gt;
* SciNet Resources: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Monday_Morning_SciNet_Resources/Monday_Morning_SciNet_Resources.mp4 Video]/ [[Media:Monday_Morning_SciNet_Resources.pdf|Slides]] &lt;br /&gt;
* [[Essentials]]&lt;br /&gt;
* [[FAQ|Frequenty asked questions]]&lt;br /&gt;
* [[Ssh]]&lt;br /&gt;
* [[GPC_Quickstart|GPC quickstart]]&lt;br /&gt;
* [[TCS_Quickstart|TCS quickstart]]&lt;br /&gt;
* [[GPU_Devel_Nodes|ARC/GPU quickstart]]&lt;br /&gt;
* [[Cell_Devel_Nodes|ARC/Cell quickstart]]&lt;br /&gt;
* [[Important .bashrc guidelines]]&lt;br /&gt;
* [[Media:LargeScaleBio.pdf‎|Workflow Optimization (w/focus on Large Scale BioInformatics)]]&lt;br /&gt;
* [[Software_and_Libraries | Software and libraries]]&lt;br /&gt;
* [[Installing your own modules]]&lt;br /&gt;
* [[Media:SNUGlocalsetup.pdf|User-space modules and packages (April 2011 SNUG TechTalk)]]&lt;br /&gt;
* [[Media:HPSS_rationale.pdf|HPSS - SciNet's storage capacity expansion]]&lt;br /&gt;
* BGQ Hardware Overview [https://support.scinet.utoronto.ca/~northrup/bgqhardware.pdf Slides ]/ [https://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqhardware/bgqhardware.mp4 Video Recording ]&lt;br /&gt;
* Intro to Using the BGQ [[Media:Bgqintro.pdf|Slides ]]/[https://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqintro/bgqintro.mp4 Video Recording ]&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
* [http://www.ee.surrey.ac.uk/Teaching/Unix/index.html Linux Tutorial] (warning: the last part of this tutorial is specific to the csh shell, whereas SciNet uses the bash shell).&lt;br /&gt;
* Linux Command Line: A Primer (June 2012) [[Media:SS_IntroToShell.pdf|Slides,]] [[Media:SS_IntroToShell.tgz|Files]]&lt;br /&gt;
* Introduction to the Linux Shell, SciNet, Mar 2012: [[Media:IntroToShell.pdf|Slides]] and [[Media:Shell-data.tgz|Data files]]&lt;br /&gt;
&lt;br /&gt;
==Batch job management==&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/183/file_storage/index.php/download/1/files%5B%5D/3702/ Job and Queue Management Tools] (Techtalk Mar.11, 2015)&lt;br /&gt;
* [[Media:LargeScaleBio.pdf‎|Workflow Optimization (w/focus on Large Scale BioInformatics)]]&lt;br /&gt;
* [[Media:Tech-talk-gnu-parallel.pdf|GNU Parallel (Techtalk Nov 14, 2012)]]&lt;br /&gt;
* [[Media:TechTalkJobMonitoring.pdf|Job Monitoring on SciNet and Job Efficiency]]&lt;br /&gt;
&amp;lt;!-- * [[Media:Snugtrackjob.pdf|Job Monitoring on SciNet and Job Efficiency]] --&amp;gt;&lt;br /&gt;
* [[Wallclock time]]&lt;br /&gt;
* [[Checkpoints]]&lt;br /&gt;
* [[Using_Signals|Signals]]&lt;br /&gt;
* [[Moab]]&lt;br /&gt;
* [[User_Serial|Serial Jobs (including GNU Parallel)]]&lt;br /&gt;
* [[User_Ramdisk|Ramdisk]]&lt;br /&gt;
* [http://www.clusterresources.com/products/mwm/docs/index.shtml Moab workload manager]&lt;br /&gt;
* [http://www.clusterresources.com/products/mwm/docs/a.gcommandoverview.shtml Moab commands]&lt;br /&gt;
* [http://www.clusterresources.com/products/torque/docs/ Torque resource manager] &lt;br /&gt;
* [http://www.clusterresources.com/products/torque/docs/a.acommands.shtml Torque PBS commands]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/PE5.1-operationanduse.pdf Parallel environment]&lt;br /&gt;
* [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp Cluster information center] (with error codes)&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/LL-usingandadministering.pdf LoadLeveler: using &amp;amp; administering]&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
===General===&lt;br /&gt;
* [[Media:SciDev-XLCompilers.pdf|Performance Tuning with the IBM XL Compilers]]: Slides fromt the SciNet Develop Seminar by Kit Barton, Sep 17, 2012.&lt;br /&gt;
* [[Media:Remotescinet.pdf‎|Remote Development]], slides from TechTalk Jun 13, 2012&lt;br /&gt;
* [[Scientific Software Development Course]], part I of the SciNet's Scientific Computing Course&lt;br /&gt;
* [http://software-carpentry.org Software Carpentry Resources]&lt;br /&gt;
* Version Control: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Thursday_Morning_BP_Revision_Control/Thursday_Morning_BP_Revision_Control.mp4 Video]/ [[Media:Snug_techtalk_revcontrol.pdf | Slides]]&lt;br /&gt;
* [[IBM_Nov_Workshop | IBM AIX Workshop, SciNet, Nov 2008 ]] &lt;br /&gt;
* [[IBM_Compiler_Workshop | IBM Compiler Workshop, SciNet, Feb 2009]]&lt;br /&gt;
* SNUG Techtalk Dec 2011 [[Media:Snug_techtalk_compiler.pdf | Intel Compiler Optimizations]]&lt;br /&gt;
&lt;br /&gt;
===Fortran===&lt;br /&gt;
* Modern Fortran Course (1 day), SciNet, 19 Apr 2011&lt;br /&gt;
** [[Media:ModernFortran.pdf | Slides]]&lt;br /&gt;
** [[Media:ModernFortran.tgz | Source Code]]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/compilerp* [http://support.scinet.utoronto.ca/Manuals/xlf-compiler.pdf IBM Fortran compiler] [http://support.scinet.utoronto.ca/Manuals/xlf-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlf-proguide.pdf optimization]&lt;br /&gt;
&lt;br /&gt;
===C++===&lt;br /&gt;
* [[Media:Cpp11.pdf|Slides]] and [http://support.scinet.utoronto.ca/CourseVideo/Cpp11/cpp11.html recording] of the SciNet Developer Seminar on C++11, March 20, 2013&lt;br /&gt;
* Scientific C++ Course (1 day), SciNet, 15 March 2011 &lt;br /&gt;
** [[Media:Scientific-c%2B%2B.pdf|Slides]] (updated on Apr 26, 2012)&lt;br /&gt;
** [[Media:Scinetcppexamples.tgz|Example source code]]&lt;br /&gt;
** [[Videos_of_the_One-Day_Scientific_C%2B%2B_Class | Videos of the Scientific C++ class]] &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/index.htm Intel C &amp;amp; C++ compiler]&lt;br /&gt;
ro/en-us/fortran/lin/compiler_f/index.htm Intel Fortran compiler]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlC++-compiler.pdf IBM C++ compiler], [http://support.scinet.utoronto.ca/Manuals/xlC++-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlC++-proguide.pdf optimization]&lt;br /&gt;
&lt;br /&gt;
===C===&lt;br /&gt;
* C refresher: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Monday_Morning_C_Review/Monday_Morning_C_Review.mp4 Video]/ [[Media:Monday_Morning_C_Review.pdf| Slides]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlc-compiler.pdf IBM C compiler], [http://support.scinet.utoronto.ca/Manuals/xlc-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlc-proguide.pdf optimization]&lt;br /&gt;
&lt;br /&gt;
===Cilk Plus===&lt;br /&gt;
* [[Media:TechTalkSzalwinskiCilkPlus.pdf|CilkPlus - Getting Started]] (slides of the May 2014 TechTalk by Chris Szalwinski)&lt;br /&gt;
&lt;br /&gt;
===Hadoop===&lt;br /&gt;
* Introduction to Hadoop for HPCers, Part I - MapReduce: [[Media:Hadoop-PartI.pdf|Slides]], [[Media:HadoopPart1examples.tgz|Source Code]], [http://support.scinet.utoronto.ca/~ljdursi/SciNetHadoopVM.zip Virtual Machine]&lt;br /&gt;
&lt;br /&gt;
===Perl===&lt;br /&gt;
* [[Perl]]&lt;br /&gt;
===Python===&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[IPython Notebook on GPC]] (January 2014 TechTalk)&lt;br /&gt;
* [[Research Computing with Python]] (Modular Course, Fall 2013)&lt;br /&gt;
* [[Intro to Tkinter|Python GUIs with Python and TkInter]] [[Media:Tkinter.pdf|slides]] [[Media:Tkinter_code.tgz|code]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Snug/scinet-f2py/scinet-f2py.html f2py: Fortran and Python] (June 2011 TechTalk by Pierre de Buyl)&lt;br /&gt;
&lt;br /&gt;
===R===&lt;br /&gt;
* [[R Statistical Package]]&lt;br /&gt;
===Lua===&lt;br /&gt;
* [[Media:PeterColberg_Lua_scinet.pdf | Scripting HALMD with Lua and Luabind]] (May 2011 TechTalk by Peter Colberg)&lt;br /&gt;
&lt;br /&gt;
==Parallel Programming==&lt;br /&gt;
* [[2014 Ontario Summerschool on High Performance Computing Central]] (incl. OpenMP and MPI)&lt;br /&gt;
* [[High Performance Scientific Computing Course 2014]] (OpenMP and MPI, with video recordings of lectures)&lt;br /&gt;
* [[Media:SciNet_MPI3.0_seminar.pdf | MPI 3 Developer Seminar]]&lt;br /&gt;
* [[Media:Ds-openmp.pdf| OpenMP 4 Developer Seminar]]&lt;br /&gt;
* [[Ontario Summerschool on High Performance Computing Central]] (2013)&lt;br /&gt;
* [[High Performance Scientific Computing]], part 3 of SciNet's Scientific Computing Course (Winter 2012)&lt;br /&gt;
* Parallel Programming Course (5 days), SciNet, May 2011&lt;br /&gt;
** [[Parallel_Scientific_Computing_-_May_2011 | Videos, slides and code]]&lt;br /&gt;
* Parallel Computing for Computational Fluid Dynamics (CFD), SciNet, 23 March 2011&lt;br /&gt;
** [[Media:parCFD-mpi.pdf | Slides]]&lt;br /&gt;
** [[Media:parCFD.tgz | Source Code]]&lt;br /&gt;
* Intro to Practical Parallel Programming (1 day), SciNet, 22 Sept 2010: &lt;br /&gt;
**[[Media:PPP-Intro-Morning.pdf|Morning Slides, Intro and OpenMP ]]&lt;br /&gt;
**[[Media:PPP-Intro-Afternoon.pdf|Afternoon Slides, MPI]]&lt;br /&gt;
**[[Media:Intro-ppp.tgz|Example source code]]&lt;br /&gt;
* Parallel Scientific Computing Workshop (5 days), SciNet, Aug 2009: &lt;br /&gt;
**[[ Parallel_Scientific_Computing_-_Aug_09 | Slides ]]&lt;br /&gt;
**[http://www.cita.utoronto.ca/~ljdursi/PSP/ Video]&lt;br /&gt;
* [http://www.vscse.org/  Virtual School for CSE] Web courses (Jul/Aug 2010):&lt;br /&gt;
** Petascale programming environments and tools&lt;br /&gt;
** Big data for science&lt;br /&gt;
** Proven algorithmic techniques for many-core processors&lt;br /&gt;
* [https://computing.llnl.gov/tutorials/mpi/ LLNL MPI Tutorial]: This was the basis for the MPI workshop at SciNet. &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mpi/linux/reference_manual.pdf Intel MPI library]&lt;br /&gt;
* [[GPC MPI Versions]]&lt;br /&gt;
* [[Co-array Fortran on the GPC]]&lt;br /&gt;
* [[IBM_Feb_Workshop | IBM MPI Workshop, SciNet, Feb 2009]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/UPC/compiler.pdf IBM UPC compiler], [http://support.scinet.utoronto.ca/Manuals/UPC/langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/UPC/upcopt.pdf optimization], [http://support.scinet.utoronto.ca/Manuals/UPC/standlib.pdf library], [http://support.scinet.utoronto.ca/Manuals/UPC/upcusersguide.pdf user's guide], [http://support.scinet.utoronto.ca/Manuals/UPC/proguide.pdf programmer's guide]&lt;br /&gt;
&lt;br /&gt;
==GPU Computing==&lt;br /&gt;
* 1-day &amp;quot;Introduction to GPGPU Programming with CUDA&amp;quot; Course (May 2015): [https://support.scinet.utoronto.ca/education/go.php/251/index.php/ib/1//p_course/251].&lt;br /&gt;
* 2-day &amp;quot;Programming GPUs with CUDA&amp;quot; Course (2015 Summer School): [https://wiki.scinet.utoronto.ca/wiki/index.php/2015_Ontario_Summer_School_for_High_Performance_Computing_Central#Programming_GPUs_with_CUDA]&lt;br /&gt;
* [[Media:SNUG_NOV_CUDA.pdf | New Features in CUDA 5 &amp;amp; 6, Nov. 2014]]&lt;br /&gt;
* [[Media:Westgrid_CUDA.pdf | Intro to GPU Computing Using CUDA]] (WestGrid Spring 2014 Seminar Series)&lt;br /&gt;
* 1.5 hour intro to CUDA, March 2013: [[Media:CUDA-Graphics-Intro-2013.pdf | Slides]] and [[Media:CUDA-Graphics-Intro-2013.tgz | Source Code]]&lt;br /&gt;
* [[CUDA_Minicourse_Fall_2012 | CITA/SciNet CUDA Minicourse, Fall 2012]]&lt;br /&gt;
* [[SciNet GPU Workshop July 2010]]&lt;br /&gt;
* Intro to GPGPU Programming: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Friday_Morning_GPGPU/Friday_Morning_GPGPU.mp4 Video]/ [[Media:Gpgpu.pdf | Slides]]&amp;lt;br /&amp;gt;(from 5 day parallel programming course at SciNet, May 2011)&lt;br /&gt;
* 1-day intro to GPGPU using CUDA Course (Aug 2011): [[Media:Intro-gpu.tgz | Source Code]], [[Media:IntroGPGPU-Aug2011.pdf | Slides]].&lt;br /&gt;
* [http://developer.nvidia.com/object/cuda_training.html  NVidia archived courses for GPGPU Programming]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiug.pdf PGI Compiler User's Guide]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiref.pdf PGI Compiler Reference Manual]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgifortref.pdf PGI Fortran reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgicudaforug.pdf PGI CUDA Fortran Programming Guide and Reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/openACC_gs.pdf PGI OpenACC Getting Started Guide]&lt;br /&gt;
&lt;br /&gt;
==Performance Tuning==&lt;br /&gt;
* [[Performance and Profiling Course, April 2013]]&lt;br /&gt;
* [[Introduction To Performance]]&lt;br /&gt;
* Performance tools for [[Performance_And_Debugging_Tools:_GPC | GPC ]] and [[Performance_And_Debugging_Tools:_TCS | TCS ]]&lt;br /&gt;
* Dec 2010 SNUG TechTalk: [[Media:ProfillingTechTalk-Dec2010.pdf | Profiling Tools on GPC]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/JUMP-AIX-POWER6-AppsPerformanceTuning-wp032008.pdf Performance tuning]&lt;br /&gt;
* [[Media:Mpi-tuning-parameters.pdf‎ | MPI Tuning Parameters]] - SNUG TechTalk, Feb 2012&lt;br /&gt;
* [http://cnx.org/content/col11136/latest/  High Performance Computing Book]&amp;lt;br /&amp;gt;Online version of an older O'Reilly book which covers the basics of (mostly serial) programming for performance.  Covers the most important issues today (such as cache) very clearly.&lt;br /&gt;
* [http://www.ece.cmu.edu/~franzf/papers/gttse07.pdf  How to Write Fast Numerical Code ]&amp;lt;br /&amp;gt;Good introduction to thinking about performance and cache.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* [[Parallel Debugging with DDT]]&lt;br /&gt;
* [[Media:SS_Debug.pdf|Debugging with GDB and DDT, half-day session at the Ontario HPC Summerschool 2012 Central&amp;lt;br&amp;gt;Slides]], [[Media:SS_Debug.tgz|Code]].&lt;br /&gt;
* [[Media:Snugdebug.pdf|TechTalk: Debuggers &amp;amp; Parallel Debugging on SciNet - gdb, ddd, padb], SciNet User Group Meeting, Nov 2010]]&amp;lt;br/ &amp;gt; [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Thursday_Morning_Debugging/Thursday_Morning_Debugging.mp4 Video]&lt;br /&gt;
* [http://www.allinea.com/downloads/userguide.pdf Allinea DDT (Distributed Debugging Tool) User Guide]&lt;br /&gt;
&lt;br /&gt;
==Math libraries (BLAS, LAPACK, FFT)==&lt;br /&gt;
* [[Media:MKLTechTalkMarch2012.pdf|Intel Math Kernel Library (MKL): An overview]] (TechTalk, March, 2012)&lt;br /&gt;
* [[Numerical Tools for Physical Scientists]], part 2 of SciNet's Scientific computing course, covers, random nubers, blas, lapack, fft, ...&lt;br /&gt;
* [[Media:FP_Consistency.pdf|Intel Compiler Floating Point Consistency]]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/lin/index.htm Math Kernel Library (MKL)] &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/vsl/vslnotes.pdf Math Kernel Library's Vector Statistical Library]&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Math Kernel Library link line advisor]&amp;lt;br/&amp;gt;($MKLPATH &amp;amp;rarr; ${MKLPATH} in makefiles)&lt;br /&gt;
* [http://publib.boulder.ibm.com/epubs/pdf/am501405.pdf ESSL high performance math library V4] ([http://publib.boulder.ibm.com/epubs/pdf/am601305.pdf V3])&lt;br /&gt;
* [http://publib.boulder.ibm.com/epubs/pdf/am601305.pdf Parallel ESSL high performance math library V3.3]&lt;br /&gt;
* [http://hal.inria.fr/inria-00576469 Linear Algebra Libraries] by Claire Mouton. 2009 INRIA Technical Report on existing linear algebra libraries for C++ (also here: [http://arxiv.org/abs/1103.3020])&lt;br /&gt;
&lt;br /&gt;
==I/O==&lt;br /&gt;
&lt;br /&gt;
* [[Media:NetCDF.pdf|Introduction to NetCDF4 binary files with Python, C++ and R (TechTalk March 2014)]]&lt;br /&gt;
* [[Using MySQL on the GPC]]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/19/content.php/cid/59/ Relational Database Basics]&lt;br /&gt;
* [[Media:SCIENCEDATA.pdf‎|Sep 2012 SNUG TechTalk: Science=Data]]&lt;br /&gt;
* [[Data_Management|Data management]]&lt;br /&gt;
* Intro to Parallel I/O, SciNet, Oct 6th, 2010: &lt;br /&gt;
**[[Media:Parallel_io_course.pdf‎|Morning &amp;amp; MPI-IO Slides]]&lt;br /&gt;
**[[Media:Netcdfhdf5.pdf|NetCDF/HDF5 Slides]]&lt;br /&gt;
**[[Media:ParIO.tgz|Source Code]].  &lt;br /&gt;
* Intro to Parallel I/O, SciNet, Feb, 2013 &lt;br /&gt;
** [http://support.scinet.utoronto.ca/CourseVideo/ParallelIOcourse/pario-intro/pario-intro.mp4 Video of the Introduction]&lt;br /&gt;
** [http://support.scinet.utoronto.ca/CourseVideo/ParallelIOcourse/pario-netcdfhdf5/pario-netcdfhdf5.mp4 Video of the parallel hdf5 and netcdf part] [[Media:Netcdfhdf5.pdf|NetCDF/HDF5 Slides]]&lt;br /&gt;
** [http://support.scinet.utoronto.ca/CourseVideo/ParallelIOcourse/pario-mpiio/pario-mpiio.mp4 Video of the MPI-IO part]&lt;br /&gt;
* Half-day HPCS2012 Parallel I/O tutorial, covering MPI-IO, HDF5, NetCDF, based on the above:  [[Media:ParIO-HPCS2012.pdf|slides (pdf)]] and [[Media:ParIO-HPCS2012.tgz|source code]].&lt;br /&gt;
* [[Media:Snugio.pdf|Sept 2010 SNUG TechTalk: Parallel File System and IO]] &amp;lt;br/ &amp;gt;[http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Friday_Morning_IO/Friday_Morning_IO.mp4 Video]&lt;br /&gt;
* [[File System and I/O dos and don'ts]]&lt;br /&gt;
* [[Media:40TB.pdf|So you have 40TB of Data]] -- an overview of things to consider with large data sets.&lt;br /&gt;
* [[Media:Adios-techtalk-may2012.pdf|May 2012 SNUG TechTalk: ADIOS for Parallel IO slides]] and [[Media:Adios-techtalk-may2012-src.tgz|source code]]&lt;br /&gt;
* [[hdf5_table|Writting / Reading a table in hdf5]]&lt;br /&gt;
* [[NetCDF_table|Writting / Reading a table in NetCDF]]&lt;br /&gt;
* Intro to Parallel I/O, SciNet, Sept 215&lt;br /&gt;
** MPI-IO [[Media:ParIO.MPIIO.2015.pdf |Slides]] and [[Media:ParIO.MPIIO.tar.gz | Sample codes]]&lt;br /&gt;
** [[Media:netcdf2015.pdf | NETCDF]] &amp;amp; [[Media:hfd5.pdf | HDF5]]&lt;br /&gt;
&lt;br /&gt;
==Infiniband Networking==&lt;br /&gt;
* [[Media:Snug_techtalk_Infiniband.pdf | TechTalk on SciNet's Infiniband Network &amp;amp; MPI options ]] &lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
* [[Using Paraview]]&lt;br /&gt;
* [[VNC|VNC on the GPC]] (see also [[Media:Ttvnc.pdf|slides of the TechTalk on VNC]])&lt;br /&gt;
* [[Software_and_Libraries#anchor_viz|Visualization Software on the GPC]]&lt;br /&gt;
* [https://wiki.scinet.utoronto.ca/wiki/images/5/51/Remoteviz.pdf Remote visualization (X-forwarding and VNC)]&lt;br /&gt;
* [[Using Paraview]]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/~mponce/ss2016/ss2016_visualization-I.pdf gnuplot, xmgrace, remote visualization tools (X-forwarding and VNC), python's matplotlib]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/~mponce/ss2016/ss2016_visualization-II.pdf  Brief overview of ParaView &amp;amp; VisIt]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/242/file_storage/index.php/download/1/files%5B%5D/6399/ VisIt Basics]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/273/file_storage/index.php/download/1/files%5B%5D/7363/ Scientific Visualization using VisIt (Basics and Advanced)], M.Ponce and A.Razoumov&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/get.php/8_ComplexNetworks.pdf Intro to Complex Networks Visualization, with Python]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://scienceillustrated.ca Science Illustrated:] Two-day symposium on Visualizing Science, Feb 2011&lt;br /&gt;
* [http://www.kmdi.utoronto.ca/story/2011/03/si-science-illustrated-symposium-success Videos of the talks given at Science Illustrated] (recorded by [http://www.kmdi.utoronto.ca KMDI] at [http://www.utoronto.ca UoT]):&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=94ff5cd5-be6e-4fc6-9be6-dd2222342bcd Opening remarks] by Paul Young&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=4255c34e-15e7-4b24-ba99-78f5c8fa4381 Information Visualization and the Myth of Information Overload] by Christopher Collins&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=adcf02bf-16cb-46cc-8cdc-1a65e9071d6b Beyond Basic Visualization] by Ramses Van Zon&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=47baf346-3599-4fa3-9b10-6a58faa6b33c Network Visualization &amp;amp;amp; Analysis] by Igor Jurisica&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=7e754a2e-7be5-476e-bb54-37def37bc07e Simulation and Visualization of Blood Flow] by David Steinman&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=d7622587-2c31-49c1-99d7-f0f16c078801 Scientific Visualizations: Does the Science Matter?] by Thomas Lucas&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=9963c637-6840-454f-a57f-9a1be6456616 How can visualization impact public perception of science?] Panelists: Jay Ingram, Peter Calamai, Reni Barlow, Hooley McLaughlin&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=88e50cff-db9b-4c71-b10d-781fec60a2c0 How Info Graphics are Created for the Mainstream Media] by Peter Calamai&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=3897e2a3-1fda-42be-ab78-edbab090fd9e Design Boot Camp] by Graham Huber&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=4c27ed76-7292-407e-83a6-814e1461eccd Visualization Large Datasets] by Jonathan Dursi&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=7d49c845-3937-44e2-a300-9b8ffe57a857 Visualizing Colliding Black Holes] by Herald Pfeiffer&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=7d7e4803-39cd-4c8e-a443-bc2a7b1b3c28 Closing remarks] by Mubdi Rahman&lt;br /&gt;
&lt;br /&gt;
==Applications==&lt;br /&gt;
{{:Knowledge Base: Applications}}&lt;br /&gt;
* See also [[User Codes]]&lt;br /&gt;
&lt;br /&gt;
== Development Systems ==&lt;br /&gt;
&lt;br /&gt;
=== KNL ===&lt;br /&gt;
&lt;br /&gt;
* SNUG TechTalk October 2016 -  [[Media:Snug_techtalk_KNL.pdf | Intel Xeon Phi Knights Landing  ]]&lt;br /&gt;
&lt;br /&gt;
=Manuals=&lt;br /&gt;
&lt;br /&gt;
==Intel compilers and libraries (GPC)==&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-lin/index.htm C &amp;amp; C++ compiler]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran-lin/index.htm Fortran compiler]&lt;br /&gt;
* [[Media:FP_Consistency.pdf|Intel Compiler Floating Point Consistency]]&lt;br /&gt;
* [[Media:Compiler_qrg12.pdf‎|Intel Compiler Optimization Guide]]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/lin/index.htm Math Kernel Library (MKL)] &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/vsl/vslnotes.pdf Math Kernel Library's Vector Statistical Library]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mpi/linux/reference_manual.pdf Intel MPI library]&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Math Kernel Library link line advisor]&amp;lt;br/&amp;gt;($MKLPATH &amp;amp;rarr; ${MKLPATH} in makefiles)&lt;br /&gt;
&lt;br /&gt;
==IBM compilers and libraries (TCS/P7)==&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlc-compiler.pdf C compiler], [http://support.scinet.utoronto.ca/Manuals/xlc-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlc-proguide.pdf optimization]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlC++-compiler.pdf C++ compiler], [http://support.scinet.utoronto.ca/Manuals/xlC++-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlC++-proguide.pdf optimization]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlf-compiler.pdf Fortran compiler] [http://support.scinet.utoronto.ca/Manuals/xlf-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlf-proguide.pdf optimization]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/UPC/compiler.pdf UPC compiler], [http://support.scinet.utoronto.ca/Manuals/UPC/langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/UPC/upcopt.pdf optimization], [http://support.scinet.utoronto.ca/Manuals/UPC/standlib.pdf library], [http://support.scinet.utoronto.ca/Manuals/UPC/upcusersguide.pdf user's guide], [http://support.scinet.utoronto.ca/Manuals/UPC/proguide.pdf programmer's guide]&lt;br /&gt;
* [http://publib.boulder.ibm.com/epubs/pdf/am501405.pdf ESSL high performance math library V4] ([http://publib.boulder.ibm.com/epubs/pdf/am601305.pdf V3])&lt;br /&gt;
* [[Media:essl51.pdf|ESSL high performance math library V5.1 for Linux on Power]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/JUMP-AIX-POWER6-AppsPerformanceTuning-wp032008.pdf Performance tuning]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/PE5.1-operationanduse.pdf Parallel environment]&lt;br /&gt;
* [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp Cluster information center] (with error codes)&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/LL-usingandadministering.pdf LoadLeveler: using &amp;amp; administering]&lt;br /&gt;
&lt;br /&gt;
==PGI compilers (ARC)==&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiug.pdf Compiler User's Guide]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiref.pdf Compiler Reference Manual]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgifortref.pdf Fortran reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgicudaforug.pdf CUDA Fortran Programming Guide and Reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/openACC_gs.pdf OpenACC Getting Started Guide]&amp;lt;br&amp;gt;(Note: $PGI/linux86-64/12.5/doc contains a newer version.)&lt;br /&gt;
&lt;br /&gt;
==Scheduler (Adaptive Computing/Cluster Resources)==&lt;br /&gt;
* [http://docs.adaptivecomputing.com/mwm/archive/7-0/help.htm Moab workload manager]&lt;br /&gt;
* [http://docs.adaptivecomputing.com/mwm/archive/7-0/Content/a.gcommandoverview.html Moab commands]&lt;br /&gt;
* [http://docs.adaptivecomputing.com/torque/archive/4-0-1/help.htm Torque resource manager] &lt;br /&gt;
* [http://docs.adaptivecomputing.com/torque/archive/4-0-1/help.htm#topics/12-appendices/commandsOverview.htm Torque PBS commands]&lt;br /&gt;
&lt;br /&gt;
==DDT Debugger (Allinea)==&lt;br /&gt;
* [http://www.allinea.com/downloads/userguide.pdf Distributed Debugging Tool User Guide]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Knowledge_Base:_Tutorials_and_Manuals&amp;diff=9381</id>
		<title>Knowledge Base: Tutorials and Manuals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Knowledge_Base:_Tutorials_and_Manuals&amp;diff=9381"/>
		<updated>2018-08-09T17:30:10Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX__&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. The links below may still contain valuable information, but for current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Training material=&lt;br /&gt;
&lt;br /&gt;
For upcoming classes, see our [https://support.scinet.utoronto.ca/education/ Training and Education website]!&lt;br /&gt;
==SciNet Basics==&lt;br /&gt;
* [[Media:SciNet_Tutorial.pdf|SciNet User Tutorial]]&lt;br /&gt;
* [[SciNet Command Line Utilities]]&lt;br /&gt;
* Intro to SciNet May 2014: [http://support.scinet.utoronto.ca/CourseVideo/SciNetIntroMay2014/IntroMay2014.html Video]/[[Media:IntroScinetMay2014.pdf|Slides]]&lt;br /&gt;
* SciNet Resources: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Monday_Morning_SciNet_Resources/Monday_Morning_SciNet_Resources.mp4 Video]/ [[Media:Monday_Morning_SciNet_Resources.pdf|Slides]] &lt;br /&gt;
* [[Essentials]]&lt;br /&gt;
* [[FAQ|Frequenty asked questions]]&lt;br /&gt;
* [[Ssh]]&lt;br /&gt;
* [[GPC_Quickstart|GPC quickstart]]&lt;br /&gt;
* [[TCS_Quickstart|TCS quickstart]]&lt;br /&gt;
* [[GPU_Devel_Nodes|ARC/GPU quickstart]]&lt;br /&gt;
* [[Cell_Devel_Nodes|ARC/Cell quickstart]]&lt;br /&gt;
* [[Important .bashrc guidelines]]&lt;br /&gt;
* [[Media:LargeScaleBio.pdf‎|Workflow Optimization (w/focus on Large Scale BioInformatics)]]&lt;br /&gt;
* [[Software_and_Libraries | Software and libraries]]&lt;br /&gt;
* [[Installing your own modules]]&lt;br /&gt;
* [[Media:SNUGlocalsetup.pdf|User-space modules and packages (April 2011 SNUG TechTalk)]]&lt;br /&gt;
* [[Media:HPSS_rationale.pdf|HPSS - SciNet's storage capacity expansion]]&lt;br /&gt;
* BGQ Hardware Overview [https://support.scinet.utoronto.ca/~northrup/bgqhardware.pdf Slides ]/ [https://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqhardware/bgqhardware.mp4 Video Recording ]&lt;br /&gt;
* Intro to Using the BGQ [[Media:Bgqintro.pdf|Slides ]]/[https://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqintro/bgqintro.mp4 Video Recording ]&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
* [http://www.ee.surrey.ac.uk/Teaching/Unix/index.html Linux Tutorial] (warning: the last part of this tutorial is specific to the csh shell, whereas SciNet uses the bash shell).&lt;br /&gt;
* Linux Command Line: A Primer (June 2012) [[Media:SS_IntroToShell.pdf|Slides,]] [[Media:SS_IntroToShell.tgz|Files]]&lt;br /&gt;
* Introduction to the Linux Shell, SciNet, Mar 2012: [[Media:IntroToShell.pdf|Slides]] and [[Media:Shell-data.tgz|Data files]]&lt;br /&gt;
&lt;br /&gt;
==Batch job management==&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/183/file_storage/index.php/download/1/files%5B%5D/3702/ Job and Queue Management Tools] (Techtalk Mar.11, 2015)&lt;br /&gt;
* [[Media:LargeScaleBio.pdf‎|Workflow Optimization (w/focus on Large Scale BioInformatics)]]&lt;br /&gt;
* [[Media:Tech-talk-gnu-parallel.pdf|GNU Parallel (Techtalk Nov 14, 2012)]]&lt;br /&gt;
* [[Media:TechTalkJobMonitoring.pdf|Job Monitoring on SciNet and Job Efficiency]]&lt;br /&gt;
&amp;lt;!-- * [[Media:Snugtrackjob.pdf|Job Monitoring on SciNet and Job Efficiency]] --&amp;gt;&lt;br /&gt;
* [[Wallclock time]]&lt;br /&gt;
* [[Checkpoints]]&lt;br /&gt;
* [[Using_Signals|Signals]]&lt;br /&gt;
* [[Moab]]&lt;br /&gt;
* [[User_Serial|Serial Jobs (including GNU Parallel)]]&lt;br /&gt;
* [[User_Ramdisk|Ramdisk]]&lt;br /&gt;
* [http://www.clusterresources.com/products/mwm/docs/index.shtml Moab workload manager]&lt;br /&gt;
* [http://www.clusterresources.com/products/mwm/docs/a.gcommandoverview.shtml Moab commands]&lt;br /&gt;
* [http://www.clusterresources.com/products/torque/docs/ Torque resource manager] &lt;br /&gt;
* [http://www.clusterresources.com/products/torque/docs/a.acommands.shtml Torque PBS commands]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/PE5.1-operationanduse.pdf Parallel environment]&lt;br /&gt;
* [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp Cluster information center] (with error codes)&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/LL-usingandadministering.pdf LoadLeveler: using &amp;amp; administering]&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
===General===&lt;br /&gt;
* [[Media:SciDev-XLCompilers.pdf|Performance Tuning with the IBM XL Compilers]]: Slides fromt the SciNet Develop Seminar by Kit Barton, Sep 17, 2012.&lt;br /&gt;
* [[Media:Remotescinet.pdf‎|Remote Development]], slides from TechTalk Jun 13, 2012&lt;br /&gt;
* [[Scientific Software Development Course]], part I of the SciNet's Scientific Computing Course&lt;br /&gt;
* [http://software-carpentry.org Software Carpentry Resources]&lt;br /&gt;
* Version Control: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Thursday_Morning_BP_Revision_Control/Thursday_Morning_BP_Revision_Control.mp4 Video]/ [[Media:Snug_techtalk_revcontrol.pdf | Slides]]&lt;br /&gt;
* [[IBM_Nov_Workshop | IBM AIX Workshop, SciNet, Nov 2008 ]] &lt;br /&gt;
* [[IBM_Compiler_Workshop | IBM Compiler Workshop, SciNet, Feb 2009]]&lt;br /&gt;
* SNUG Techtalk Dec 2011 [[Media:Snug_techtalk_compiler.pdf | Intel Compiler Optimizations]]&lt;br /&gt;
&lt;br /&gt;
===Fortran===&lt;br /&gt;
* Modern Fortran Course (1 day), SciNet, 19 Apr 2011&lt;br /&gt;
** [[Media:ModernFortran.pdf | Slides]]&lt;br /&gt;
** [[Media:ModernFortran.tgz | Source Code]]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/compilerp* [http://support.scinet.utoronto.ca/Manuals/xlf-compiler.pdf IBM Fortran compiler] [http://support.scinet.utoronto.ca/Manuals/xlf-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlf-proguide.pdf optimization]&lt;br /&gt;
&lt;br /&gt;
===C++===&lt;br /&gt;
* [[Media:Cpp11.pdf|Slides]] and [http://support.scinet.utoronto.ca/CourseVideo/Cpp11/cpp11.html recording] of the SciNet Developer Seminar on C++11, March 20, 2013&lt;br /&gt;
* Scientific C++ Course (1 day), SciNet, 15 March 2011 &lt;br /&gt;
** [[Media:Scientific-c%2B%2B.pdf|Slides]] (updated on Apr 26, 2012)&lt;br /&gt;
** [[Media:Scinetcppexamples.tgz|Example source code]]&lt;br /&gt;
** [[Videos_of_the_One-Day_Scientific_C%2B%2B_Class | Videos of the Scientific C++ class]] &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/index.htm Intel C &amp;amp; C++ compiler]&lt;br /&gt;
ro/en-us/fortran/lin/compiler_f/index.htm Intel Fortran compiler]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlC++-compiler.pdf IBM C++ compiler], [http://support.scinet.utoronto.ca/Manuals/xlC++-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlC++-proguide.pdf optimization]&lt;br /&gt;
&lt;br /&gt;
===C===&lt;br /&gt;
* C refresher: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Monday_Morning_C_Review/Monday_Morning_C_Review.mp4 Video]/ [[Media:Monday_Morning_C_Review.pdf| Slides]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlc-compiler.pdf IBM C compiler], [http://support.scinet.utoronto.ca/Manuals/xlc-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlc-proguide.pdf optimization]&lt;br /&gt;
&lt;br /&gt;
===Cilk Plus===&lt;br /&gt;
* [[Media:TechTalkSzalwinskiCilkPlus.pdf|CilkPlus - Getting Started]] (slides of the May 2014 TechTalk by Chris Szalwinski)&lt;br /&gt;
&lt;br /&gt;
===Hadoop===&lt;br /&gt;
* Introduction to Hadoop for HPCers, Part I - MapReduce: [[Media:Hadoop-PartI.pdf|Slides]], [[Media:HadoopPart1examples.tgz|Source Code]], [http://support.scinet.utoronto.ca/~ljdursi/SciNetHadoopVM.zip Virtual Machine]&lt;br /&gt;
&lt;br /&gt;
===Perl===&lt;br /&gt;
* [[Perl]]&lt;br /&gt;
===Python===&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[IPython Notebook on GPC]] (January 2014 TechTalk)&lt;br /&gt;
* [[Research Computing with Python]] (Modular Course, Fall 2013)&lt;br /&gt;
* [[Intro to Tkinter|Python GUIs with Python and TkInter]] [[Media:Tkinter.pdf|slides]] [[Media:Tkinter_code.tgz|code]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Snug/scinet-f2py/scinet-f2py.html f2py: Fortran and Python] (June 2011 TechTalk by Pierre de Buyl)&lt;br /&gt;
&lt;br /&gt;
===R===&lt;br /&gt;
* [[R Statistical Package]]&lt;br /&gt;
===Lua===&lt;br /&gt;
* [[Media:PeterColberg_Lua_scinet.pdf | Scripting HALMD with Lua and Luabind]] (May 2011 TechTalk by Peter Colberg)&lt;br /&gt;
&lt;br /&gt;
==Parallel Programming==&lt;br /&gt;
* [[2014 Ontario Summerschool on High Performance Computing Central]] (incl. OpenMP and MPI)&lt;br /&gt;
* [[High Performance Scientific Computing Course 2014]] (OpenMP and MPI, with video recordings of lectures)&lt;br /&gt;
* [[Media:SciNet_MPI3.0_seminar.pdf | MPI 3 Developer Seminar]]&lt;br /&gt;
* [[Media:Ds-openmp.pdf| OpenMP 4 Developer Seminar]]&lt;br /&gt;
* [[Ontario Summerschool on High Performance Computing Central]] (2013)&lt;br /&gt;
* [[High Performance Scientific Computing]], part 3 of SciNet's Scientific Computing Course (Winter 2012)&lt;br /&gt;
* Parallel Programming Course (5 days), SciNet, May 2011&lt;br /&gt;
** [[Parallel_Scientific_Computing_-_May_2011 | Videos, slides and code]]&lt;br /&gt;
* Parallel Computing for Computational Fluid Dynamics (CFD), SciNet, 23 March 2011&lt;br /&gt;
** [[Media:parCFD-mpi.pdf | Slides]]&lt;br /&gt;
** [[Media:parCFD.tgz | Source Code]]&lt;br /&gt;
* Intro to Practical Parallel Programming (1 day), SciNet, 22 Sept 2010: &lt;br /&gt;
**[[Media:PPP-Intro-Morning.pdf|Morning Slides, Intro and OpenMP ]]&lt;br /&gt;
**[[Media:PPP-Intro-Afternoon.pdf|Afternoon Slides, MPI]]&lt;br /&gt;
**[[Media:Intro-ppp.tgz|Example source code]]&lt;br /&gt;
* Parallel Scientific Computing Workshop (5 days), SciNet, Aug 2009: &lt;br /&gt;
**[[ Parallel_Scientific_Computing_-_Aug_09 | Slides ]]&lt;br /&gt;
**[http://www.cita.utoronto.ca/~ljdursi/PSP/ Video]&lt;br /&gt;
* [http://www.vscse.org/  Virtual School for CSE] Web courses (Jul/Aug 2010):&lt;br /&gt;
** Petascale programming environments and tools&lt;br /&gt;
** Big data for science&lt;br /&gt;
** Proven algorithmic techniques for many-core processors&lt;br /&gt;
* [https://computing.llnl.gov/tutorials/mpi/ LLNL MPI Tutorial]: This was the basis for the MPI workshop at SciNet. &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mpi/linux/reference_manual.pdf Intel MPI library]&lt;br /&gt;
* [[GPC MPI Versions]]&lt;br /&gt;
* [[Co-array Fortran on the GPC]]&lt;br /&gt;
* [[IBM_Feb_Workshop | IBM MPI Workshop, SciNet, Feb 2009]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/UPC/compiler.pdf IBM UPC compiler], [http://support.scinet.utoronto.ca/Manuals/UPC/langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/UPC/upcopt.pdf optimization], [http://support.scinet.utoronto.ca/Manuals/UPC/standlib.pdf library], [http://support.scinet.utoronto.ca/Manuals/UPC/upcusersguide.pdf user's guide], [http://support.scinet.utoronto.ca/Manuals/UPC/proguide.pdf programmer's guide]&lt;br /&gt;
&lt;br /&gt;
==GPU Computing==&lt;br /&gt;
* 1-day &amp;quot;Introduction to GPGPU Programming with CUDA&amp;quot; Course (May 2015): [https://support.scinet.utoronto.ca/education/go.php/251/index.php/ib/1//p_course/251].&lt;br /&gt;
* 2-day &amp;quot;Programming GPUs with CUDA&amp;quot; Course (2015 Summer School): [https://wiki.scinet.utoronto.ca/wiki/index.php/2015_Ontario_Summer_School_for_High_Performance_Computing_Central#Programming_GPUs_with_CUDA]&lt;br /&gt;
* [[Media:SNUG_NOV_CUDA.pdf | New Features in CUDA 5 &amp;amp; 6, Nov. 2014]]&lt;br /&gt;
* [[Media:Westgrid_CUDA.pdf | Intro to GPU Computing Using CUDA]] (WestGrid Spring 2014 Seminar Series)&lt;br /&gt;
* 1.5 hour intro to CUDA, March 2013: [[Media:CUDA-Graphics-Intro-2013.pdf | Slides]] and [[Media:CUDA-Graphics-Intro-2013.tgz | Source Code]]&lt;br /&gt;
* [[CUDA_Minicourse_Fall_2012 | CITA/SciNet CUDA Minicourse, Fall 2012]]&lt;br /&gt;
* [[SciNet GPU Workshop July 2010]]&lt;br /&gt;
* Intro to GPGPU Programming: [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Friday_Morning_GPGPU/Friday_Morning_GPGPU.mp4 Video]/ [[Media:Gpgpu.pdf | Slides]]&amp;lt;br /&amp;gt;(from 5 day parallel programming course at SciNet, May 2011)&lt;br /&gt;
* 1-day intro to GPGPU using CUDA Course (Aug 2011): [[Media:Intro-gpu.tgz | Source Code]], [[Media:IntroGPGPU-Aug2011.pdf | Slides]].&lt;br /&gt;
* [http://developer.nvidia.com/object/cuda_training.html  NVidia archived courses for GPGPU Programming]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiug.pdf PGI Compiler User's Guide]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiref.pdf PGI Compiler Reference Manual]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgifortref.pdf PGI Fortran reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgicudaforug.pdf PGI CUDA Fortran Programming Guide and Reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/openACC_gs.pdf PGI OpenACC Getting Started Guide]&lt;br /&gt;
&lt;br /&gt;
==Performance Tuning==&lt;br /&gt;
* [[Performance and Profiling Course, April 2013]]&lt;br /&gt;
* [[Introduction To Performance]]&lt;br /&gt;
* Performance tools for [[Performance_And_Debugging_Tools:_GPC | GPC ]] and [[Performance_And_Debugging_Tools:_TCS | TCS ]]&lt;br /&gt;
* Dec 2010 SNUG TechTalk: [[Media:ProfillingTechTalk-Dec2010.pdf | Profiling Tools on GPC]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/JUMP-AIX-POWER6-AppsPerformanceTuning-wp032008.pdf Performance tuning]&lt;br /&gt;
* [[Media:Mpi-tuning-parameters.pdf‎ | MPI Tuning Parameters]] - SNUG TechTalk, Feb 2012&lt;br /&gt;
* [http://cnx.org/content/col11136/latest/  High Performance Computing Book]&amp;lt;br /&amp;gt;Online version of an older O'Reilly book which covers the basics of (mostly serial) programming for performance.  Covers the most important issues today (such as cache) very clearly.&lt;br /&gt;
* [http://www.ece.cmu.edu/~franzf/papers/gttse07.pdf  How to Write Fast Numerical Code ]&amp;lt;br /&amp;gt;Good introduction to thinking about performance and cache.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* [[Parallel Debugging with DDT]]&lt;br /&gt;
* [[Media:SS_Debug.pdf|Debugging with GDB and DDT, half-day session at the Ontario HPC Summerschool 2012 Central&amp;lt;br&amp;gt;Slides]], [[Media:SS_Debug.tgz|Code]].&lt;br /&gt;
* [[Media:Snugdebug.pdf|TechTalk: Debuggers &amp;amp; Parallel Debugging on SciNet - gdb, ddd, padb], SciNet User Group Meeting, Nov 2010]]&amp;lt;br/ &amp;gt; [http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Thursday_Morning_Debugging/Thursday_Morning_Debugging.mp4 Video]&lt;br /&gt;
* [http://www.allinea.com/downloads/userguide.pdf Allinea DDT (Distributed Debugging Tool) User Guide]&lt;br /&gt;
&lt;br /&gt;
==Math libraries (BLAS, LAPACK, FFT)==&lt;br /&gt;
* [[Media:MKLTechTalkMarch2012.pdf|Intel Math Kernel Library (MKL): An overview]] (TechTalk, March, 2012)&lt;br /&gt;
* [[Numerical Tools for Physical Scientists]], part 2 of SciNet's Scientific computing course, covers, random nubers, blas, lapack, fft, ...&lt;br /&gt;
* [[Media:FP_Consistency.pdf|Intel Compiler Floating Point Consistency]]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/lin/index.htm Math Kernel Library (MKL)] &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/vsl/vslnotes.pdf Math Kernel Library's Vector Statistical Library]&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Math Kernel Library link line advisor]&amp;lt;br/&amp;gt;($MKLPATH &amp;amp;rarr; ${MKLPATH} in makefiles)&lt;br /&gt;
* [http://publib.boulder.ibm.com/epubs/pdf/am501405.pdf ESSL high performance math library V4] ([http://publib.boulder.ibm.com/epubs/pdf/am601305.pdf V3])&lt;br /&gt;
* [http://publib.boulder.ibm.com/epubs/pdf/am601305.pdf Parallel ESSL high performance math library V3.3]&lt;br /&gt;
* [http://hal.inria.fr/inria-00576469 Linear Algebra Libraries] by Claire Mouton. 2009 INRIA Technical Report on existing linear algebra libraries for C++ (also here: [http://arxiv.org/abs/1103.3020])&lt;br /&gt;
&lt;br /&gt;
==I/O==&lt;br /&gt;
&lt;br /&gt;
* [[Media:NetCDF.pdf|Introduction to NetCDF4 binary files with Python, C++ and R (TechTalk March 2014)]]&lt;br /&gt;
* [[Using MySQL on the GPC]]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/19/content.php/cid/59/ Relational Database Basics]&lt;br /&gt;
* [[Media:SCIENCEDATA.pdf‎|Sep 2012 SNUG TechTalk: Science=Data]]&lt;br /&gt;
* [[Data_Management|Data management]]&lt;br /&gt;
* Intro to Parallel I/O, SciNet, Oct 6th, 2010: &lt;br /&gt;
**[[Media:Parallel_io_course.pdf‎|Morning &amp;amp; MPI-IO Slides]]&lt;br /&gt;
**[[Media:Netcdfhdf5.pdf|NetCDF/HDF5 Slides]]&lt;br /&gt;
**[[Media:ParIO.tgz|Source Code]].  &lt;br /&gt;
* Intro to Parallel I/O, SciNet, Feb, 2013 &lt;br /&gt;
** [http://support.scinet.utoronto.ca/CourseVideo/ParallelIOcourse/pario-intro/pario-intro.mp4 Video of the Introduction]&lt;br /&gt;
** [http://support.scinet.utoronto.ca/CourseVideo/ParallelIOcourse/pario-netcdfhdf5/pario-netcdfhdf5.mp4 Video of the parallel hdf5 and netcdf part] [[Media:Netcdfhdf5.pdf|NetCDF/HDF5 Slides]]&lt;br /&gt;
** [http://support.scinet.utoronto.ca/CourseVideo/ParallelIOcourse/pario-mpiio/pario-mpiio.mp4 Video of the MPI-IO part]&lt;br /&gt;
* Half-day HPCS2012 Parallel I/O tutorial, covering MPI-IO, HDF5, NetCDF, based on the above:  [[Media:ParIO-HPCS2012.pdf|slides (pdf)]] and [[Media:ParIO-HPCS2012.tgz|source code]].&lt;br /&gt;
* [[Media:Snugio.pdf|Sept 2010 SNUG TechTalk: Parallel File System and IO]] &amp;lt;br/ &amp;gt;[http://support.scinet.utoronto.ca/CourseVideo/PPPcourse/Friday_Morning_IO/Friday_Morning_IO.mp4 Video]&lt;br /&gt;
* [[File System and I/O dos and don'ts]]&lt;br /&gt;
* [[Media:40TB.pdf|So you have 40TB of Data]] -- an overview of things to consider with large data sets.&lt;br /&gt;
* [[Media:Adios-techtalk-may2012.pdf|May 2012 SNUG TechTalk: ADIOS for Parallel IO slides]] and [[Media:Adios-techtalk-may2012-src.tgz|source code]]&lt;br /&gt;
* [[hdf5_table|Writting / Reading a table in hdf5]]&lt;br /&gt;
* [[NetCDF_table|Writting / Reading a table in NetCDF]]&lt;br /&gt;
* Intro to Parallel I/O, SciNet, Sept 215&lt;br /&gt;
** MPI-IO [[Media:ParIO.MPIIO.2015.pdf |Slides]] and [[Media:ParIO.MPIIO.tar.gz | Sample codes]]&lt;br /&gt;
** [[Media:netcdf2015.pdf | NETCDF]] &amp;amp; [[Media:hfd5.pdf | HDF5]]&lt;br /&gt;
&lt;br /&gt;
==Infiniband Networking==&lt;br /&gt;
* [[Media:Snug_techtalk_Infiniband.pdf | TechTalk on SciNet's Infiniband Network &amp;amp; MPI options ]] &lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
* [[Using Paraview]]&lt;br /&gt;
* [[VNC|VNC on the GPC]] (see also [[Media:Ttvnc.pdf|slides of the TechTalk on VNC]])&lt;br /&gt;
* [[Software_and_Libraries#anchor_viz|Visualization Software on the GPC]]&lt;br /&gt;
* [https://wiki.scinet.utoronto.ca/wiki/images/5/51/Remoteviz.pdf Remote visualization (X-forwarding and VNC)]&lt;br /&gt;
* [[Using Paraview]]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/~mponce/ss2016/ss2016_visualization-I.pdf gnuplot, xmgrace, remote visualization tools (X-forwarding and VNC), python's matplotlib]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/~mponce/ss2016/ss2016_visualization-II.pdf  Brief overview of ParaView &amp;amp; VisIt]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/242/file_storage/index.php/download/1/files%5B%5D/6399/ VisIt Basics]&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/go.php/273/file_storage/index.php/download/1/files%5B%5D/7363/ Scientific Visualization using VisIt (Basics and Advanced)], M.Ponce and A.Razoumov&lt;br /&gt;
* [https://support.scinet.utoronto.ca/education/get.php/8_ComplexNetworks.pdf Intro to Complex Networks Visualization, with Python]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://scienceillustrated.ca Science Illustrated:] Two-day symposium on Visualizing Science, Feb 2011&lt;br /&gt;
* [http://www.kmdi.utoronto.ca/story/2011/03/si-science-illustrated-symposium-success Videos of the talks given at Science Illustrated] (recorded by [http://www.kmdi.utoronto.ca KMDI] at [http://www.utoronto.ca UoT]):&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=94ff5cd5-be6e-4fc6-9be6-dd2222342bcd Opening remarks] by Paul Young&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=4255c34e-15e7-4b24-ba99-78f5c8fa4381 Information Visualization and the Myth of Information Overload] by Christopher Collins&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=adcf02bf-16cb-46cc-8cdc-1a65e9071d6b Beyond Basic Visualization] by Ramses Van Zon&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=47baf346-3599-4fa3-9b10-6a58faa6b33c Network Visualization &amp;amp;amp; Analysis] by Igor Jurisica&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=7e754a2e-7be5-476e-bb54-37def37bc07e Simulation and Visualization of Blood Flow] by David Steinman&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=d7622587-2c31-49c1-99d7-f0f16c078801 Scientific Visualizations: Does the Science Matter?] by Thomas Lucas&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=9963c637-6840-454f-a57f-9a1be6456616 How can visualization impact public perception of science?] Panelists: Jay Ingram, Peter Calamai, Reni Barlow, Hooley McLaughlin&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=88e50cff-db9b-4c71-b10d-781fec60a2c0 How Info Graphics are Created for the Mainstream Media] by Peter Calamai&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=3897e2a3-1fda-42be-ab78-edbab090fd9e Design Boot Camp] by Graham Huber&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=4c27ed76-7292-407e-83a6-814e1461eccd Visualization Large Datasets] by Jonathan Dursi&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=7d49c845-3937-44e2-a300-9b8ffe57a857 Visualizing Colliding Black Holes] by Herald Pfeiffer&lt;br /&gt;
** [http://itube.ischool.utoronto.ca/Panopto/Pages/Viewer/Default.aspx?id=7d7e4803-39cd-4c8e-a443-bc2a7b1b3c28 Closing remarks] by Mubdi Rahman&lt;br /&gt;
&lt;br /&gt;
==Applications==&lt;br /&gt;
{{:Knowledge Base: Applications}}&lt;br /&gt;
* See also [[User Codes]]&lt;br /&gt;
&lt;br /&gt;
== Development Systems ==&lt;br /&gt;
&lt;br /&gt;
=== KNL ===&lt;br /&gt;
&lt;br /&gt;
* SNUG TechTalk October 2016 -  [[Media:Snug_techtalk_KNL.pdf | Intel Xeon Phi Knights Landing  ]]&lt;br /&gt;
&lt;br /&gt;
=Manuals=&lt;br /&gt;
&lt;br /&gt;
==Intel compilers and libraries (GPC)==&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-lin/index.htm C &amp;amp; C++ compiler]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran-lin/index.htm Fortran compiler]&lt;br /&gt;
* [[Media:FP_Consistency.pdf|Intel Compiler Floating Point Consistency]]&lt;br /&gt;
* [[Media:Compiler_qrg12.pdf‎|Intel Compiler Optimization Guide]]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/lin/index.htm Math Kernel Library (MKL)] &lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mkl/vsl/vslnotes.pdf Math Kernel Library's Vector Statistical Library]&lt;br /&gt;
* [http://software.intel.com/sites/products/documentation/hpc/mpi/linux/reference_manual.pdf Intel MPI library]&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Math Kernel Library link line advisor]&amp;lt;br/&amp;gt;($MKLPATH &amp;amp;rarr; ${MKLPATH} in makefiles)&lt;br /&gt;
&lt;br /&gt;
==IBM compilers and libraries (TCS/P7)==&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlc-compiler.pdf C compiler], [http://support.scinet.utoronto.ca/Manuals/xlc-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlc-proguide.pdf optimization]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlC++-compiler.pdf C++ compiler], [http://support.scinet.utoronto.ca/Manuals/xlC++-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlC++-proguide.pdf optimization]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/xlf-compiler.pdf Fortran compiler] [http://support.scinet.utoronto.ca/Manuals/xlf-langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/xlf-proguide.pdf optimization]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/UPC/compiler.pdf UPC compiler], [http://support.scinet.utoronto.ca/Manuals/UPC/langref.pdf language], [http://support.scinet.utoronto.ca/Manuals/UPC/upcopt.pdf optimization], [http://support.scinet.utoronto.ca/Manuals/UPC/standlib.pdf library], [http://support.scinet.utoronto.ca/Manuals/UPC/upcusersguide.pdf user's guide], [http://support.scinet.utoronto.ca/Manuals/UPC/proguide.pdf programmer's guide]&lt;br /&gt;
* [http://publib.boulder.ibm.com/epubs/pdf/am501405.pdf ESSL high performance math library V4] ([http://publib.boulder.ibm.com/epubs/pdf/am601305.pdf V3])&lt;br /&gt;
* [[Media:essl51.pdf|ESSL high performance math library V5.1 for Linux on Power]]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/JUMP-AIX-POWER6-AppsPerformanceTuning-wp032008.pdf Performance tuning]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/PE5.1-operationanduse.pdf Parallel environment]&lt;br /&gt;
* [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp Cluster information center] (with error codes)&lt;br /&gt;
* [http://support.scinet.utoronto.ca/Manuals/LL-usingandadministering.pdf LoadLeveler: using &amp;amp; administering]&lt;br /&gt;
&lt;br /&gt;
==PGI compilers (ARC)==&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiug.pdf Compiler User's Guide]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgiref.pdf Compiler Reference Manual]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgifortref.pdf Fortran reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/pgicudaforug.pdf CUDA Fortran Programming Guide and Reference]&lt;br /&gt;
* [http://www.pgroup.com/doc/openACC_gs.pdf OpenACC Getting Started Guide]&amp;lt;br&amp;gt;(Note: $PGI/linux86-64/12.5/doc contains a newer version.)&lt;br /&gt;
&lt;br /&gt;
==Scheduler (Adaptive Computing/Cluster Resources)==&lt;br /&gt;
* [http://docs.adaptivecomputing.com/mwm/archive/7-0/help.htm Moab workload manager]&lt;br /&gt;
* [http://docs.adaptivecomputing.com/mwm/archive/7-0/Content/a.gcommandoverview.html Moab commands]&lt;br /&gt;
* [http://docs.adaptivecomputing.com/torque/archive/4-0-1/help.htm Torque resource manager] &lt;br /&gt;
* [http://docs.adaptivecomputing.com/torque/archive/4-0-1/help.htm#topics/12-appendices/commandsOverview.htm Torque PBS commands]&lt;br /&gt;
&lt;br /&gt;
==DDT Debugger (Allinea)==&lt;br /&gt;
* [http://www.allinea.com/downloads/userguide.pdf Distributed Debugging Tool User Guide]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Jupyter_Hub_on_SciNet&amp;diff=9380</id>
		<title>Jupyter Hub on SciNet</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Jupyter_Hub_on_SciNet&amp;diff=9380"/>
		<updated>2018-08-09T17:29:32Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer: the following describes is an experimental setup at SciNet running on good, but out-of-warrantee hardware.*&lt;br /&gt;
&lt;br /&gt;
* Four jupyterhub servers, each with 128 GB of memory and 16 or 20 cores.&lt;br /&gt;
* Access using an ssh tunnel via login.scinet.utoronto.ca:&lt;br /&gt;
&lt;br /&gt;
 $ ssh USER@login.scinet.utoronto.ca -L8888:jupyterhub:8000 -N -f&lt;br /&gt;
&lt;br /&gt;
* This will select (round-robin) one of the four jupyterhub servers.&lt;br /&gt;
* Point your browser to 'localhost:8888' and log in with your SciNet account.&lt;br /&gt;
* The browser should now show the files in your $HOME on SciNet. (If not, try reloading the page, it may have timed out).&lt;br /&gt;
* You can open or create Python 2, Python 3, and R notebooks.&lt;br /&gt;
* Large number of python packages preinstalled.&lt;br /&gt;
&lt;br /&gt;
[[File:jupyterscreen3.png]]&lt;br /&gt;
&lt;br /&gt;
===Tips to get started===&lt;br /&gt;
&lt;br /&gt;
* Jupyter can also browse your (SciNet) files and edit them.&lt;br /&gt;
* Use the 'new' button to create a new python notebook.&lt;br /&gt;
* Give your notebooks reasonable names.&lt;br /&gt;
* To execute a python input line, press `Shift-Enter`.&lt;br /&gt;
* Save your work periodically (even though there is autosave).&lt;br /&gt;
* To work similarly to `ipython --pylab`, do:&lt;br /&gt;
&lt;br /&gt;
 In [1]: from pylab import *&lt;br /&gt;
         %matplotlib notebook&lt;br /&gt;
&lt;br /&gt;
===Advantages and Disadvantages of a Notebook Environment===&lt;br /&gt;
&lt;br /&gt;
Drawbacks:&lt;br /&gt;
* Notebook files (.ipynb) are not scripts.&lt;br /&gt;
* Does not (always) work well with version control.&lt;br /&gt;
* Designed to run in browser.&lt;br /&gt;
* Back-end runs on shared resources.&lt;br /&gt;
* Graphics is inline, which is great for quick exploration but make tweaking a plot harder (IPython+X works better for this).&lt;br /&gt;
* You can jump around in the notebook, and execute different parts: hard to keep track of what you did.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* You can jump around in the notebook, and execute different parts: Easier exploration, experimentation and debugging.&lt;br /&gt;
* Auto-save&lt;br /&gt;
* You can rerun parts of your code (while, e.g., keeping large data in memory)&lt;br /&gt;
* You can add text portions, making your notebook more like an article.&lt;br /&gt;
* Which in turn can be useful for sharing, demos, teaching, ...&lt;br /&gt;
* You can still export as a script.&lt;br /&gt;
* Also has a terminal.&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=Knights_Landing&amp;diff=9379</id>
		<title>Knights Landing</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=Knights_Landing&amp;diff=9379"/>
		<updated>2018-08-09T17:29:19Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:KNL-DAP-Adams-Pass.jpg|center|250px|thumb]]&lt;br /&gt;
|name=Intel Xeon Phi (Knights Landing )&lt;br /&gt;
|installed=August 2016&lt;br /&gt;
|operatingsystem= Linux Centos 7.2&lt;br /&gt;
|loginnode= knl01&lt;br /&gt;
|nnodes=4&lt;br /&gt;
|rampernode=96GB DDR4 + 16GB MCDRAM&lt;br /&gt;
|corespernode=64&lt;br /&gt;
|interconnect=QDR Infiniband&lt;br /&gt;
|vendorcompilers=icc,ifort&lt;br /&gt;
|queuetype=none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is develop/test system of four x86_64 self-hosted 2nd Generation Intel Xeon Phi (Knights Landing, KNL) nodes, aka an Intel &amp;quot;[http://dap.xeonphi.com/#platformspecs Ninja]&amp;quot; platform.  Each node has one 64-core Intel(R) Xeon Phi(TM) CPU 7210 @ 1.30GHz with 4 threads per core.   These systems are not add-on accelerators, but instead act as full-fledged processors running a regular linux operating system.  They are configured with 96GB of DDR4 system RAM along with 16GB of very fast MCDRAM, see [https://software.intel.com/en-us/blogs/2016/01/20/an-intro-to-mcdram-high-bandwidth-memory-on-knights-landing here] for details.&lt;br /&gt;
The nodes are interconnected to the rest of the clusters with QDR Infiniband and shares the regular SciNet GPFS filesystems.  &lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&lt;br /&gt;
First login via ssh with your SciNet account at '''&amp;lt;tt&amp;gt;login.scinet.utoronto.ca&amp;lt;/tt&amp;gt;''', and from there you can proceed to '''&amp;lt;tt&amp;gt;knl01,knl02,knl03,knl04&amp;lt;/tt&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
== KNL Operational Modes ==&lt;br /&gt;
&lt;br /&gt;
The four nodes all have identical hardware, however there are multiple options that control how the MCDRAM High Bandwidth Memory (HBM) is accessed. Mode changes are not dynamic and require the node to be rebooted to take affect.    &lt;br /&gt;
&lt;br /&gt;
=== Clustering ===&lt;br /&gt;
&lt;br /&gt;
Currently all KNL nodes have the Cluster Mode configured to &amp;quot;Quadrant&amp;quot;. See [http://colfaxresearch.com/knl-numa/ this] article for more details about the clustering options that contorl how memory is accessed on the KNL. &lt;br /&gt;
&lt;br /&gt;
=== Memory ===&lt;br /&gt;
&lt;br /&gt;
Two nodes, '''&amp;lt;tt&amp;gt;knl01,kn02&amp;lt;/tt&amp;gt;''' have the MCDRAM configured as &amp;quot;Cache&amp;quot; mode and the other two '''&amp;lt;tt&amp;gt;knl03,kn04&amp;lt;/tt&amp;gt;''' are configured with the &amp;quot;Flat&amp;quot; memory mode.&lt;br /&gt;
See [http://colfaxresearch.com/knl-mcdram/  this ] article for more details about the MCDRAM memory modes.   &lt;br /&gt;
&lt;br /&gt;
Initially when you first compile/port your code, use the Cache mode nodes, however if you wish to try and optimize memory performance by directly using the HBM memory with the [http://colfaxresearch.com/knl-mcdram/#sec-3-2 memkind] library or the [http://colfaxresearch.com/knl-mcdram/#sec-3-1 numactl] options, use the Flat nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@knl03$ numactl --membind 1 ./mycode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Queue ==&lt;br /&gt;
&lt;br /&gt;
Currently there is no queue, be nice.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Software is available using the standard modules framework used on other SciNet systems, however is separate from the GPC modules as the KNL has a newer Centos7 based operating system. &lt;br /&gt;
&lt;br /&gt;
=== Compilers ===&lt;br /&gt;
The Xeon Phi uses the standard intel compilers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intel/16.0.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MPI ===&lt;br /&gt;
&lt;br /&gt;
IntelMPI is currently the default MPI&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load intelmpi/5.1.3.219&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* SNUG TechTalk October 2016 -  [[Media:Snug_techtalk_KNL.pdf | Intel Xeon Phi Knights Landing  ]]&lt;br /&gt;
* http://dap.xeonphi.com/#implinks &lt;br /&gt;
* http://colfaxresearch.com/get-ready-for-intel-knights-landing-3-papers/&lt;br /&gt;
* https://software.intel.com/en-us/articles/getting-ready-for-KNL&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=P8&amp;diff=9378</id>
		<title>P8</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=P8&amp;diff=9378"/>
		<updated>2018-08-09T17:29:04Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:P8_s822.jpg|center|300px|thumb]]&lt;br /&gt;
|name=P8 &lt;br /&gt;
|installed=June 2016&lt;br /&gt;
|operatingsystem= Linux RHEL 7.2 le / Ubuntu 16.04 le &lt;br /&gt;
|loginnode= p8t0[1-2] / p8t0[3-4]&lt;br /&gt;
|nnodes= 2x  Power8 with 2x NVIDIA K80,       2x Power 8 with  4x NVIDIA P100&lt;br /&gt;
|rampernode=512 GB&lt;br /&gt;
|corespernode= 2 x 8core (16 physical, 128 SMT)&lt;br /&gt;
|interconnect=Infiniband EDR &lt;br /&gt;
|vendorcompilers=xlc/xlf, nvcc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Specifications==&lt;br /&gt;
&lt;br /&gt;
The P8 Test System consists of  of 4 IBM Power 822LC Servers each with 2x8core 3.25GHz Power8 CPUs and 512GB Ram. Similar to Power 7, the Power 8 utilizes Simultaneous MultiThreading (SMT), but extends the design to 8 threads per core allowing the 16 physical cores to support up to 128 threads.  2 nodes have two NVIDIA Tesla K80 GPUs with CUDA Capability 3.7 (Kepler), consisting of 2xGK210 GPUs each with 12 GB of RAM connected using PCI-E, and 2 others have 4x NVIDIA Tesla P100 GPUs each wit h 16GB of RAM with CUDA Capability 6.0 (Pascal) connected using NVlink.&lt;br /&gt;
&lt;br /&gt;
== Compile/Devel/Test ==&lt;br /&gt;
&lt;br /&gt;
First login via ssh with your scinet account at '''&amp;lt;tt&amp;gt;login.scinet.utoronto.ca&amp;lt;/tt&amp;gt;''', and from there you can ssh to &amp;lt;tt&amp;gt;p8t01&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;p8t02&amp;lt;/tt&amp;gt; for the K80 GPUs and to &amp;lt;tt&amp;gt;p8t03&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;p8t04&amp;lt;/tt&amp;gt; for the Pascal GPUs.&lt;br /&gt;
&lt;br /&gt;
== Software for  ==&lt;br /&gt;
&lt;br /&gt;
==== GNU Compilers ====&lt;br /&gt;
&lt;br /&gt;
To load the newer advance toolchain version use:&lt;br /&gt;
&lt;br /&gt;
For '''&amp;lt;tt&amp;gt;p8t0[1-2]&amp;lt;/tt&amp;gt;''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/5.3.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For '''&amp;lt;tt&amp;gt;p8t0[3-4]&amp;lt;/tt&amp;gt;''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/6.2.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IBM Compilers ====&lt;br /&gt;
&lt;br /&gt;
To load the native IBM xlc/xlc++ compilers&lt;br /&gt;
&lt;br /&gt;
For '''&amp;lt;tt&amp;gt;p8t0[1-2]&amp;lt;/tt&amp;gt;''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load xlc/13.1.4&lt;br /&gt;
module load xlf/13.1.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For '''&amp;lt;tt&amp;gt;p8t0[3-4]&amp;lt;/tt&amp;gt;''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load xlc/13.1.5_b2&lt;br /&gt;
module load xlf/13.1.5_b2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Driver Version ====&lt;br /&gt;
&lt;br /&gt;
The current NVIDIA driver version is 361.93&lt;br /&gt;
&lt;br /&gt;
==== CUDA ====&lt;br /&gt;
&lt;br /&gt;
The current installed CUDA Tookit is 8.0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load cuda/8.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CUDA driver is installed locally, however the CUDA Toolkit is installed in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/cuda-8.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI ====&lt;br /&gt;
&lt;br /&gt;
Currently OpenMPI has been setup on the four nodes connected over QDR Infiniband.&lt;br /&gt;
&lt;br /&gt;
For '''&amp;lt;tt&amp;gt;p8t0[1-2]&amp;lt;/tt&amp;gt;''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load openmpi/1.10.3-gcc-5.3.1&lt;br /&gt;
$ module load openmpi/1.10.3-XL-13_15.1.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For '''&amp;lt;tt&amp;gt;p8t0[3-4]&amp;lt;/tt&amp;gt;''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load openmpi/1.10.3-gcc-6.2.1&lt;br /&gt;
$ module load openmpi/1.10.3-XL-13_15.1.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PE ====&lt;br /&gt;
&lt;br /&gt;
IBM's Parallel Environment (PE), is available for use with XL compilers using the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module pe/xl.perf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpiexec -n 4 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
documentation is [http://publib.boulder.ibm.com/epubs/pdf/c2372832.pdf here]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=P7_Linux_Cluster&amp;diff=9377</id>
		<title>P7 Linux Cluster</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=P7_Linux_Cluster&amp;diff=9377"/>
		<updated>2018-08-09T17:28:50Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:IBM755.jpg|center|300px|thumb]]&lt;br /&gt;
|name=P7 Cluster (P7)&lt;br /&gt;
|installed=May 2011, March 2013&lt;br /&gt;
|operatingsystem= Linux (RHEL 6.3)&lt;br /&gt;
|loginnode= p701 (from &amp;lt;tt&amp;gt;login.scinet&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|nnodes=8 (256 cores)&lt;br /&gt;
|rampernode=128 Gb &lt;br /&gt;
|corespernode=32 (128 Threads)&lt;br /&gt;
|interconnect=Infiniband (2 DDR/node )&lt;br /&gt;
|vendorcompilers=xlc/xlf&lt;br /&gt;
|queuetype=LoadLeveler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Specifications==&lt;br /&gt;
&lt;br /&gt;
The P7 Cluster consists of 8 IBM Power 755 Servers each with 4x 8core 3.3GHz Power7 CPUs and 128GB Ram. Similar to the Power 6, the Power 7 utilizes Simultaneous Multi Threading (SMT), but extends the design from 2 threads per core to 4.  This allows the 32 physical cores to support up to 128 threads which in many cases can lead to significant speedups.&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&lt;br /&gt;
First login via ssh with your scinet account at '''&amp;lt;tt&amp;gt;login.scinet.utoronto.ca&amp;lt;/tt&amp;gt;''', and from there you can proceed to '''&amp;lt;tt&amp;gt;p7n01-ib0&amp;lt;/tt&amp;gt;''' which &lt;br /&gt;
is currently the gateway/devel node for this cluster.  It is recommended that you modify your .bashrc files to distinguish between the TCS, P7,&lt;br /&gt;
and GPC to avoid module confusion, an example configuration is given [[Important_.bashrc_guidelines|here]].&lt;br /&gt;
&lt;br /&gt;
== Compiler/Devel Node ==&lt;br /&gt;
&lt;br /&gt;
From '''&amp;lt;tt&amp;gt;p7n01-ib0&amp;lt;/tt&amp;gt;''' you can compile, do short tests, and submit your jobs to the queue.&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== GNU Compilers ====&lt;br /&gt;
gcc/g++/gfortran version 4.4.4 is the default with RHEL 6.3 and is available by default. Gcc 4.6.1 is available as a separate module. However, it is recommended to use the IBM compilers (see below).&lt;br /&gt;
&lt;br /&gt;
==== IBM Compilers ====&lt;br /&gt;
To use the IBM Power specific compilers xlc/xlc++/xlf you need to load the following modules &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load vacpp xlf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: Be sure to use &amp;quot;-q64&amp;quot; when using the IBM compilers.&lt;br /&gt;
&lt;br /&gt;
==== MPI ====&lt;br /&gt;
&lt;br /&gt;
IBM's POE is available and will work with both the IBM and GNU compilers.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load pe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The mpi wrappers for C, C++ and Fortran 77/90 are mpicc, mpicxx, and mpif77/mpif90, respectively (but mpcc, mpCC and mpfort should also work).&lt;br /&gt;
&lt;br /&gt;
Note: To use the full C++ bindings of MPI (those in the MPI namespace) in c++ code, you need to add &amp;lt;tt&amp;gt;-cpp&amp;lt;/tt&amp;gt; to the compilation command, and you need to add &amp;lt;tt&amp;gt;-Wl,--allow-multiple-definition&amp;lt;/tt&amp;gt; to the link command if you are linking several  object files that use the MPI c++ bindings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==== OpenMPI ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module openmpi/1.5.3-gcc-v4.4.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module openmpi/1.5.3-ibm-11.1+13.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Spark Standalone ====&lt;br /&gt;
To run Spark you need to previously load JRE1.7.0 via JDK&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p7n01-$ module load jdk/JRE1.7.0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then load Spark as follow :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p7n01-$ module load spark/1.4.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Spark SQL ====&lt;br /&gt;
The current build of spark/1.5.0 supports Spark SQL &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p7n01-$ module load jdk/JRE1.7.0 &lt;br /&gt;
p7n01-$ module load spark/1.5.0&lt;br /&gt;
p7n01-$ module load hadoop/2.3.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample Spark script ==&lt;br /&gt;
We recommend you to read the following blog post by Jonathan Dursi to build your first Spark script :&lt;br /&gt;
http://www.dursi.ca/spark-in-hpc-clusters/ &lt;br /&gt;
&lt;br /&gt;
Prior to submitting sparkscript.py, change the import line to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pyspark.context import SparkContext&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or instead of submitting sparkscript.py, you can also try :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
spark-submit --master $sparkmaster --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/target/spark-examples_2.10-1.4.1.jar 256&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submit a Job ==&lt;br /&gt;
&lt;br /&gt;
The current Scheduler is IBM's LoadLeveler similar to the implementation on the TCS, however be sure to &lt;br /&gt;
include the @environment flags shown below in that sample script as they are different and necessary to get full performance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
##===================================&lt;br /&gt;
## P7 Load Leveler Submission Script&lt;br /&gt;
##===================================&lt;br /&gt;
##&lt;br /&gt;
## Don't change these parameters unless you really know what you are doing&lt;br /&gt;
##&lt;br /&gt;
##@ environment = MP_INFOLEVEL=0; MP_USE_BULK_XFER=yes; MP_BULK_MIN_MSG_SIZE=64K; \&lt;br /&gt;
##                MP_EAGER_LIMIT=64K; MP_DEBUG_ENABLE_AFFINITY=no&lt;br /&gt;
##&lt;br /&gt;
##===================================&lt;br /&gt;
## Avoid core dumps&lt;br /&gt;
## @ core_limit   = 0&lt;br /&gt;
##===================================&lt;br /&gt;
## Job specific&lt;br /&gt;
##===================================&lt;br /&gt;
#&lt;br /&gt;
# @ job_name = myjob&lt;br /&gt;
# @ job_type = parallel&lt;br /&gt;
# @ class = verylong&lt;br /&gt;
# @ output = $(jobid).out&lt;br /&gt;
# @ error = $(jobid).err&lt;br /&gt;
# @ wall_clock_limit = 2:00:00&lt;br /&gt;
# @ node = 2&lt;br /&gt;
# @ tasks_per_node = 128&lt;br /&gt;
# @ queue&lt;br /&gt;
#&lt;br /&gt;
#===================================&lt;br /&gt;
&lt;br /&gt;
#./my_script&lt;br /&gt;
./my_code &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llsubmit myjob.ll &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To show running jobs use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To cancel a job use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llcancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Split a Spark job ==&lt;br /&gt;
&lt;br /&gt;
e.g., To split a job into 256 tasks among 2 workers, you must select 3 nodes (one master and 2 workers) and add the following job specifications :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#@node = 3&lt;br /&gt;
#@preferences = Machine == { &amp;quot;AvailableNode1&amp;quot; &amp;quot;AvailableNode2&amp;quot; &amp;quot;AvailableNode3&amp;quot;}&lt;br /&gt;
#@task_per_node = 128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Monitor your (Spark) job from localhost ==&lt;br /&gt;
&lt;br /&gt;
Spark creates a web UI on each master and slave that you can access from your local web browser. You can notably &amp;quot;check your cluster UI to ensure that workers are registered and have sufficient resources&amp;quot;. To do so, you must logged onto P7 (again) with forwarding the port of your cluster UI to your local port (e.g., 9999) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -L 9999:masternode:4040 userid@login.scinet.utoronto.ca&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then go to your web browser at http://localhost:9999&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--  PBS &lt;br /&gt;
Currently a vary basic torque (pbs based) queuing system has been setup with one 48 hour batch queue. &lt;br /&gt;
&lt;br /&gt;
Create a script as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash &lt;br /&gt;
# p7script.sh&lt;br /&gt;
#PBS -l nodes=1:ppn=128,walltime=1:00:00&lt;br /&gt;
#PBS -N P7test&lt;br /&gt;
&lt;br /&gt;
cd $PBS_O_WORKDIR&lt;br /&gt;
&lt;br /&gt;
mpirun -np 128 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then submit &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub p7script.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interactive sessions can also be facilitated with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qsub -I -l nodes=1:ppn=128,walltime=1:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see running jobs use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qstat &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to cancel a running or queued job&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qdel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS&amp;diff=9376</id>
		<title>HPSS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=HPSS&amp;diff=9376"/>
		<updated>2018-08-09T17:28:31Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|align=right&lt;br /&gt;
|align=center|'''Topology Overview'''&lt;br /&gt;
|align=center|'''Submission Queue'''&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:HPSS-overview.png|right|x200px]]&lt;br /&gt;
|[[Image:HPSS-queue2.png|right|x200px]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=center|'''Servers Rack'''&lt;br /&gt;
|align=center|'''TS3500 Library'''&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:HPSS-servers.png|right|x250px]]&lt;br /&gt;
|[[Image:HPSS-TS3500.png|right|x250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= '''High Performance Storage System''' =&lt;br /&gt;
&lt;br /&gt;
The High Performance Storage System ([http://www.hpss-collaboration.org/index.shtml HPSS] [http://en.wikipedia.org/wiki/High_Performance_Storage_System wikipedia]) is a tape-backed hierarchical storage system that provides a significant portion of the allocated storage space at SciNet. It is a repository for archiving data that is not being actively used. Data can be returned to the active GPFS filesystem when it is needed. &lt;br /&gt;
&lt;br /&gt;
Since this system is intended for large data storage, it is accessible only to groups who have been awarded storage space at SciNet beyond 5TB in the yearly RAC resource allocation round. However, upon request, any user may be awarded access to HPSS, up to 2TB per group, so that you may get familiar with the system (just email support@scinet.utoronto.ca)&lt;br /&gt;
&lt;br /&gt;
Access and transfer of data into and out of HPSS is done under the control of the user, whose interaction is expected to be scripted and submitted as a batch job, using one or more of the following utilities:&lt;br /&gt;
* [http://www.mgleicher.us/GEL/hsi HSI] is a client with an ftp-like functionality which can be used to archive and retrieve large files. It is also useful for browsing the contents of HPSS.&lt;br /&gt;
* [http://www.mgleicher.us/GEL/htar HTAR] is a utility that creates tar formatted archives directly into HPSS. It also creates a separate index file (.idx) that can be accessed and browsed quickly.&lt;br /&gt;
* [https://support.scinet.utoronto.ca/wiki/index.php/ISH ISH] is a TUI utility that can perform an inventory of the files and directories in your tarballs.&lt;br /&gt;
&lt;br /&gt;
We're currently running HPSS v 7.3.3 patch 6, and HSI/HTAR version 4.0.1.2&lt;br /&gt;
&lt;br /&gt;
== '''Why should I use and trust HPSS?''' ==&lt;br /&gt;
* HPSS is a 25 year-old collaboration between IBM and the DoE labs in the US, and is used by about 45 facilities in the [http://www.top500.org “Top 500”] HPC list (plus some black-sites).&lt;br /&gt;
* Over 2.5 ExaBytes of combined storage world-wide.&lt;br /&gt;
* The top 3 sites in the World report (fall 2017) having 360PB, 220PB and 125PB in production (ECMWF, UKMO and BNL)&lt;br /&gt;
* Environment Canada also adopted HPSS in 2017 to store  Nav Canada data as well as to serve as their own archive. Currently has 2 X 100PB capacity installed. &lt;br /&gt;
* The SciNet HPSS system has been providing nearline capacity for important research data in Canada since early 2011, already at 10PB levels in 2018&lt;br /&gt;
* Very reliable, data redundancy and data insurance built-in (dual copies of everything are kept on tapes at SciNet)&lt;br /&gt;
* Data on cache and tapes can be geo-distributed for further resilience and HA.&lt;br /&gt;
* Highly scalable; current performance at SciNet - after a modest upgrade in 2017 - Ingest: ~150 TB/day, Recall: ~45 TB/day (aggregated).&lt;br /&gt;
* HSI/HTAR clients also very reliable and used on several HPSS sites. ISH was written at SciNet.&lt;br /&gt;
* [[Media:HPSS_rationale_SNUG.pdf|HPSS fits well with the Storage Capacity Expansion Plan at SciNet]] (pdf presentation)&lt;br /&gt;
&lt;br /&gt;
== '''Guidelines''' ==&lt;br /&gt;
* Expanded storage capacity is provided on tape -- a media that is not suited for storing small files. Files smaller than ~200MB should be grouped into tarballs with tar or htar.&lt;br /&gt;
* Optimal performance for aggregated transfers and allocation on tapes is obtained with [[Why not tarballs too large |&amp;lt;font color=red&amp;gt;tarballs of size 500GB or less&amp;lt;/font&amp;gt;]], whether ingested by htar or hsi ([[Why not tarballs too large | &amp;lt;font color=red&amp;gt;WHY?&amp;lt;/font&amp;gt;]])&lt;br /&gt;
* We strongly urge that you use the sample scripts we are providing as the basis for your job submissions.&lt;br /&gt;
* Make sure to check the application's exit code and returned logs for errors after any data transfer or tarball creation process&lt;br /&gt;
&lt;br /&gt;
== '''New to the System?'''  ==&lt;br /&gt;
The first step is to email scinet support and request an HPSS account (or else you will get &amp;quot;Error - authentication/initialization failed&amp;quot; and 71 exit codes). &lt;br /&gt;
&lt;br /&gt;
THIS set of instructions on the wiki is the best and most compressed &amp;quot;manual&amp;quot; we have. It may seem a bit overwhelming at first, because of all the job script templates we make available below (they are here so you don't have to think &lt;br /&gt;
too much, just copy and paste), but if you approach the index at the top as a &amp;quot;case switch&amp;quot; mechanism for what you intend to do, everything falls in place.&lt;br /&gt;
&lt;br /&gt;
Try this sequence:&lt;br /&gt;
&lt;br /&gt;
1) [https://wiki.scinet.utoronto.ca/wiki/index.php/HPSS#Access_Through_an_Interactive_HSI_session take a look around HPSS using an interactive HSI session]&lt;br /&gt;
&lt;br /&gt;
(most linux shell commands have an equivalent in HPSS)&lt;br /&gt;
&lt;br /&gt;
2) [https://support.scinet.utoronto.ca/wiki/index.php/HPSS#Sample_tarball_create archive a small test directory using HTAR]&lt;br /&gt;
&lt;br /&gt;
2a) use step 1) to see what happened&lt;br /&gt;
&lt;br /&gt;
3) [https://support.scinet.utoronto.ca/wiki/index.php/HPSS#Sample_data_offload archive a file using hsi]&lt;br /&gt;
&lt;br /&gt;
3a) use step 1) to see what happened&lt;br /&gt;
&lt;br /&gt;
4) [https://support.scinet.utoronto.ca/wiki/index.php/HPSS#Sample_transferring_directories archive a small test directory using HSI]&lt;br /&gt;
&lt;br /&gt;
4a) use step 1) to see what happened&lt;br /&gt;
&lt;br /&gt;
5) now try the other cases and so on. In a couple of hours you'll be in pretty good shape.&lt;br /&gt;
&lt;br /&gt;
== '''Bridge between BGQ and HPSS''' ==&lt;br /&gt;
&lt;br /&gt;
At this time BGQ users will have to migrate data to Niagara scratch prior to transferring it to HPSS. We are looking for ways to improve this workflow.&lt;br /&gt;
&lt;br /&gt;
== '''Access Through the Queue System'''  ==&lt;br /&gt;
All access to the archive system is done through the [https://docs.computecanada.ca/wiki/Niagara_Quickstart#Submitting_jobs NIA queue system].&lt;br /&gt;
&lt;br /&gt;
* Job submissions should be done to the 'archivelong' queue or the 'archiveshort'&lt;br /&gt;
* Short jobs are limited to 1H walltime by default. Long jobs (&amp;gt; 1H) are limited to 72H walltime.&lt;br /&gt;
*  Users are limited to only 2 long jobs and 2 short jobs at the same time, and 10 jobs total on the each queue.&lt;br /&gt;
* There can only be 5 long jobs running at any given time overall. Remaining submissions will be placed on hold for the time being. So far we have not seen a need for overall limit on short jobs.&lt;br /&gt;
&lt;br /&gt;
The status of pending jobs can be monitored with squeue specifying the archive queue:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue -p archiveshort&lt;br /&gt;
  OR&lt;br /&gt;
squeue -p archivelong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Access Through an Interactive HSI session'''  ==&lt;br /&gt;
* You may want to acquire an interactive shell, start an HSI session and navigate the archive naming-space. Keep in mind, you're restricted to 1H.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pinto@nia-login07:~$ salloc -p archiveshort -t 1:00:00&lt;br /&gt;
salloc: Granted job allocation 50918&lt;br /&gt;
salloc: Waiting for resource configuration&lt;br /&gt;
salloc: Nodes hpss-archive02-ib are ready for job&lt;br /&gt;
hpss-archive02-ib:~$&lt;br /&gt;
&lt;br /&gt;
hpss-archive02-ib:~$ hsi    (DON'T FORGET TO START HSI)&lt;br /&gt;
******************************************************************&lt;br /&gt;
*     Welcome to HPSS@SciNet - High Perfomance Storage System    *&lt;br /&gt;
*                                                                * &lt;br /&gt;
*            INFO: THIS IS THE NEW 7.5.1 HPSS SYSTEM!            *&lt;br /&gt;
*                                                                *&lt;br /&gt;
*        Contact Information: support@scinet.utoronto.ca         *&lt;br /&gt;
*  NOTE: do not transfer SMALL FILES with HSI. Use HTAR instead  *&lt;br /&gt;
*              CHECK THE INTEGRITY OF YOUR TARBALLS              *&lt;br /&gt;
****************************************************************** &lt;br /&gt;
[HSI]/archive/s/scinet/pinto-&amp;gt; ls&lt;br /&gt;
&lt;br /&gt;
[HSI]/archive/s/scinet/pinto-&amp;gt; cd &amp;lt;some directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripted File Transfers ===&lt;br /&gt;
File transfers in and out of the HPSS should be scripted into jobs and submitted to the ''archivelong'' queue or the ''archiveshort'' . See generic example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash -l&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J htar_create_tarball_in_hpss&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Creating a htar of finished-job1/ directory tree into HPSS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be $ARCHIVE&lt;br /&gt;
 &lt;br /&gt;
DEST=$ARCHIVE/finished-job1.tar&lt;br /&gt;
 &lt;br /&gt;
# htar WILL overwrite an existing file with the same name so check beforehand.&lt;br /&gt;
&lt;br /&gt;
hsi ls $DEST &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
status=$?&lt;br /&gt;
&lt;br /&gt;
if [ $status == 0 ]; then   &lt;br /&gt;
    echo 'File $DEST already exists. Nothing has been done'&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd $SCRATCH/workarea/ &lt;br /&gt;
htar -Humask=0137 -cpf $ARCHIVE/finished-job1.tar finished-job1/ &lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HTAR returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''Note:''' Always trap the execution of your jobs for abnormal terminations, and be sure to return the exit code&lt;br /&gt;
&lt;br /&gt;
=== Job Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Typically data will be recalled to /scratch when it is needed for analysis. Job dependencies can be constructed so that analysis jobs wait in the queue for data recalls before starting. The qsub flag is&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--dependency=&amp;lt;type:JOBID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where JOBID is the job number of the archive recalling job that must finish successfully before the analysis job can start.&lt;br /&gt;
&lt;br /&gt;
Here is a short cut for generating the dependency (lookup [https://support.scinet.utoronto.ca/wiki/index.php/HPSS#Sample_data_recall data-recall.sh samples]):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hpss-archive02-ib:~$ sbatch $(sbatch data-recall.sh | awk {print &amp;quot;--dependency=afterany:&amp;quot;$1}') job-to-work-on-recalled-data.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''HTAR''' ==&lt;br /&gt;
''' Please aggregate small files (&amp;lt;~200MB) into tarballs or htar files. '''&lt;br /&gt;
&lt;br /&gt;
''' [[Why not tarballs too large |&amp;lt;font color=red&amp;gt;Keep your tarballs to size 500GB or less&amp;lt;/font&amp;gt;]], whether ingested by htar or hsi ([[Why not tarballs too large | &amp;lt;font color=red&amp;gt;WHY?&amp;lt;/font&amp;gt;]])'''&lt;br /&gt;
&lt;br /&gt;
HTAR is a utility that is used for aggregating a set of files and directories, by using a sophisticated multithreaded buffering scheme to write files directly from GPFS into HPSS, creating an archive file that conforms to the POSIX TAR specification, thereby achieving a high rate of performance. HTAR does not do gzip compression, however it already has a built-in checksum algorithm.&lt;br /&gt;
&lt;br /&gt;
'''Caution'''&lt;br /&gt;
* Files larger than 68 GB cannot be stored in an HTAR archive. If you attempt to start a transfer with any files larger than 68GB the whole HTAR session will fail, and you'll get a notification listing all those files, so that you can transfer them with HSI.&lt;br /&gt;
* Files with pathnames too long will be skipped (greater than 100 characters), so as to conform with TAR protocol [[(POSIX 1003.1 USTAR)]] -- Note that the HTAR will erroneously indicate success, however will produce exit code 70. For now, you can check for this type of error by &amp;quot;grep Warning my.output&amp;quot; after the job has completed.&lt;br /&gt;
* Unlike with cput/cget in HSI, &amp;quot;prompt before overwrite&amp;quot;, this is not the default with (h)tar. Be careful not to unintentionally overwrite a previous htar destination file in HPSS. There could be a similar situation when extracting material back into GPFS and overwriting the originals. Be sure to double-check the logic in your scripts.&lt;br /&gt;
* Check the HTAR exit code and log file before removing any files from the GPFS active filesystems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 === HTAR Usage ===&lt;br /&gt;
* To write the ''file1'' and ''file2'' files to a new archive called ''files.tar'' in the default HPSS home directory, and preserve mask attributes (-p), enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    htar -cpf files.tar file1 file2&lt;br /&gt;
OR&lt;br /&gt;
    htar -cpf $ARCHIVE/files.tar file1 file2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To write a ''subdirA'' to a new archive called ''subdirA.tar'' in the default HPSS home directory, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    htar -cpf subdirA.tar subdirA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To extract all files from the archive file called ''proj1.tar'' in HPSS into the ''project1/src'' directory in GPFS, and use the time of extraction as the modification time, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cd  project1/src&lt;br /&gt;
    htar -xpmf proj1.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To display the names of the files in the ''out.tar'' archive file within the HPSS home directory, enter (the out.tar.idx file will be queried):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    htar -vtf out.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To ensure that both the htar and the .idx files have read permissions to other members in your group use the umask option&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    htar -Humask=0137 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details please check the '''[http://www.mgleicher.us/GEL/htar/ HTAR - Introduction]''' or the '''[http://www.mgleicher.us/GEL/htar/htar_man_page.html HTAR Man Page]''' online&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==== Sample tarball create ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash -l&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J htar_create_tarball_in_hpss&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be /archive/$(id -gn)/$(whoami)/&lt;br /&gt;
&lt;br /&gt;
DEST=$ARCHIVE/finished-job1.tar&lt;br /&gt;
&lt;br /&gt;
# htar WILL overwrite an existing file with the same name so check beforehand.&lt;br /&gt;
 &lt;br /&gt;
hsi ls $DEST &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
if [ $status == 0 ]; then   &lt;br /&gt;
    echo 'File $DEST already exists. Nothing has been done'&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd $SCRATCH/workarea/ &lt;br /&gt;
htar -Humask=0137 -cpf $DEST finished-job1/ &lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HTAR returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you attempt to start a transfer with any files larger than 68GB the whole HTAR session will fail, and you'll get a notification listing all those files, so that you can transfer them with HSI. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
----------------------------------------&lt;br /&gt;
INFO: File too large for htar to handle: finished-job1/file1 (86567185745 bytes)&lt;br /&gt;
INFO: File too large for htar to handle: finished-job1/file2 (71857244579 bytes)&lt;br /&gt;
ERROR: 2 oversize member files found - please correct and retry&lt;br /&gt;
ERROR: [FATAL] error(s) generating filename list &lt;br /&gt;
HTAR: HTAR FAILED&lt;br /&gt;
###WARNING  htar returned non-zero exit status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample tarball list ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash -l&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J htar_list_tarball_in_hpss&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be $ARCHIVE&lt;br /&gt;
&lt;br /&gt;
DEST=$ARCHIVE/finished-job1.tar&lt;br /&gt;
&lt;br /&gt;
htar -tvf $DEST&lt;br /&gt;
status=$?&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HTAR returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample tarball extract ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J htar_extract_tarball_from_hpss&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
 &lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be $ARCHIVE&lt;br /&gt;
 &lt;br /&gt;
cd $SCRATCH/recalled-from-hpss&lt;br /&gt;
htar -xpmf $ARCHIVE/finished-job1.tar&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HTAR returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''HSI''' ==&lt;br /&gt;
&lt;br /&gt;
HSI may be the primary client with which some users will interact with HPSS. It provides an ftp-like interface for archiving and retrieving tarballs or [https://support.scinet.utoronto.ca/wiki/index.php/HPSS#Sample_transferring_directories directory trees]. In addition it provides a number of shell-like commands that are useful for examining and manipulating the contents in HPSS. The most commonly used commands will be:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | cput &lt;br /&gt;
  | Conditionally saves or replaces a HPSSpath file to GPFSpath if the GPFS version is new or has been updated&lt;br /&gt;
 cput [options] GPFSpath [: HPSSpath]&lt;br /&gt;
|-&lt;br /&gt;
  | cget &lt;br /&gt;
  | Conditionally retrieves a copy of a file from HPSS to GPFS only if a GPFS version does not already exist. &lt;br /&gt;
 cget [options] [GPFSpath :] HPSSpath&lt;br /&gt;
|-&lt;br /&gt;
  | cd,mkdir,ls,rm,mv&lt;br /&gt;
  | Operate as one would expect on the contents of HPSS.&lt;br /&gt;
|-&lt;br /&gt;
  | lcd,lls&lt;br /&gt;
  | ''Local'' commands to GPFS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*There are 3 distinctions about HSI that you should keep in mind, and that can generate a bit of confusion when you're first learning how to use it:&lt;br /&gt;
** HSI doesn't currently support renaming directories paths during transfers on-the-fly, therefore the syntax for cput/cget may not work as one would expect in some scenarios, requiring some workarounds.&lt;br /&gt;
** HSI has an operator &amp;quot;:&amp;quot; which separates the GPFSpath and HPSSpath, and must be surrounded by whitespace (one or more space characters)&lt;br /&gt;
** The order for referring to files in HSI syntax is different from FTP. In HSI the general format is always the same, GPFS first, HPSS second, cput or cget:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     GPFSfile : HPSSfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For example, when using HSI to store the tarball file from GPFS into HPSS, then recall it to GPFS, the following commands could be used:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cput tarball-in-GPFS : tarball-in-HPSS&lt;br /&gt;
    cget tarball-recalled : tarball-in-HPSS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unlike with FTP, where the following syntax would be used:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    put tarball-in-GPFS tarball-in-HPSS &lt;br /&gt;
    get tarball-in-HPSS tarball-recalled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Simple commands can be executed on a single line.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hsi &amp;quot;mkdir LargeFilesDir; cd LargeFilesDir; cput tarball-in-GPFS : tarball-in-HPSS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* More complex sequences can be performed using an except such as this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hsi &amp;lt;&amp;lt;EOF&lt;br /&gt;
      mkdir LargeFilesDir&lt;br /&gt;
      cd LargeFilesDir&lt;br /&gt;
      cput tarball-in-GPFS : tarball-in-HPSS&lt;br /&gt;
      lcd $SCRATCH/LargeFilesDir2/&lt;br /&gt;
      cput -Ruph *  &lt;br /&gt;
    end&lt;br /&gt;
    EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The commands below are equivalent, but we recommend that you always use full path, and organize the contents of HPSS, where the default HSI directory placement is $ARCHIVE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hsi cput tarball&lt;br /&gt;
    hsi cput tarball : tarball&lt;br /&gt;
    hsi cput $SCRATCH/tarball : $ARCHIVE/tarball&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* There are no known issues renaming files on-the-fly:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hsi cput $SCRATCH/tarball1 : $ARCHIVE/tarball2&lt;br /&gt;
    hsi cget $SCRATCH/tarball3 : $ARCHIVE/tarball2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* However the syntax forms such as the ones below will fail, since they rename the directory paths.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   hsi cput -Ruph $SCRATCH/LargeFilesDir : $ARCHIVE/LargeFilesDir     (FAILS)&lt;br /&gt;
OR&lt;br /&gt;
   hsi cget -Ruph $SCRATCH/LargeFilesDir : $ARCHIVE/LargeFilesDir2    (FAILS)&lt;br /&gt;
OR&lt;br /&gt;
   hsi cput -Ruph $SCRATCH/LargeFilesDir/* : $ARCHIVE/LargeFilesDir2  (FAILS)&lt;br /&gt;
OR&lt;br /&gt;
   hsi cget -Ruph $SCRATCH/LargeFilesDir : $ARCHIVE/LargeFilesDir     (FAILS)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One workaround is the following 2-steps process, where you do a &amp;quot;lcd &amp;quot; in GPFS first, and recursively transfer the whole directory (-R), keeping the same name. You may use '-u' option to resume a previously disrupted session, and the '-p' to  preserve timestamp, and '-h' to keep the links.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hsi &amp;lt;&amp;lt;EOF&lt;br /&gt;
      lcd $SCRATCH&lt;br /&gt;
      cget -Ruph LargeFilesDir&lt;br /&gt;
    end&lt;br /&gt;
    EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another workaround is do a &amp;quot;lcd&amp;quot; into the GPFSpath first and a &amp;quot;cd&amp;quot; in the HPSSpath, but transfer the files individually with the '*' wild character. This option lets you change the directory name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hsi &amp;lt;&amp;lt;EOF&lt;br /&gt;
      lcd $SCRATCH/LargeFilesDir&lt;br /&gt;
      mkdir $ARCHIVE/LargeFilesDir2&lt;br /&gt;
      cd $ARCHIVE/LargeFilesDir2&lt;br /&gt;
      cput -Ruph *  &lt;br /&gt;
    end&lt;br /&gt;
    EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation === &lt;br /&gt;
Complete documentation on HSI is available from the Gleicher Enterprises links below. You may peruse those links and come with alternative syntax forms. You may even be already familiar with HPSS/HSI from other HPC facilities, that may or not have procedures similar to ours. HSI doesn't always work as expected when you go outside of our recommended syntax, so '''we strongly urge that you use the sample scripts we are providing as the basis''' for your job submissions&lt;br /&gt;
* [http://www.mgleicher.us/hsi/hsi_reference_manual_2/introduction.html HSI Introduction]&lt;br /&gt;
* [http://www.mgleicher.us/hsi/hsi_man_page.html man hsi]&lt;br /&gt;
* [http://support.scinet.utoronto.ca/wiki/index.php/HSI_help hsi help]&lt;br /&gt;
* [http://www.mgleicher.us/hsi/hsi-exit-codes.html exit codes] &lt;br /&gt;
'''Note:''' HSI returns the highest-numbered exit code, in case of multiple operations in the same hsi session. You may use '/scinet/niagara/bin/exit2msg $status' to translate those codes into intelligible messages&lt;br /&gt;
&lt;br /&gt;
=== Typical Usage Scripts===&lt;br /&gt;
The most common interactions will be ''putting'' data into HPSS, examining the contents (ls,ish), and ''getting'' data back onto GPFS for inspection or analysis.&lt;br /&gt;
&lt;br /&gt;
==== Sample '''data offload''' ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-offload.sh&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong &lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J offload&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# individual tarballs already exist&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi  -v &amp;lt;&amp;lt;EOF1&lt;br /&gt;
mkdir put-away&lt;br /&gt;
cd put-away&lt;br /&gt;
cput $SCRATCH/workarea/finished-job1.tar.gz : finished-job1.tar.gz&lt;br /&gt;
end&lt;br /&gt;
EOF1&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ];then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi  -v &amp;lt;&amp;lt;EOF2&lt;br /&gt;
mkdir put-away&lt;br /&gt;
cd put-away&lt;br /&gt;
cput $SCRATCH/workarea/finished-job2.tar.gz : finished-job2.tar.gz&lt;br /&gt;
end&lt;br /&gt;
EOF2&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ];then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' as in the above example, we recommend that you capture the (highest-numbered) exit code for each hsi session independently. And remember, you may improve your exit code verbosity by adding the excerpt below to your scripts:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ ! $status == 0 ];then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample '''data list''' ====&lt;br /&gt;
A very trivial way to list the contents of HPSS would be to just submit the HSI 'ls' command.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-list.sh&lt;br /&gt;
#SBATCH -t 1:00:00&lt;br /&gt;
#SBATCH -p archiveshort&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J hpss_ls&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi -v &amp;lt;&amp;lt;EOF&lt;br /&gt;
cd put-away&lt;br /&gt;
ls -R&lt;br /&gt;
end&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Warning: if you have a lot of files, the ls command will take a long time to complete. For instance, about 400,000 files can be listed in about an hour. Adjust the walltime accordingly, and be on the safe side.''&lt;br /&gt;
&lt;br /&gt;
However, we provide a much more useful and convenient way to explore the contents of HPSS with the inventory shell [[ISH]]. This example creates an index of all the files in a user's portion of the namespace. The list is placed in the directory /home/$(whoami)/.ish_register that can be inspected from the login nodes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-list.sh&lt;br /&gt;
#SBATCH -t 1:00:00&lt;br /&gt;
#SBATCH -p archiveshort&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J hpss_index&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
INDEX_DIR=$HOME/.ish_register&lt;br /&gt;
if ! [ -e &amp;quot;$INDEX_DIR&amp;quot; ]; then&lt;br /&gt;
  mkdir -p $INDEX_DIR&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
export ISHREGISTER=&amp;quot;$INDEX_DIR&amp;quot;&lt;br /&gt;
/scinet/niagara/bin/ish hindex&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Note: the above warning on collecting the listing for many files applies here too.''&lt;br /&gt;
&lt;br /&gt;
This index can be browsed or searched with ISH on the development nodes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hpss-archive02-ib:~$  /scinet/niagara/bin/ish ~/.ish_register/hpss.igz &lt;br /&gt;
[ish]hpss.igz&amp;gt; help&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ISH is a powerful tool that is also useful for creating and browsing indices of tar and htar archives, so please look at the [[ISH|documentation]] or built in help.&lt;br /&gt;
&lt;br /&gt;
==== Sample '''data recall''' ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-recall.sh&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J recall_files&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
&lt;br /&gt;
mkdir -p $SCRATCH/recalled-from-hpss&lt;br /&gt;
&lt;br /&gt;
# individual tarballs previously organized in HPSS inside the put-away-on-2010/ folder&lt;br /&gt;
hsi  -v &amp;lt;&amp;lt; EOF&lt;br /&gt;
cget $SCRATCH/recalled-from-hpss/Jan-2010-jobs.tar.gz : $ARCHIVE/put-away-on-2010/Jan-2010-jobs.tar.gz&lt;br /&gt;
cget $SCRATCH/recalled-from-hpss/Feb-2010-jobs.tar.gz : $ARCHIVE/put-away-on-2010/Feb-2010-jobs.tar.gz&lt;br /&gt;
end&lt;br /&gt;
EOF&lt;br /&gt;
status=$?&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
&lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagar/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We should emphasize that a single ''cget'' of multiple files (rather than several separate gets) allows HSI to do optimization, as in the following example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-recall.sh&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J recall_files_optimized&lt;br /&gt;
#SBATCH --mail-type=AL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
mkdir -p $SCRATCH/recalled-from-hpss&lt;br /&gt;
&lt;br /&gt;
# individual tarballs previously organized in HPSS inside the put-away-on-2010/ folder&lt;br /&gt;
hsi  -v &amp;lt;&amp;lt; EOF&lt;br /&gt;
lcd $SCRATCH/recalled-from-hpss/&lt;br /&gt;
cd $ARCHIVE/put-away-on-2010/&lt;br /&gt;
cget Jan-2010-jobs.tar.gz Feb-2010-jobs.tar.gz&lt;br /&gt;
end&lt;br /&gt;
EOF&lt;br /&gt;
status=$?&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample '''transferring directories''' ====&lt;br /&gt;
Remember, it's not possible to rename directories on-the-fly:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hsi cget -Ruph $SCRATCH/LargeFiles-recalled : $ARCHIVE/LargeFiles    (FAILS)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One workaround is transfer the whole directory (and sub-directories) recursively:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-recall.sh&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J recall_directories&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
&lt;br /&gt;
mkdir -p $SCRATCH/recalled&lt;br /&gt;
&lt;br /&gt;
hsi  -v &amp;lt;&amp;lt; EOF&lt;br /&gt;
lcd $SCRATCH/recalled&lt;br /&gt;
cd $ARCHIVE/&lt;br /&gt;
cget -Ruph LargeFiles&lt;br /&gt;
end&lt;br /&gt;
EOF&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another workaround is to transfer files and subdirectories individually with the &amp;quot;*&amp;quot; wild character:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script is named: data-recall.sh&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J recall_directories&lt;br /&gt;
#SBATCH --mail-type=AL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
&lt;br /&gt;
mkdir -p $SCRATCH/LargeFiles-recalled&lt;br /&gt;
&lt;br /&gt;
hsi  -v &amp;lt;&amp;lt; EOF&lt;br /&gt;
lcd $SCRATCH/LargeFiles-recalled&lt;br /&gt;
cd $ARCHIVE/LargeFiles&lt;br /&gt;
cget -Ruph *&lt;br /&gt;
end&lt;br /&gt;
EOF&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* For more details please check the '''[http://www.mgleicher.us/GEL/hsi/ HSI Introduction]''', the '''[http://www.mgleicher.us/GEL/hsi/hsi_man_page.html HSI Man Page]''' or the or the [https://support.scinet.utoronto.ca/wiki/index.php/HSI_help '''hsi help''']&lt;br /&gt;
&lt;br /&gt;
== '''[[ISH|ISH]]''' ==&lt;br /&gt;
=== [[ISH|Documentation and Usage]] ===&lt;br /&gt;
 &lt;br /&gt;
== '''File and directory management''' ==&lt;br /&gt;
=== Moving/renaming ===&lt;br /&gt;
* you may use 'mv' or 'cp' in the same way as the linux version.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J deletion_script&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;HPSS file and directory management&amp;quot;&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi -v &amp;lt;&amp;lt;EOF1&lt;br /&gt;
    mkdir $ARCHIVE/2011&lt;br /&gt;
    mv $ARCHIVE/oldjobs $ARCHIVE/2011&lt;br /&gt;
    cp -r $ARCHIVE/almostfinished/*done $ARCHIVE/2011&lt;br /&gt;
end&lt;br /&gt;
EOF1&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deletions ===&lt;br /&gt;
==== Recommendations ====&lt;br /&gt;
* Be careful with the use of 'cd' commands to non-existing directories before the 'rm' command. Results may be unpredictable&lt;br /&gt;
* Avoid the use of the stand alone wild character '''*'''. If necessary, whenever possible have it bound to common patterns, such as '*.tmp', so to limit unintentional mis-happens&lt;br /&gt;
* Avoid using relative paths, even the env variable $ARCHIVE. Better to explicitly expand the full paths in your scripts&lt;br /&gt;
* Avoid using recursive/looped deletion instructions on $SCRATCH contents from the archive job scripts. Even on $ARCHIVE contents, it may be better to do it as an independent job submission, after you have verified that the original ingestion into HPSS finished without any issues.&lt;br /&gt;
&lt;br /&gt;
==== Typical example ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J deletion_script&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Deletion of an outdated directory tree into HPSS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that the initial directory in HPSS ($ARCHIVE) has the path explicitly expanded&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/hsi -v &amp;lt;&amp;lt;EOF1&lt;br /&gt;
    rm /archive/s/scinet/pinto/*.tmp&lt;br /&gt;
    rm -R /archive/s/scinet/pinto/obsolete&lt;br /&gt;
end&lt;br /&gt;
EOF1&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Deleting with an interactive HSI session ====&lt;br /&gt;
* You may feel more comfortable acquiring an interactive shell, starting an HSI session and proceeding with your deletions that way. Keep in mind, you're restricted to 1H.&lt;br /&gt;
&lt;br /&gt;
* After using the ''qsub -q archive -I'' command you'll get a standard shell prompt on an archive execution node (hpss-archive02), as you would on any compute node. However you will need to run '''HSI''' or '''HTAR''' to access resources on HPSS. &lt;br /&gt;
&lt;br /&gt;
* HSI will give you a prompt very similar to a standard shell, where your can navigate around using commands such 'ls', 'cd', 'pwd', etc ... NOTE: not every bash command has an equivalent on HSI -  for instance, you can not 'vi' or 'cat'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pinto@nia-login07:~$ salloc -p archiveshort -t 1:00:00&lt;br /&gt;
salloc: Granted job allocation 50359&lt;br /&gt;
salloc: Waiting for resource configuration&lt;br /&gt;
salloc: Nodes hpss-archive02-ib are ready for job&lt;br /&gt;
&lt;br /&gt;
hpss-archive02-ib:~$ hsi&lt;br /&gt;
******************************************************************&lt;br /&gt;
*     Welcome to HPSS@SciNet - High Perfomance Storage System    *&lt;br /&gt;
*                                                                * &lt;br /&gt;
*            INFO: THIS IS THE NEW 7.5.1 HPSS SYSTEM!            *&lt;br /&gt;
*                                                                *&lt;br /&gt;
*        Contact Information: support@scinet.utoronto.ca         *&lt;br /&gt;
*  NOTE: do not transfer SMALL FILES with HSI. Use HTAR instead  *&lt;br /&gt;
*              CHECK THE INTEGRITY OF YOUR TARBALLS              *&lt;br /&gt;
******************************************************************&lt;br /&gt;
&lt;br /&gt;
[HSI]/archive/s/scinet/pinto-&amp;gt; rm -R junk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''HPSS for the 'Watchmaker' ''' ==&lt;br /&gt;
=== Efficient alternative to htar ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J tar_create_tarball_in_hpss_with_hsi_by_piping&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be $ARCHIVE&lt;br /&gt;
&lt;br /&gt;
# When using a pipeline like this&lt;br /&gt;
set -o pipefail &lt;br /&gt;
&lt;br /&gt;
# to put (cput will fail)&lt;br /&gt;
tar -c $SCRATCH/mydir | hsi put - : $ARCHIVE/mydir.tar&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'TAR+HSI+piping returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# to immediately generate an index&lt;br /&gt;
ish hindex $ARCHIVE/mydir.tar&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'ISH returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# to get&lt;br /&gt;
#cd $SCRATCH&lt;br /&gt;
#hsi cget - : $ARCHIVE/mydir.tar | tar -xv &lt;br /&gt;
#status=$?&lt;br /&gt;
# if [ ! $status == 0 ]; then&lt;br /&gt;
#   echo 'TAR+HSI+piping returned non-zero code.'&lt;br /&gt;
#   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
#   exit $status&lt;br /&gt;
#else&lt;br /&gt;
#   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
#fi&lt;br /&gt;
&lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
* Combining commands in this fashion, besides being HPSS-friendly, should not be that noticeably slower than the recursive put with HSI that stores each file one by one. However, reading the files back from tape in this format will be many times faster. It would also overcome the current 68GB limit on the size of stored files that we have with htar.&lt;br /&gt;
* To top things off, we recommend indexing with ish (in the same script) immediately after the tarball creation , while it resides in the HPSS cache. It would be as if htar was used.&lt;br /&gt;
* To ensure that an error at any stage of the pipeline shows up in the returned status use: ''set -o pipefail'' (The default is to return the status of the last command in the pipeline and this is not what you want.)&lt;br /&gt;
* Optimal performance for aggregated transfers and allocation on tapes is obtained with [[Why not tarballs too large |&amp;lt;font color=red&amp;gt;tarballs of size 500GB or less&amp;lt;/font&amp;gt;]], whether ingested by htar or hsi ([[Why not tarballs too large | &amp;lt;font color=red&amp;gt;WHY?&amp;lt;/font&amp;gt;]]). Be sure to check the contents of the directory tree with 'du' for the total amount of data before  sending them to the tar+HSI piping.&lt;br /&gt;
&lt;br /&gt;
=== Multi-threaded gzip'ed compression with pigz ===&lt;br /&gt;
We compiled multi-threaded implementation of gzip called pigz (http://zlib.net/pigz/). It's now part of the &amp;quot;extras&amp;quot; module. It can also be used on any compute or devel nodes. This makes the execution of the previous version of the script much quicker than if you were to use 'tar -cfz'. In addition, by piggy-backing ISH to the end of the script, it will know what to do with the just created mydir.tar.gz compressed tarball.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J tar_create_compressed_tarball_in_hpss_with_hsi_by_piping&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be $ARCHIVE&lt;br /&gt;
&lt;br /&gt;
# When using a pipeline like this&lt;br /&gt;
set -o pipefail &lt;br /&gt;
&lt;br /&gt;
load module extras&lt;br /&gt;
&lt;br /&gt;
# to put (cput will fail)&lt;br /&gt;
tar -c $SCRATCH/mydir | pigz | hsi put - : $ARCHIVE/mydir.tar.gz&lt;br /&gt;
status=$?&lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'TAR+PIGZ+HSI+piping returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Content Verification ===&lt;br /&gt;
&lt;br /&gt;
==== HTAR CRC checksums ====&lt;br /&gt;
Specifies that HTAR should generate CRC checksums when creating the archive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J htar_create_tarball_in_hpss_with_checksum_verification&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
trap &amp;quot;echo 'Job script not completed';exit 129&amp;quot; TERM INT&lt;br /&gt;
# Note that your initial directory in HPSS will be $ARCHIVE&lt;br /&gt;
 &lt;br /&gt;
cd $SCRATCH/workarea&lt;br /&gt;
&lt;br /&gt;
# to put&lt;br /&gt;
htar -Humask=0137 -cpf $ARCHIVE/finished-job1.tar -Hcrc -Hverify=1 finished-job1/&lt;br /&gt;
&lt;br /&gt;
# to get&lt;br /&gt;
#mkdir $SCRATCH/verification&lt;br /&gt;
#cd $SCRATCH/verification&lt;br /&gt;
#htar -Hcrc -xvpmf $ARCHIVE/finished-job1.tar &lt;br /&gt;
&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
trap - TERM INT&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HTAR returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Current HSI version - Checksum built-in ====&lt;br /&gt;
&lt;br /&gt;
MD5 is the standard Hashing Algorithm for the HSI build at SciNet. For hsi ingestions with the '-c on' option you should be able to query the md5 hash with the hsi command 'hashli'. That value is stored as an UDA (User Defined Attribute) for each file (a feature of HPSS starting with 7.4)&lt;br /&gt;
&lt;br /&gt;
[http://www.mgleicher.us/GEL/hsi/hsi/hsi_reference_manual_2/checksum-feature.html More usage details here]&lt;br /&gt;
&lt;br /&gt;
The checksum algorithm is very CPU-intensive. Although the checksum code is compiled with a high level of compiler optimization, transfer rates can be significantly reduced when checksum creation or verification is in effect. The amount of degradation in transfer rates depends on several factors, such as  processor speed, network transfer speed, and speed of the local filesystem (GPFS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J MD5_checksum_verified_transfer&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
thefile=&amp;lt;GPFSpath&amp;gt;&lt;br /&gt;
storedfile=&amp;lt;HPSSpath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Generate checksum on fly (-c on)&lt;br /&gt;
hsi -q put -c on $thefile : $storedfile&lt;br /&gt;
pid=$!&lt;br /&gt;
&lt;br /&gt;
# Check the exit code of the HSI process  &lt;br /&gt;
status=$?&lt;br /&gt;
&lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# verify checksum&lt;br /&gt;
hsi lshash $storedfile&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# get the file back with checksum&lt;br /&gt;
hsi get -c on $storedfile&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Prior to HSI version 4.0.1.1 ====&lt;br /&gt;
&lt;br /&gt;
This will checksum the contents of the HPSSpath against the original GPFSpath after the transfer has finished.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -t 72:00:00&lt;br /&gt;
#SBATCH -p archivelong&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH -J checksum_verified_transfer&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
thefile=&amp;lt;GPFSpath&amp;gt;&lt;br /&gt;
storedfile=&amp;lt;HPSSpath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Generate checksum on fly using a named pipe so that file is only read from GPFS once&lt;br /&gt;
mkfifo /tmp/NPIPE&lt;br /&gt;
cat $thefile  | tee /tmp/NPIPE | hsi -q put - : $storedfile &amp;amp;&lt;br /&gt;
pid=$!&lt;br /&gt;
md5sum /tmp/NPIPE |tee /tmp/$fname.md5&lt;br /&gt;
rm -f  /tmp/NPIPE&lt;br /&gt;
&lt;br /&gt;
# Check the exit code of the HSI process  &lt;br /&gt;
wait $pid&lt;br /&gt;
status=$?&lt;br /&gt;
&lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# change filename to stdin in checksum file&lt;br /&gt;
sed -i.1 &amp;quot;s+/tmp/NPIPE+-+&amp;quot; /tmp/$fname.md5&lt;br /&gt;
&lt;br /&gt;
# verify checksum&lt;br /&gt;
hsi -q get - : $storedfile  | md5sum -c  /tmp/$fname.md5&lt;br /&gt;
status=$?&lt;br /&gt;
 &lt;br /&gt;
if [ ! $status == 0 ]; then&lt;br /&gt;
   echo 'HSI returned non-zero code.'&lt;br /&gt;
   /scinet/niagara/bin/exit2msg $status&lt;br /&gt;
   exit $status&lt;br /&gt;
else&lt;br /&gt;
   echo 'TRANSFER SUCCESSFUL'&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Access to HPSS using Globus''' ==&lt;br /&gt;
* &amp;lt;font color=red&amp;gt; Please note that Globus access to HPSS is disabled until further notice, due to lack of version compatibility.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You may now transfer data between SciNet's HPSS and an external source&lt;br /&gt;
* Follow the link below &lt;br /&gt;
  https://globus.computecanada.ca&lt;br /&gt;
: Enter your Compute Canada username and password.&lt;br /&gt;
* In the 'File Transfer' tab, enter ''''Compute Canada HPSS'''' as one of the Endpoints. To authenticate this endpoint, enter your SciNet username and password.&lt;br /&gt;
* You may read more about Compute Canada's Globus Portal here:&lt;br /&gt;
  https://docs.computecanada.ca/wiki/Globus&lt;br /&gt;
&lt;br /&gt;
== '''Access to HPSS using SME''' ==&lt;br /&gt;
* Storage Made Easy - SME - is an Enterprise Cloud Portal adopted by SciNet to allow our users to access HPSS&lt;br /&gt;
* Best suitable for light transfers to/from your personal computer and to navigate your contents on HPSS&lt;br /&gt;
* Follow the link below using a web browser and login with your SicNet UserID and password. Under File Manager you will find the &amp;quot;'''SciNet HPSS'''&amp;quot; folder.&lt;br /&gt;
  https://sme.scinet.utoronto.ca&lt;br /&gt;
* SME can be configured as a DropBox. To download the Free Cloud File Manager native to your OS (Windows, Mac, Linux, mobile), follow the link below:&lt;br /&gt;
  https://www.storagemadeeasy.com/clients_and_tools/&lt;br /&gt;
Once you have downloaded and installed the Cloud Manager App, fill up the following information:&lt;br /&gt;
  Server location&lt;br /&gt;
  https://sme.scinet.utoronto.ca/api&lt;br /&gt;
* You may learn more about SME capabilities and features here:&lt;br /&gt;
  https://www.storagemadeeasy.com/ownFileserver/&lt;br /&gt;
  https://www.storagemadeeasy.com/pricing/#features  (Enterprise)&lt;br /&gt;
  https://storagemadeeasy.com/faq/&lt;br /&gt;
&lt;br /&gt;
== '''User provided Content/Suggestions''' ==&lt;br /&gt;
== '''[[HPSS-by-pomes|Packing up large data sets and putting them on HPSS]]''' ==&lt;br /&gt;
(Pomés group recommendations)&lt;br /&gt;
&lt;br /&gt;
[[Data Management|BACK TO Data Management]]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=SOSCIP_GPU&amp;diff=9375</id>
		<title>SOSCIP GPU</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=SOSCIP_GPU&amp;diff=9375"/>
		<updated>2018-08-09T17:28:05Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:S882lc.png|center|300px|thumb]]&lt;br /&gt;
|name=SOSCIP GPU &lt;br /&gt;
|installed=September 2017&lt;br /&gt;
|operatingsystem= Ubuntu 16.04 le &lt;br /&gt;
|loginnode= sgc01 &lt;br /&gt;
|nnodes= 14x Power 8 with  4x NVIDIA P100&lt;br /&gt;
|rampernode=512 GB&lt;br /&gt;
|corespernode= 2 x 10core (20 physical, 160 SMT)&lt;br /&gt;
|interconnect=Infiniband EDR &lt;br /&gt;
|vendorcompilers=xlc/xlf, nvcc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SOSCIP ==&lt;br /&gt;
&lt;br /&gt;
The SOSCIP GPU Cluster is a Southern Ontario Smart Computing Innovation Platform ([http://soscip.org/ SOSCIP]) resource located at theUniversity of Toronto's SciNet HPC facility. The SOSCIP  multi-university/industry consortium is funded by the Ontario Government and the Federal Economic Development Agency for Southern Ontario [http://www.research.utoronto.ca/about/our-research-partners/soscip/].&lt;br /&gt;
&lt;br /&gt;
== Support Email ==&lt;br /&gt;
&lt;br /&gt;
Please use [mailto:soscip-support@scinet.utoronto.ca &amp;lt;soscip-support@scinet.utoronto.ca&amp;gt;] for SOSCIP GPU specific inquiries.&lt;br /&gt;
&lt;br /&gt;
== Specifications==&lt;br /&gt;
&lt;br /&gt;
The SOSCIP GPU Cluster consists of  of 14 IBM Power 822LC &amp;quot;Minsky&amp;quot; Servers each with 2x10core 3.25GHz Power8 CPUs and 512GB Ram. Similar to Power 7, the Power 8 utilizes Simultaneous MultiThreading (SMT), but extends the design to 8 threads per core allowing the 20 physical cores to support up to 160 threads.  Each node has 4x NVIDIA Tesla P100 GPUs each with 16GB of RAM with CUDA Capability 6.0 (Pascal) connected using NVlink.&lt;br /&gt;
&lt;br /&gt;
== Access and Login ==&lt;br /&gt;
&lt;br /&gt;
In order to obtain access to the system, you must request access to the SOSCIP GPU Platform. Instructions will have been sent to your sponsoring faculty member via E-mail at the beginning of your SOSCIP project.&lt;br /&gt;
&lt;br /&gt;
Access to the SOSCIP GPU Platform is provided through the BGQ login node, '''&amp;lt;tt&amp;gt; bgqdev.scinet.utoronto.ca &amp;lt;/tt&amp;gt;''' using ssh, and from there you can proceed to the GPU development node '''&amp;lt;tt&amp;gt;sgc01-ib0&amp;lt;/tt&amp;gt;''' via ssh. Your user name and password is the same as it is for SciNet systems.&lt;br /&gt;
&lt;br /&gt;
== Filesystem ==&lt;br /&gt;
&lt;br /&gt;
The filesystem is shared with the BGQ system.  See [https://wiki.scinet.utoronto.ca/wiki/index.php/BGQ#Filesystem here ] for details.&lt;br /&gt;
&lt;br /&gt;
== Job Submission ==&lt;br /&gt;
&lt;br /&gt;
The SOSCIP GPU cluster uses [https://slurm.schedmd.com/ SLURM ] as a job scheduler and jobs are scheduled by node, ie 20 cores and 4 GPUs each. Jobs are submitted from the development node '''&amp;lt;tt&amp;gt;sgc01&amp;lt;/tt&amp;gt;'''. The maximum walltime per job is 12 hours (except in the 'long' queue, see below) with up to 8 nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch myjob.script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where myjob.script is &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
&lt;br /&gt;
hostname&lt;br /&gt;
nvidia-smi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information about the &amp;lt;tt&amp;gt;sbatch&amp;lt;/tt&amp;gt; command is found [https://slurm.schedmd.com/sbatch.html here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can query job information using&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see only your own jobs, run &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue -u &amp;lt;userid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once your job is running, SLURM creates a file usually named &amp;lt;tt&amp;gt;slurm&amp;lt;jobid&amp;gt;.out&amp;lt;/tt&amp;gt; in the directory from where you issued the &amp;lt;tt&amp;gt;sbatch&amp;lt;/tt&amp;gt; command. This contains the console output from your job. You can monitor the output of your job by using the &amp;lt;tt&amp;gt;tail -f &amp;lt;file&amp;gt;&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To cancel a job use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel $JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Longer jobs ===&lt;br /&gt;
&lt;br /&gt;
If your job takes more than 12 hours, the sbatch command will not let you submit your job.  There is, however, a way to have jobs up to 24 hours long, by specifying &amp;quot;-p long&amp;quot; as an option (i.e., add &amp;lt;tt&amp;gt;#SBATCH -p long&amp;lt;/tt&amp;gt; to your job script).  The priority of such jobs may be throttled in the future if we see that the 'long' queue is having a negative efffect on turnover time in the queue.&lt;br /&gt;
&lt;br /&gt;
=== Interactive ===&lt;br /&gt;
&lt;br /&gt;
For an interactive session use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salloc --gres=gpu:4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After executing this command, you may have to wait in the queue until a system is available.&lt;br /&gt;
&lt;br /&gt;
More information about the &amp;lt;tt&amp;gt;salloc&amp;lt;/tt&amp;gt; command is [https://slurm.schedmd.com/salloc.html here].&lt;br /&gt;
&lt;br /&gt;
=== Automatic Re-submission and Job Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Commonly you may have a job that you know will take longer to run than what is permissible in the queue. As long as your program contains checkpoint or restart capability, you can have one job automatically submit the next. In the following example it is assumed that the program finishes before the time limit requested and then resubmits itself by logging into the development nodes.   Job dependencies and a maximum number of job re-submissions are used to ensure sequential operation.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash &lt;br /&gt;
&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
&lt;br /&gt;
: ${job_number:=&amp;quot;1&amp;quot;}           # set job_nubmer to 1 if it is undefined&lt;br /&gt;
job_number_max=3&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;hi from ${SLURM_JOB_ID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#RUN JOB HERE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SUBMIT NEXT JOB&lt;br /&gt;
if [[ ${job_number} -lt ${job_number_max} ]]&lt;br /&gt;
then&lt;br /&gt;
  (( job_number++ ))&lt;br /&gt;
  next_jobid=$(ssh sgc01-ib0 &amp;quot;cd $SLURM_SUBMIT_DIR; /opt/slurm/bin/sbatch --export=job_number=${job_number} -d afterok:${SLURM_JOB_ID} thisscript.sh | awk '{print $4}'&amp;quot;)&lt;br /&gt;
  echo &amp;quot;submitted ${next_jobid}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
sleep 15&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${SLURM_JOB_ID} done&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Packing single-GPU jobs within one SLURM job submission===&lt;br /&gt;
Jobs are scheduled by node (4 GPUs) on SOSCIP GPU cluster. If user's code/program cannot utilize all 4 GPUs, user can use GNU Parallel tool to pack 4 or more single-GPU jobs into one SLURM job. Below is an example of submitting 4 single-GPU python codes within one job:  (When using GNU parallel for a publication please cite as per '''''parallel --citation''''') &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
module load gnu-parallel/20180422&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
&lt;br /&gt;
parallel -a jobname-params.input --colsep ' ' -j 4 'CUDA_VISIBLE_DEVICES=$(( {%} - 1 )) numactl -N $(( ({%} -1) / 2 )) python {1} {2} {3} &amp;amp;&amp;gt; jobname-{#}.out'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The jobname-params.input file contains:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
code-1.py --param1=a --param2=b&lt;br /&gt;
code-2.py --param1=c --param2=d&lt;br /&gt;
code-3.py --param1=e --param2=f&lt;br /&gt;
code-4.py --param1=g --param2=h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*In the above example, GNU Parallel tool will read '''jobname-params.input''' file and separate parameters. Each row in the input file has to contain exact 3 parameters to '''python'''. code-N.py is also considered as a parameter. User can change parameter number in the '''parallel''' command ({1} {2} {3}...). &lt;br /&gt;
*'''&amp;quot;-j 4&amp;quot;''' flag limits the max number of jobs to be 4. User can have more rows in the input file, but GNU Parallel tool only executes maximum of 4 at the same time. &lt;br /&gt;
*'''&amp;quot;CUDA_VISIBLE_DEVICES=$(( {%} - 1 ))&amp;quot;''' will set one GPU for each job. '''&amp;quot;numactl -N $(( ({%} -1) / 2 ))&amp;quot;''' will bind 2 jobs on CPU socket 0, other 2 jobs on socket 1. {%} is job slot which will be translated to 1 or 2 or 3 or 4 in this case.&lt;br /&gt;
*Outputs will be  jobname-1.out, jobname-2.out,jobname-3.out,jobname-4.out... {#} is job number which will be translated to the row number in the input file.&lt;br /&gt;
&lt;br /&gt;
== Software Installed ==&lt;br /&gt;
&lt;br /&gt;
=== IBM PowerAI ===&lt;br /&gt;
&lt;br /&gt;
The PowerAI platform contains popular open machine learning frameworks such as '''Caffe, TensorFlow, and Torch'''. Run the &amp;lt;tt&amp;gt;module avail&amp;lt;/tt&amp;gt; command for a complete listing. More information is available at this link: https://developer.ibm.com/linuxonpower/deep-learning-powerai/releases/. Release 4.0 is currently installed.&lt;br /&gt;
&lt;br /&gt;
===GNU Compilers ===&lt;br /&gt;
&lt;br /&gt;
System default compiler is GCC/5.4.0. More recent versions of the GNU Compiler Collection (C/C++/Fortran) are provided in the IBM Advance Toolchain with enhancements for the POWER8 CPU. To load the newer advance toolchain version use:&lt;br /&gt;
&lt;br /&gt;
Advance Toolchain V10.0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/6.4.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advance Toolchain V11.0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/7.3.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information about the IBM Advance Toolchain can be found here: [https://developer.ibm.com/linuxonpower/advance-toolchain/ https://developer.ibm.com/linuxonpower/advance-toolchain/]&lt;br /&gt;
&lt;br /&gt;
=== IBM XL Compilers ===&lt;br /&gt;
&lt;br /&gt;
To load the native IBM xlc/xlc++ and xlf (Fortran) compilers, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load xlc/13.1.5&lt;br /&gt;
module load xlf/15.1.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IBM XL Compilers are enabled for use with NVIDIA GPUs, including support for OpenMP 4.5 GPU offloading and integration with NVIDIA's nvcc command to compile host-side code for the POWER8 CPU.&lt;br /&gt;
&lt;br /&gt;
Information about the IBM XL Compilers can be found at the following links:&lt;br /&gt;
&lt;br /&gt;
[https://www.ibm.com/support/knowledgecenter/SSXVZZ_13.1.5/com.ibm.compilers.linux.doc/welcome.html IBM XL C/C++]&lt;br /&gt;
&lt;br /&gt;
[https://www.ibm.com/support/knowledgecenter/SSAT4T_15.1.5/com.ibm.compilers.linux.doc/welcome.html IBM XL Fortran]&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA GPU Driver ===&lt;br /&gt;
&lt;br /&gt;
The current NVIDIA driver version is 396.26&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
&lt;br /&gt;
The current installed CUDA Tookits is are version 8.0, 9.0 and 9.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load cuda/8.0&lt;br /&gt;
or &lt;br /&gt;
module load cuda/9.0&lt;br /&gt;
or &lt;br /&gt;
module load cuda/9.1&lt;br /&gt;
or&lt;br /&gt;
module load cuda/9.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The CUDA driver is installed locally, however the CUDA Toolkit is installed in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/cuda-8.0&lt;br /&gt;
/usr/local/cuda-9.0&lt;br /&gt;
/usr/local/cuda-9.1&lt;br /&gt;
/usr/local/cuda-9.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/usr/local/cuda&amp;lt;/tt&amp;gt; directory is linked to the &amp;lt;tt&amp;gt;/usr/local/cuda-9.2&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
Documentation and API reference information for the CUDA Toolkit can be found here: [http://docs.nvidia.com/cuda/index.html http://docs.nvidia.com/cuda/index.html]&lt;br /&gt;
&lt;br /&gt;
=== OpenMPI ===&lt;br /&gt;
&lt;br /&gt;
Currently OpenMPI has been setup on the 14 nodes connected over EDR Infiniband.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load openmpi/2.1.1-gcc-5.4.0&lt;br /&gt;
$ module load openmpi/2.1.1-XL-13_15.1.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Software ==&lt;br /&gt;
&lt;br /&gt;
Other software packages can be installed onto the SOSCIP GPU Platform. It is best to try installing new software in your own home directory, which will give you control of the software (e.g. exact version, configuration, installing sub-packages, etc.).&lt;br /&gt;
&lt;br /&gt;
In the following subsections are instructions for installing several common software packages.&lt;br /&gt;
&lt;br /&gt;
=== Anaconda (Python) ===&lt;br /&gt;
&lt;br /&gt;
Anaconda is a popular distribution of the Python programming language. It contains several common Python libraries such as SciPy and NumPy as pre-built packages, which eases installation.&lt;br /&gt;
&lt;br /&gt;
Anaconda can be downloaded from here: [https://www.anaconda.com/download/#linux https://www.anaconda.com/download/#linux]&lt;br /&gt;
&lt;br /&gt;
NOTE: Be sure to download the '''Power8''' installer.&lt;br /&gt;
&lt;br /&gt;
TIP: If you plan to use Tensorflow within Anaconda, download the Python 2.7 version of Anaconda&lt;br /&gt;
&lt;br /&gt;
=== cuDNN ===&lt;br /&gt;
The NVIDIA CUDA Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN accelerates widely used deep learning frameworks, including Caffe2, MATLAB, Microsoft Cognitive Toolkit, TensorFlow, Theano, and PyTorch. If a specific version of cuDNN is needed, user can download from https://developer.nvidia.com/cudnn and choose '''&amp;quot;cuDNN [VERSION] Library for Linux (Power8/Power9)&amp;quot;'''. &lt;br /&gt;
&lt;br /&gt;
The default cuDNN installed on the system is version 6 with CUDA-8 from IBM PowerAI. More recent cuDNN versions are installed as modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cudnn/cuda9.0/7.0.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keras ===&lt;br /&gt;
&lt;br /&gt;
Keras ([https://keras.io/ https://keras.io/]) is a popular high-level deep learning software development framework. It runs on top of other deep-learning frameworks such as TensorFlow.&lt;br /&gt;
&lt;br /&gt;
*The easiest way to install Keras is to install Anaconda first, then install Keras by using using the pip command. Keras uses TensorFlow underneath to run neural network models. Before running code using Keras, be sure to load the PowerAI TensorFlow module and the cuda module.&lt;br /&gt;
&lt;br /&gt;
*Keras can also be installed into a Python virtual environment by using '''pip'''. User can install optimized scipy (built with OpenBLAS) before installing Keras.&lt;br /&gt;
In a virtual environment (python2.7 as example):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install /scinet/sgc/Libraries/scipy/scipy-1.1.0-cp27-cp27mu-linux_ppc64le.whl&lt;br /&gt;
pip install keras&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NumPy/SciPy (built with OpenBLAS) ===&lt;br /&gt;
&lt;br /&gt;
Optimized NumPy and SciPy are provided as Python wheels located in '''/scinet/sgc/Libraries/numpy''' and '''/scinet/sgc/Libraries/scipy''' and can be installed by '''pip'''. Please uninstall old numpy/scipy before installing the new ones.&lt;br /&gt;
&lt;br /&gt;
=== PyTorch ===&lt;br /&gt;
&lt;br /&gt;
PyTorch is the Python implementation of the Torch framework for deep learning. &lt;br /&gt;
&lt;br /&gt;
It is suggested that you use PyTorch within Anaconda.&lt;br /&gt;
&lt;br /&gt;
There is currently no build of PyTorch for POWER8-based systems. You will need to compile it from source.&lt;br /&gt;
&lt;br /&gt;
Obtain the source code from here: [http://pytorch.org/ http://pytorch.org/]&lt;br /&gt;
&lt;br /&gt;
Before building PyTorch, make sure to load cuda by running &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load cuda/8.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: Do not have the gcc modules loaded when building PyTorch. Use the default version of gcc (currently v5.4.0) included with the operating system. Build will fail with later versions of gcc.&lt;br /&gt;
&lt;br /&gt;
=== TensorFlow (new versions and python3) ===&lt;br /&gt;
&lt;br /&gt;
The TensorFlow which is included in PowerAI may not be the most recent version. Newer versions of TensorFlow are provided as prebuilt Python Wheels that users can use '''pip''' to install under user space. Custom Python wheels are stored in '''/scinet/sgc/Applications/TensorFlow_wheels'''. It is highly recommended to install custom TensorFlow wheels into a Python virtual environment.&lt;br /&gt;
&lt;br /&gt;
====Installing with Python2.7:====&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
* Create a virtual environment '''tensorflow-1.8-py2''' with packages installed with system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv --python=python2.7 --system-site-packages tensorflow-1.8-py2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Activate virtual environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source tensorflow-1.8-py2/bin/activate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install TensorFlow into the virtual environment: (A custom Numpy built with OpenBLAS library can be installed)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install --upgrade --force-reinstall /scinet/sgc/Libraries/numpy/numpy-1.14.3-cp27-cp27mu-linux_ppc64le.whl&lt;br /&gt;
pip install /scinet/sgc/Applications/TensorFlow_wheels/tensorflow-1.8.0-cp27-cp27mu-linux_ppc64le.whl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Installing with Python3.5:====&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
* Create a virtual environment '''tensorflow-1.8-py3''' with packages installed with system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv --python=python3.5 --system-site-packages tensorflow-1.8-py3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Activate virtual environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source tensorflow-1.8-py3/bin/activate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install TensorFlow into the virtual environment: (A custom Numpy built with OpenBLAS library can be installed)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip3 install --upgrade --force-reinstall /scinet/sgc/Libraries/numpy/numpy-1.14.3-cp35-cp35m-linux_ppc64le.whl&lt;br /&gt;
pip3 install /scinet/sgc/Applications/TensorFlow_wheels/tensorflow-1.8.0-cp35-cp35m-linux_ppc64le.whl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Submitting jobs====&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
The above myjob.script file needs to be modified to run custom TensorFlow. '''cuda/9.0''' and '''cudnn/cuda9.0/7.0.5''' modules need to be loaded. Virtual environment needs to be activated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
module purge&lt;br /&gt;
module load cuda/9.0 cudnn/cuda9.0/7.0.5&lt;br /&gt;
source tensorflow-1.8-py2/bin/activate #change this to the location where virtual environment is created&lt;br /&gt;
&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
python code.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LINKS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.olcf.ornl.gov/kb_articles/summitdev-quickstart/#System_Overview  Summit Dev System at ORNL]&lt;br /&gt;
&lt;br /&gt;
== DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
# GPU Cluster Introduction: [[Media:GPU_Training_01.pdf‎|SOSCIP GPU Platform]]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=SOSCIP_GPU&amp;diff=9374</id>
		<title>SOSCIP GPU</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=SOSCIP_GPU&amp;diff=9374"/>
		<updated>2018-08-09T17:27:54Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:S882lc.png|center|300px|thumb]]&lt;br /&gt;
|name=SOSCIP GPU &lt;br /&gt;
|installed=September 2017&lt;br /&gt;
|operatingsystem= Ubuntu 16.04 le &lt;br /&gt;
|loginnode= sgc01 &lt;br /&gt;
|nnodes= 14x Power 8 with  4x NVIDIA P100&lt;br /&gt;
|rampernode=512 GB&lt;br /&gt;
|corespernode= 2 x 10core (20 physical, 160 SMT)&lt;br /&gt;
|interconnect=Infiniband EDR &lt;br /&gt;
|vendorcompilers=xlc/xlf, nvcc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SOSCIP ==&lt;br /&gt;
&lt;br /&gt;
The SOSCIP GPU Cluster is a Southern Ontario Smart Computing Innovation Platform ([http://soscip.org/ SOSCIP]) resource located at theUniversity of Toronto's SciNet HPC facility. The SOSCIP  multi-university/industry consortium is funded by the Ontario Government and the Federal Economic Development Agency for Southern Ontario [http://www.research.utoronto.ca/about/our-research-partners/soscip/].&lt;br /&gt;
&lt;br /&gt;
== Support Email ==&lt;br /&gt;
&lt;br /&gt;
Please use [mailto:soscip-support@scinet.utoronto.ca &amp;lt;soscip-support@scinet.utoronto.ca&amp;gt;] for SOSCIP GPU specific inquiries.&lt;br /&gt;
&lt;br /&gt;
== Specifications==&lt;br /&gt;
&lt;br /&gt;
The SOSCIP GPU Cluster consists of  of 14 IBM Power 822LC &amp;quot;Minsky&amp;quot; Servers each with 2x10core 3.25GHz Power8 CPUs and 512GB Ram. Similar to Power 7, the Power 8 utilizes Simultaneous MultiThreading (SMT), but extends the design to 8 threads per core allowing the 20 physical cores to support up to 160 threads.  Each node has 4x NVIDIA Tesla P100 GPUs each with 16GB of RAM with CUDA Capability 6.0 (Pascal) connected using NVlink.&lt;br /&gt;
&lt;br /&gt;
== Access and Login ==&lt;br /&gt;
&lt;br /&gt;
In order to obtain access to the system, you must request access to the SOSCIP GPU Platform. Instructions will have been sent to your sponsoring faculty member via E-mail at the beginning of your SOSCIP project.&lt;br /&gt;
&lt;br /&gt;
Access to the SOSCIP GPU Platform is provided through the BGQ login node, '''&amp;lt;tt&amp;gt; bgqdev.scinet.utoronto.ca &amp;lt;/tt&amp;gt;''' using ssh, and from there you can proceed to the GPU development node '''&amp;lt;tt&amp;gt;sgc01-ib0&amp;lt;/tt&amp;gt;''' via ssh. Your user name and password is the same as it is for SciNet systems.&lt;br /&gt;
&lt;br /&gt;
== Filesystem ==&lt;br /&gt;
&lt;br /&gt;
The filesystem is shared with the BGQ system.  See [https://wiki.scinet.utoronto.ca/wiki/index.php/BGQ#Filesystem here ] for details.&lt;br /&gt;
&lt;br /&gt;
== Job Submission ==&lt;br /&gt;
&lt;br /&gt;
The SOSCIP GPU cluster uses [https://slurm.schedmd.com/ SLURM ] as a job scheduler and jobs are scheduled by node, ie 20 cores and 4 GPUs each. Jobs are submitted from the development node '''&amp;lt;tt&amp;gt;sgc01&amp;lt;/tt&amp;gt;'''. The maximum walltime per job is 12 hours (except in the 'long' queue, see below) with up to 8 nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch myjob.script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where myjob.script is &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
&lt;br /&gt;
hostname&lt;br /&gt;
nvidia-smi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information about the &amp;lt;tt&amp;gt;sbatch&amp;lt;/tt&amp;gt; command is found [https://slurm.schedmd.com/sbatch.html here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can query job information using&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see only your own jobs, run &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue -u &amp;lt;userid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once your job is running, SLURM creates a file usually named &amp;lt;tt&amp;gt;slurm&amp;lt;jobid&amp;gt;.out&amp;lt;/tt&amp;gt; in the directory from where you issued the &amp;lt;tt&amp;gt;sbatch&amp;lt;/tt&amp;gt; command. This contains the console output from your job. You can monitor the output of your job by using the &amp;lt;tt&amp;gt;tail -f &amp;lt;file&amp;gt;&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To cancel a job use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel $JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Longer jobs ===&lt;br /&gt;
&lt;br /&gt;
If your job takes more than 12 hours, the sbatch command will not let you submit your job.  There is, however, a way to have jobs up to 24 hours long, by specifying &amp;quot;-p long&amp;quot; as an option (i.e., add &amp;lt;tt&amp;gt;#SBATCH -p long&amp;lt;/tt&amp;gt; to your job script).  The priority of such jobs may be throttled in the future if we see that the 'long' queue is having a negative efffect on turnover time in the queue.&lt;br /&gt;
&lt;br /&gt;
=== Interactive ===&lt;br /&gt;
&lt;br /&gt;
For an interactive session use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salloc --gres=gpu:4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After executing this command, you may have to wait in the queue until a system is available.&lt;br /&gt;
&lt;br /&gt;
More information about the &amp;lt;tt&amp;gt;salloc&amp;lt;/tt&amp;gt; command is [https://slurm.schedmd.com/salloc.html here].&lt;br /&gt;
&lt;br /&gt;
=== Automatic Re-submission and Job Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Commonly you may have a job that you know will take longer to run than what is permissible in the queue. As long as your program contains checkpoint or restart capability, you can have one job automatically submit the next. In the following example it is assumed that the program finishes before the time limit requested and then resubmits itself by logging into the development nodes.   Job dependencies and a maximum number of job re-submissions are used to ensure sequential operation.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash &lt;br /&gt;
&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
&lt;br /&gt;
: ${job_number:=&amp;quot;1&amp;quot;}           # set job_nubmer to 1 if it is undefined&lt;br /&gt;
job_number_max=3&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;hi from ${SLURM_JOB_ID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#RUN JOB HERE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SUBMIT NEXT JOB&lt;br /&gt;
if [[ ${job_number} -lt ${job_number_max} ]]&lt;br /&gt;
then&lt;br /&gt;
  (( job_number++ ))&lt;br /&gt;
  next_jobid=$(ssh sgc01-ib0 &amp;quot;cd $SLURM_SUBMIT_DIR; /opt/slurm/bin/sbatch --export=job_number=${job_number} -d afterok:${SLURM_JOB_ID} thisscript.sh | awk '{print $4}'&amp;quot;)&lt;br /&gt;
  echo &amp;quot;submitted ${next_jobid}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
sleep 15&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${SLURM_JOB_ID} done&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Packing single-GPU jobs within one SLURM job submission===&lt;br /&gt;
Jobs are scheduled by node (4 GPUs) on SOSCIP GPU cluster. If user's code/program cannot utilize all 4 GPUs, user can use GNU Parallel tool to pack 4 or more single-GPU jobs into one SLURM job. Below is an example of submitting 4 single-GPU python codes within one job:  (When using GNU parallel for a publication please cite as per '''''parallel --citation''''') &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
module load gnu-parallel/20180422&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
&lt;br /&gt;
parallel -a jobname-params.input --colsep ' ' -j 4 'CUDA_VISIBLE_DEVICES=$(( {%} - 1 )) numactl -N $(( ({%} -1) / 2 )) python {1} {2} {3} &amp;amp;&amp;gt; jobname-{#}.out'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The jobname-params.input file contains:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
code-1.py --param1=a --param2=b&lt;br /&gt;
code-2.py --param1=c --param2=d&lt;br /&gt;
code-3.py --param1=e --param2=f&lt;br /&gt;
code-4.py --param1=g --param2=h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*In the above example, GNU Parallel tool will read '''jobname-params.input''' file and separate parameters. Each row in the input file has to contain exact 3 parameters to '''python'''. code-N.py is also considered as a parameter. User can change parameter number in the '''parallel''' command ({1} {2} {3}...). &lt;br /&gt;
*'''&amp;quot;-j 4&amp;quot;''' flag limits the max number of jobs to be 4. User can have more rows in the input file, but GNU Parallel tool only executes maximum of 4 at the same time. &lt;br /&gt;
*'''&amp;quot;CUDA_VISIBLE_DEVICES=$(( {%} - 1 ))&amp;quot;''' will set one GPU for each job. '''&amp;quot;numactl -N $(( ({%} -1) / 2 ))&amp;quot;''' will bind 2 jobs on CPU socket 0, other 2 jobs on socket 1. {%} is job slot which will be translated to 1 or 2 or 3 or 4 in this case.&lt;br /&gt;
*Outputs will be  jobname-1.out, jobname-2.out,jobname-3.out,jobname-4.out... {#} is job number which will be translated to the row number in the input file.&lt;br /&gt;
&lt;br /&gt;
== Software Installed ==&lt;br /&gt;
&lt;br /&gt;
=== IBM PowerAI ===&lt;br /&gt;
&lt;br /&gt;
The PowerAI platform contains popular open machine learning frameworks such as '''Caffe, TensorFlow, and Torch'''. Run the &amp;lt;tt&amp;gt;module avail&amp;lt;/tt&amp;gt; command for a complete listing. More information is available at this link: https://developer.ibm.com/linuxonpower/deep-learning-powerai/releases/. Release 4.0 is currently installed.&lt;br /&gt;
&lt;br /&gt;
===GNU Compilers ===&lt;br /&gt;
&lt;br /&gt;
System default compiler is GCC/5.4.0. More recent versions of the GNU Compiler Collection (C/C++/Fortran) are provided in the IBM Advance Toolchain with enhancements for the POWER8 CPU. To load the newer advance toolchain version use:&lt;br /&gt;
&lt;br /&gt;
Advance Toolchain V10.0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/6.4.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advance Toolchain V11.0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load gcc/7.3.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information about the IBM Advance Toolchain can be found here: [https://developer.ibm.com/linuxonpower/advance-toolchain/ https://developer.ibm.com/linuxonpower/advance-toolchain/]&lt;br /&gt;
&lt;br /&gt;
=== IBM XL Compilers ===&lt;br /&gt;
&lt;br /&gt;
To load the native IBM xlc/xlc++ and xlf (Fortran) compilers, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load xlc/13.1.5&lt;br /&gt;
module load xlf/15.1.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IBM XL Compilers are enabled for use with NVIDIA GPUs, including support for OpenMP 4.5 GPU offloading and integration with NVIDIA's nvcc command to compile host-side code for the POWER8 CPU.&lt;br /&gt;
&lt;br /&gt;
Information about the IBM XL Compilers can be found at the following links:&lt;br /&gt;
&lt;br /&gt;
[https://www.ibm.com/support/knowledgecenter/SSXVZZ_13.1.5/com.ibm.compilers.linux.doc/welcome.html IBM XL C/C++]&lt;br /&gt;
&lt;br /&gt;
[https://www.ibm.com/support/knowledgecenter/SSAT4T_15.1.5/com.ibm.compilers.linux.doc/welcome.html IBM XL Fortran]&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA GPU Driver ===&lt;br /&gt;
&lt;br /&gt;
The current NVIDIA driver version is 396.26&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
&lt;br /&gt;
The current installed CUDA Tookits is are version 8.0, 9.0 and 9.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load cuda/8.0&lt;br /&gt;
or &lt;br /&gt;
module load cuda/9.0&lt;br /&gt;
or &lt;br /&gt;
module load cuda/9.1&lt;br /&gt;
or&lt;br /&gt;
module load cuda/9.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The CUDA driver is installed locally, however the CUDA Toolkit is installed in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/cuda-8.0&lt;br /&gt;
/usr/local/cuda-9.0&lt;br /&gt;
/usr/local/cuda-9.1&lt;br /&gt;
/usr/local/cuda-9.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/usr/local/cuda&amp;lt;/tt&amp;gt; directory is linked to the &amp;lt;tt&amp;gt;/usr/local/cuda-9.2&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
Documentation and API reference information for the CUDA Toolkit can be found here: [http://docs.nvidia.com/cuda/index.html http://docs.nvidia.com/cuda/index.html]&lt;br /&gt;
&lt;br /&gt;
=== OpenMPI ===&lt;br /&gt;
&lt;br /&gt;
Currently OpenMPI has been setup on the 14 nodes connected over EDR Infiniband.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load openmpi/2.1.1-gcc-5.4.0&lt;br /&gt;
$ module load openmpi/2.1.1-XL-13_15.1.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Software ==&lt;br /&gt;
&lt;br /&gt;
Other software packages can be installed onto the SOSCIP GPU Platform. It is best to try installing new software in your own home directory, which will give you control of the software (e.g. exact version, configuration, installing sub-packages, etc.).&lt;br /&gt;
&lt;br /&gt;
In the following subsections are instructions for installing several common software packages.&lt;br /&gt;
&lt;br /&gt;
=== Anaconda (Python) ===&lt;br /&gt;
&lt;br /&gt;
Anaconda is a popular distribution of the Python programming language. It contains several common Python libraries such as SciPy and NumPy as pre-built packages, which eases installation.&lt;br /&gt;
&lt;br /&gt;
Anaconda can be downloaded from here: [https://www.anaconda.com/download/#linux https://www.anaconda.com/download/#linux]&lt;br /&gt;
&lt;br /&gt;
NOTE: Be sure to download the '''Power8''' installer.&lt;br /&gt;
&lt;br /&gt;
TIP: If you plan to use Tensorflow within Anaconda, download the Python 2.7 version of Anaconda&lt;br /&gt;
&lt;br /&gt;
=== cuDNN ===&lt;br /&gt;
The NVIDIA CUDA Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN accelerates widely used deep learning frameworks, including Caffe2, MATLAB, Microsoft Cognitive Toolkit, TensorFlow, Theano, and PyTorch. If a specific version of cuDNN is needed, user can download from https://developer.nvidia.com/cudnn and choose '''&amp;quot;cuDNN [VERSION] Library for Linux (Power8/Power9)&amp;quot;'''. &lt;br /&gt;
&lt;br /&gt;
The default cuDNN installed on the system is version 6 with CUDA-8 from IBM PowerAI. More recent cuDNN versions are installed as modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cudnn/cuda9.0/7.0.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keras ===&lt;br /&gt;
&lt;br /&gt;
Keras ([https://keras.io/ https://keras.io/]) is a popular high-level deep learning software development framework. It runs on top of other deep-learning frameworks such as TensorFlow.&lt;br /&gt;
&lt;br /&gt;
*The easiest way to install Keras is to install Anaconda first, then install Keras by using using the pip command. Keras uses TensorFlow underneath to run neural network models. Before running code using Keras, be sure to load the PowerAI TensorFlow module and the cuda module.&lt;br /&gt;
&lt;br /&gt;
*Keras can also be installed into a Python virtual environment by using '''pip'''. User can install optimized scipy (built with OpenBLAS) before installing Keras.&lt;br /&gt;
In a virtual environment (python2.7 as example):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install /scinet/sgc/Libraries/scipy/scipy-1.1.0-cp27-cp27mu-linux_ppc64le.whl&lt;br /&gt;
pip install keras&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NumPy/SciPy (built with OpenBLAS) ===&lt;br /&gt;
&lt;br /&gt;
Optimized NumPy and SciPy are provided as Python wheels located in '''/scinet/sgc/Libraries/numpy''' and '''/scinet/sgc/Libraries/scipy''' and can be installed by '''pip'''. Please uninstall old numpy/scipy before installing the new ones.&lt;br /&gt;
&lt;br /&gt;
=== PyTorch ===&lt;br /&gt;
&lt;br /&gt;
PyTorch is the Python implementation of the Torch framework for deep learning. &lt;br /&gt;
&lt;br /&gt;
It is suggested that you use PyTorch within Anaconda.&lt;br /&gt;
&lt;br /&gt;
There is currently no build of PyTorch for POWER8-based systems. You will need to compile it from source.&lt;br /&gt;
&lt;br /&gt;
Obtain the source code from here: [http://pytorch.org/ http://pytorch.org/]&lt;br /&gt;
&lt;br /&gt;
Before building PyTorch, make sure to load cuda by running &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load cuda/8.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: Do not have the gcc modules loaded when building PyTorch. Use the default version of gcc (currently v5.4.0) included with the operating system. Build will fail with later versions of gcc.&lt;br /&gt;
&lt;br /&gt;
=== TensorFlow (new versions and python3) ===&lt;br /&gt;
&lt;br /&gt;
The TensorFlow which is included in PowerAI may not be the most recent version. Newer versions of TensorFlow are provided as prebuilt Python Wheels that users can use '''pip''' to install under user space. Custom Python wheels are stored in '''/scinet/sgc/Applications/TensorFlow_wheels'''. It is highly recommended to install custom TensorFlow wheels into a Python virtual environment.&lt;br /&gt;
&lt;br /&gt;
====Installing with Python2.7:====&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
* Create a virtual environment '''tensorflow-1.8-py2''' with packages installed with system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv --python=python2.7 --system-site-packages tensorflow-1.8-py2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Activate virtual environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source tensorflow-1.8-py2/bin/activate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install TensorFlow into the virtual environment: (A custom Numpy built with OpenBLAS library can be installed)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install --upgrade --force-reinstall /scinet/sgc/Libraries/numpy/numpy-1.14.3-cp27-cp27mu-linux_ppc64le.whl&lt;br /&gt;
pip install /scinet/sgc/Applications/TensorFlow_wheels/tensorflow-1.8.0-cp27-cp27mu-linux_ppc64le.whl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Installing with Python3.5:====&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
* Create a virtual environment '''tensorflow-1.8-py3''' with packages installed with system:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv --python=python3.5 --system-site-packages tensorflow-1.8-py3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Activate virtual environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source tensorflow-1.8-py3/bin/activate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install TensorFlow into the virtual environment: (A custom Numpy built with OpenBLAS library can be installed)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip3 install --upgrade --force-reinstall /scinet/sgc/Libraries/numpy/numpy-1.14.3-cp35-cp35m-linux_ppc64le.whl&lt;br /&gt;
pip3 install /scinet/sgc/Applications/TensorFlow_wheels/tensorflow-1.8.0-cp35-cp35m-linux_ppc64le.whl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Submitting jobs====&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
The above myjob.script file needs to be modified to run custom TensorFlow. '''cuda/9.0''' and '''cudnn/cuda9.0/7.0.5''' modules need to be loaded. Virtual environment needs to be activated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --nodes=1 &lt;br /&gt;
#SBATCH --ntasks=20  # MPI tasks (needed for srun) &lt;br /&gt;
#SBATCH --time=00:10:00  # H:M:S&lt;br /&gt;
#SBATCH --gres=gpu:4     # Ask for 4 GPUs per node&lt;br /&gt;
&lt;br /&gt;
module purge&lt;br /&gt;
module load cuda/9.0 cudnn/cuda9.0/7.0.5&lt;br /&gt;
source tensorflow-1.8-py2/bin/activate #change this to the location where virtual environment is created&lt;br /&gt;
&lt;br /&gt;
cd $SLURM_SUBMIT_DIR&lt;br /&gt;
python code.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LINKS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.olcf.ornl.gov/kb_articles/summitdev-quickstart/#System_Overview  Summit Dev System at ORNL]&lt;br /&gt;
&lt;br /&gt;
== DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
# GPU Cluster Introduction: [[Media:GPU_Training_01.pdf‎|SOSCIP GPU Platform]]&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=BGQ&amp;diff=9373</id>
		<title>BGQ</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=BGQ&amp;diff=9373"/>
		<updated>2018-08-09T17:27:41Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Computer&lt;br /&gt;
|image=[[Image:Blue_Gene_Cabinet.jpeg|center|300px|thumb]]&lt;br /&gt;
|name=Blue Gene/Q (BGQ)&lt;br /&gt;
|installed=Aug 2012, Nov 2014&lt;br /&gt;
|operatingsystem= RH6.3, CNK (Linux) &lt;br /&gt;
|loginnode= bgqdev-fen1&lt;br /&gt;
|nnodes=  4096 nodes (65,536 cores)&lt;br /&gt;
|rampernode=16 GB &lt;br /&gt;
|corespernode=16 (64 threads)&lt;br /&gt;
|interconnect=5D Torus (jobs), QDR Infiniband (I/O) &lt;br /&gt;
|vendorcompilers= bgxlc, bgxlf&lt;br /&gt;
|queuetype=Loadleveler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==System Status==&lt;br /&gt;
&lt;br /&gt;
The current BGQ system status can be found on the wiki's [[Main Page]].&lt;br /&gt;
&lt;br /&gt;
==SOSCIP &amp;amp; LKSAVI==&lt;br /&gt;
&lt;br /&gt;
The BGQ is a Southern Ontario Smart Computing&lt;br /&gt;
Innovation Platform ([http://soscip.org/ SOSCIP]) BlueGene/Q supercomputer located at the&lt;br /&gt;
University of Toronto's SciNet HPC facility. The SOSCIP &lt;br /&gt;
multi-university/industry consortium is funded by the Ontario Government &lt;br /&gt;
and the Federal Economic Development Agency for Southern Ontario [http://www.research.utoronto.ca/about/our-research-partners/soscip/].&lt;br /&gt;
&lt;br /&gt;
A half-rack of BlueGene/Q (8,192 cores) was purchased by the [http://likashingvirology.med.ualberta.ca/ Li Ka Shing Institute of Virology] at the University of Alberta in late fall 2014 and integrated into the existing BGQ system.&lt;br /&gt;
&lt;br /&gt;
The combined 4 rack system is the fastest Canadian supercomputer on the [http://top500.org/ top 500], currently at the 120th place (Nov 2015).&lt;br /&gt;
&lt;br /&gt;
== Support Email ==&lt;br /&gt;
&lt;br /&gt;
Please use [mailto:bgq-support@scinet.utoronto.ca &amp;lt;bgq-support@scinet.utoronto.ca&amp;gt;] for BGQ-specific inquiries.&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
&lt;br /&gt;
BGQ is an extremely dense and energy efficient 3rd generation Blue Gene IBM supercomputer built around a system-on-a-chip compute node that has a 16core 1.6GHz PowerPC based CPU (PowerPC A2) with 16GB of Ram.  The nodes are bundled in groups of 32 into a node board (512 cores), and 16 boards make up a midplane (8192 cores) with 2 midplanes per rack, or 16,348 cores and 16 TB of RAM per rack. The compute nodes run a very lightweight Linux-based operating system called CNK ('''C'''ompute '''N'''ode '''K'''ernel).  The compute nodes are all connected together using a custom 5D torus highspeed interconnect. Each rack has 16 I/O nodes that run a full Redhat Linux OS that manages the compute nodes and mounts the filesystem.  SciNet's BGQ consists of 8 mdiplanes (four-racks) totalling 65,536 cores and 64TB of RAM.&lt;br /&gt;
&lt;br /&gt;
[[Image:BlueGeneQHardware2.png‎ |center]]&lt;br /&gt;
&lt;br /&gt;
=== 5D Torus Network ===&lt;br /&gt;
&lt;br /&gt;
The network topology of BlueGene/Q is a five-dimensional (5D) torus, with direct links between the nearest neighbors in the ±A, ±B, ±C, ±D, and ±E directions.  As such there are only a few optimum block sizes that will use the network efficiently.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Node Boards '''&lt;br /&gt;
| '''Compute Nodes'''&lt;br /&gt;
| '''Cores'''&lt;br /&gt;
| '''Torus Dimensions'''&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 32&lt;br /&gt;
| 512&lt;br /&gt;
| 2x2x2x2x2&lt;br /&gt;
|-&lt;br /&gt;
| 2 (adjacent pairs)&lt;br /&gt;
| 64&lt;br /&gt;
| 1024&lt;br /&gt;
| 2x2x4x2x2&lt;br /&gt;
|-&lt;br /&gt;
| 4 (quadrants)&lt;br /&gt;
| 128&lt;br /&gt;
| 2048&lt;br /&gt;
| 2x2x4x4x2&lt;br /&gt;
|-&lt;br /&gt;
| 8 (halves)&lt;br /&gt;
| 256&lt;br /&gt;
| 4096&lt;br /&gt;
| 4x2x4x4x2&lt;br /&gt;
|-&lt;br /&gt;
| 16 (midplane)&lt;br /&gt;
| 512&lt;br /&gt;
| 8192&lt;br /&gt;
| 4x4x4x4x2&lt;br /&gt;
|-&lt;br /&gt;
| 32 (1 rack)&lt;br /&gt;
| 1024&lt;br /&gt;
| 16384&lt;br /&gt;
| 4x4x4x8x2 &lt;br /&gt;
|-&lt;br /&gt;
| 64 (2 racks)&lt;br /&gt;
| 2048&lt;br /&gt;
| 32768&lt;br /&gt;
| 4x4x8x8x2&lt;br /&gt;
|-&lt;br /&gt;
| 96 (3 racks)&lt;br /&gt;
| 3072&lt;br /&gt;
| 49152&lt;br /&gt;
| 4x4x12x8x2&lt;br /&gt;
|-&lt;br /&gt;
| 128 (4 racks)&lt;br /&gt;
| 4096&lt;br /&gt;
| 65536&lt;br /&gt;
| 8x4x8x8x2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Login/Devel Node ==&lt;br /&gt;
&lt;br /&gt;
The development node is '''bgqdev-fen1''' which one can login to from the regular '''login.scinet.utoronto.ca''' login nodes or directly from outside using '''bgqdev.scinet.utoronto.ca''', e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh -l USERNAME bgqdev.scinet.utoronto.ca -X&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where USERNAME is your username on the BGQ and the &amp;lt;tt&amp;gt;-X&amp;lt;/tt&amp;gt; flag is optional, needed only if you will use X graphics.&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: To learn how to setup ssh keys for logging in please see [[Ssh keys]].&lt;br /&gt;
&lt;br /&gt;
These development node is a Power7 machines running Linux which serve as the compilation and submission host for the BGQ.  Programs are cross-compiled for the BGQ on this node and then submitted to the queue using loadleveler.&lt;br /&gt;
&lt;br /&gt;
===Modules and Environment Variables===&lt;br /&gt;
&lt;br /&gt;
To use most packages on the SciNet machines - including most of the compilers - , you will have to use the `modules' command.  The command &amp;lt;tt&amp;gt;module load some-package&amp;lt;/tt&amp;gt; will set your environment variables (&amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;LD_LIBRARY_PATH&amp;lt;/tt&amp;gt;, etc) to include the default version of that package.   &amp;lt;tt&amp;gt;module load some-package/specific-version&amp;lt;/tt&amp;gt; will load a specific version of that package.  This makes it very easy for different users to use different versions of compilers, MPI versions, libraries etc.&lt;br /&gt;
&lt;br /&gt;
A list of the installed software can be seen on the system by typing &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To load a module (for example, the default version of the intel compilers)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load vacpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To unload a module&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module unload vacpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To unload all modules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module purge&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands can go in your .bashrc files to make sure you are using the correct packages.&lt;br /&gt;
&lt;br /&gt;
Modules that load libraries, define environment variables pointing to the location of library files and include files for use Makefiles. These environment variables follow the naming convention&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $SCINET_[short-module-name]_BASE&lt;br /&gt;
 $SCINET_[short-module-name]_LIB&lt;br /&gt;
 $SCINET_[short-module-name]_INC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
for the base location of the module's files, the location of the libraries binaries and the header files, respectively.&lt;br /&gt;
&lt;br /&gt;
So to compile and link the library, you will have to add &amp;lt;tt&amp;gt;-I${SCINET_[module-basename]_INC}&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;-L${SCINET_[module-basename]_LIB}&amp;lt;/tt&amp;gt;, respectively, in addition to the usual &amp;lt;tt&amp;gt;-l[libname]&amp;lt;/tt&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Note that a &amp;lt;tt&amp;gt;module load&amp;lt;/tt&amp;gt; command ''only'' sets the environment variables in your current shell (and any subprocesses that the shell launches).   It does ''not'' effect other shell environments.&lt;br /&gt;
&lt;br /&gt;
If you always require the same modules, it is easiest to load those modules in your &amp;lt;tt&amp;gt;.bashrc&amp;lt;/tt&amp;gt; and then they will always be present in your environment; if you routinely have to flip back and forth between modules, it is easiest to have almost no modules loaded in your &amp;lt;tt&amp;gt;.bashrc&amp;lt;/tt&amp;gt; and simply load them as you need them (and have the required &amp;lt;tt&amp;gt;module load&amp;lt;/tt&amp;gt; commands in your job submission scripts).&lt;br /&gt;
&lt;br /&gt;
=== Compilers ===&lt;br /&gt;
&lt;br /&gt;
The BGQ uses IBM XL compilers to cross-compile code for the BGQ.  Compilers are available for FORTRAN, C, and C++.  They are accessible by default, or by loading the '''xlf''' and '''vacpp''' modules. The compilers by default produce&lt;br /&gt;
static binaries, however with BGQ it is possible to now use dynamic libraries as well.  The compilers follow the XL conventions with the prefix '''bg''',&lt;br /&gt;
so '''bgxlc''' and '''bgxlf90''' are the C and FORTRAN compilers respectively.  &lt;br /&gt;
&lt;br /&gt;
Most users however will use the MPI variants, i.e. '''mpixlf90''' and '''mpixlc''' and  which are available by loading&lt;br /&gt;
the '''mpich2''' module. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load mpich2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is recommended to use at least the following flags when compiling and linking&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-O3 -qarch=qp -qtune=qp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to build a package for which the configure script tries to run small test jobs, the cross-compiling nature of the bgq can get in the way.  In that case, you should use the interactive [[BGQ#Interactive_Use_.2F_Debugging | &amp;lt;tt&amp;gt;'''debugjob'''&amp;lt;/tt&amp;gt;]] environment as described below.&lt;br /&gt;
&lt;br /&gt;
== ION/Devel Nodes ==&lt;br /&gt;
&lt;br /&gt;
There are also bgq native development nodes named '''bgqdev-ion[01-24]''' which one can login to directly, i.e. ssh, from '''bgqdev-fen1'''.  These nodes are extra I/O nodes that are essentially the same as the BGQ compute nodes with the exception that they run a full RedHat Linux and have an infiniband interface providing direct network access.    Unlike the regular development node, '''bgqdev-fen1''', which is Power7, this node has the same BGQ A2 processor, and thus cross compilations are not required which can make building some software easier.    &lt;br /&gt;
&lt;br /&gt;
'''NOTE''': BGQ MPI jobs can be compiled on these nodes, however can not be run locally as the mpich2 is setup for the BGQ network and thus will fail on these nodes.&lt;br /&gt;
&lt;br /&gt;
== Job Submission ==&lt;br /&gt;
&lt;br /&gt;
As the BlueGene/Q architecture is different from the development nodes, you cannot run applications intended/compiled for the BGQ on the devel nodes. The only way to run (or even test) your program is to submit a job to the BGQ.  Jobs are submitted as scripts through loadleveler. That script must then use '''runjob''' to start the job, which in many ways similar to mpirun or mpiexec.  As shown above in the network topology overview, there are only a few optimum job size configurations which is also further constrained by each block requiring a minimum of one IO node.  In SciNet's configuration (with 8 I/O nodes per midplane) this allows 64 nodes (1024 cores) to be the smallest block size. Normally a block size matches the job size to offer fully dedicated resources to the job.  Smaller jobs can be run within the same block however this results in shared resources (network and IO) and are referred to as sub-block jobs and are described in more detail below.  &lt;br /&gt;
&lt;br /&gt;
=== runjob ===&lt;br /&gt;
&lt;br /&gt;
All BGQ runs are launched using '''runjob''' which for those familiar with MPI is analogous to mpirun/mpiexec.  Jobs run on a block, which is a predefined group of nodes that have already been configured and booted.  There are two ways to get a block. One way is to use a 30-minute 'debugjob' session (more about that below). The other, more common case, is using a job script submitted and are running using loadleveler. Inside the job script, this block is set for you, and you do not have to specify the block name.  For example, if your loadleveler job script requests 64 nodes, each with 16 cores (for a total of 1024 cores), from within that job script, you can run a job with 16 processes per node and 1024 total processes with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
runjob --np 1024 --ranks-per-node=16 --cwd=$PWD : $PWD/code -f file.in&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here, &amp;lt;tt&amp;gt;--np 1024&amp;lt;/tt&amp;gt; sets the total number of mpi tasks, while &amp;lt;tt&amp;gt;--ranks-per-node=16&amp;lt;/tt&amp;gt; specifies that 16 processes should run on each node.&lt;br /&gt;
For pure mpi jobs, it is advisable always to give the number of ranks per node, because the default value of 1 may leave 15 cores on the node idle. The argument to ranks-per-node may be 1, 2, 4, 8, 16, 32, or 64. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- (Note: If this were not a loadleveler job, and the block ID was R00-M0-N03-64, the command would be &amp;quot;&amp;lt;tt&amp;gt;runjob --block R00-M0-N03-64 --np 1024 --ranks-per-node=16 --cwd=$PWD : $PWD/code -f file.in&amp;lt;/tt&amp;gt;&amp;quot;) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runjob flags are shown with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
runjob -h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a particularly useful one is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--verbose #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where # is from 1-7 which can be helpful in debugging an application.&lt;br /&gt;
&lt;br /&gt;
=== How to set ranks-per-node ===&lt;br /&gt;
&lt;br /&gt;
There are 16 cores per node, but the argument to ranks-per-node may be 1, 2, 4, 8, 16, 32, or 64.  While it may seem natural to set ranks-per-node to 16, this is not generally recommended.  On the BGQ, one can efficiently run more than 1 process per core, because each core has four &amp;quot;hardware threads&amp;quot; (similar to HyperThreading on the GPC and Simultaneous Multi Threading on the TCS and P7), which can keep the different parts of each core busy at the same time. One would therefore ideally use 64 ranks per node.  There are two main reason why one might not set ranks-per-node to 64:&lt;br /&gt;
# The memory requirements do not allow 64 ranks (each rank only has 256MB of memory)&lt;br /&gt;
# The application is more efficient in a hybrid MPI/OpenMP mode (or MPI/pthreads). Using less ranks-per-node, the hardware threads are used as OpenMP threads within each process.&lt;br /&gt;
Because threads can share memory, the memory requirements of the hybrid runs is typically smaller than that of pure MPI runs.&lt;br /&gt;
&lt;br /&gt;
Note that the total number of mpi processes in a runjob (i.e., the --np argument) should be the ranks-per-node times the number of nodes (set by bg_size in the loadleveler script). So for the same number of nodes, if you change ranks-per-node by a factor of two, you should also multiply the total number of mpi processes by two.&lt;br /&gt;
&lt;br /&gt;
=== Queue Limits ===&lt;br /&gt;
&lt;br /&gt;
The maximum wall_clock_limit is 24 hours.  Official SOSCIP project jobs are prioritized over all other jobs using a fairshare algorithm with a 14 day rolling window.&lt;br /&gt;
&lt;br /&gt;
A 64 node block is reserved for development and interactive testing for 16 hours, from 8AM to midnight, everyday including weekends. While you can still reserve an interactive block from midnight to 8AM, the priority is given to batch jobs at that time interval in order to keep the machine usage as high as possible. This block is accessed by using the [[BGQ#Interactive_Use_.2F_Debugging | &amp;lt;tt&amp;gt;'''debugjob'''&amp;lt;/tt&amp;gt;]] command which has a 30 minute maximum wall_clock_limit. The purpose of this reservation is to ensure short testing jobs are run quickly without being held up by longer production type jobs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- We need to recover this functionality again. At the moment it doesn't work&lt;br /&gt;
=== BACKFILL scheduling ===&lt;br /&gt;
To optimize the cluster usage, we encourage users to submit jobs according to the available resources on BGQ. The command &amp;lt;span style=&amp;quot;color: red;font-weight: bold;&amp;quot;&amp;gt;llAvailableResources&amp;lt;/span&amp;gt; gives for example :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
On the Devel system : only a debugjob can start immediately&lt;br /&gt;
&lt;br /&gt;
On the Prod. system : a job will start immediately if you use 512 nodes requesting a walltime T &amp;lt;= 21 hours and 11 min &lt;br /&gt;
On the Prod. system : a job will start immediately if you use 256 nodes requesting a walltime T &amp;lt;= 21 hours and 11 min &lt;br /&gt;
On the Prod. system : a job will start immediately if you use 128 nodes requesting a walltime T &amp;lt;= 24 hours and 0 min &lt;br /&gt;
On the Prod. system : a job will start immediately if you use 64 nodes requesting a walltime T &amp;lt;= 24 hours and 0 min&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Batch Jobs ===&lt;br /&gt;
&lt;br /&gt;
Job submission is done through loadleveler with a few blue gene specific commands.  The command &amp;quot;bg_size&amp;quot; is in number of nodes, not cores, so a bg_size=64 would be 64x16=1024 cores.&lt;br /&gt;
&lt;br /&gt;
The parameter &amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;bg_size&amp;lt;/span&amp;gt; can only be equal to 64, 128, 256, 512, 1024 and 2048.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt; &amp;amp;le; ranks-per-node * bg_size&lt;br /&gt;
&lt;br /&gt;
ranks-per-node &amp;amp;le; np&lt;br /&gt;
&lt;br /&gt;
(ranks-per-node * OMP_NUM_THREADS ) &amp;amp;le; 64 &lt;br /&gt;
&lt;br /&gt;
np : number of MPI processes&lt;br /&gt;
&lt;br /&gt;
ranks-per-node : number of MPI processes per node = 1 , 2 , 4 , 8 , 16 , 32 , 64&lt;br /&gt;
&lt;br /&gt;
OMP_NUM_THREADS : number of OpenMP thread per MPI process (for hybrid codes) = 1 , 2 , 4 , 8 , 16 , 32 , 64&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# @ job_name           = bgsample&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job By Size&amp;quot;&lt;br /&gt;
# @ error              = $(job_name).$(Host).$(jobid).err&lt;br /&gt;
# @ output             = $(job_name).$(Host).$(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 30:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ queue &lt;br /&gt;
&lt;br /&gt;
# Launch all BGQ jobs using runjob&lt;br /&gt;
runjob --np 1024 --ranks-per-node=16 --envs OMP_NUM_THREADS=1 --cwd=$SCRATCH/ : $HOME/mycode.exe myflags&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To submit to the queue use &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llsubmit myscript.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Steps ( Job dependency) ===&lt;br /&gt;
LoadLeveler has a lot of advanced features to control job submission and execution. One of these features is called steps. This feature allows a series of jobs to be submitted using one script with dependencies defined between the jobs. What this allows is for a series of jobs to be run sequentially, waiting for the previous job, called a step, to be finished before the next job is started. The following example uses the same LoadLeveler script as previously shown, however the #@ step_name and #@ dependency directives are used to rerun the same case three times in a row, waiting until each job is finished to start the next.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# @ job_name           = bgsample&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job By Size&amp;quot;&lt;br /&gt;
# @ error              = $(job_name).$(Host).$(jobid).err&lt;br /&gt;
# @ output             = $(job_name).$(Host).$(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 30:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ step_name = step1                                                                                                                                                                                                                        &lt;br /&gt;
# @ queue&lt;br /&gt;
# Launch the first step :&lt;br /&gt;
if [ $LOADL_STEP_NAME = &amp;quot;step1&amp;quot; ]; then&lt;br /&gt;
    runjob --np 1024 --ranks-per-node=16 --envs OMP_NUM_THREADS=1 --cwd=$SCRATCH/ : $HOME/mycode.exe myflags&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# @ job_name           = bgsample&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job By Size&amp;quot;&lt;br /&gt;
# @ error              = $(job_name).$(Host).$(jobid).err&lt;br /&gt;
# @ output             = $(job_name).$(Host).$(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 30:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ step_name = step2                                                                                                                                                                                                                        &lt;br /&gt;
# @ dependency = step1 == 0                                                                                                                                                                                                                        &lt;br /&gt;
# @ queue&lt;br /&gt;
# Launch the second step if the first one has returned 0 (done successfully) :&lt;br /&gt;
if [ $LOADL_STEP_NAME = &amp;quot;step2&amp;quot; ]; then&lt;br /&gt;
    runjob --np 1024 --ranks-per-node=16 --envs OMP_NUM_THREADS=1 --cwd=$SCRATCH/ : $HOME/mycode.exe myflags&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# @ job_name           = bgsample&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job By Size&amp;quot;&lt;br /&gt;
# @ error              = $(job_name).$(Host).$(jobid).err&lt;br /&gt;
# @ output             = $(job_name).$(Host).$(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 30:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ step_name = step3                                                                                                                                                                                                                        &lt;br /&gt;
# @ dependency = step2 == 0                                                                                                                                                                                                                        &lt;br /&gt;
# @ queue&lt;br /&gt;
# Launch the third step if the second one has returned 0 (done successfully) :&lt;br /&gt;
if [ $LOADL_STEP_NAME = &amp;quot;step3&amp;quot; ]; then&lt;br /&gt;
    runjob --np 1024 --ranks-per-node=16 --envs OMP_NUM_THREADS=1 --cwd=$SCRATCH/ : $HOME/mycode.exe myflags&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Monitoring Jobs ===&lt;br /&gt;
&lt;br /&gt;
To see running jobs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llq2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llq -b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to cancel a job use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llcancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to look at details of the bluegene resources use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llbgstatus -M all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: the loadleveler script commands  are not run on a bgq compute node but on the front-end node. Only programs started with runjob run on the bgq compute nodes. You should therefore keep scripting in the submission script to a bare minimum.'''&lt;br /&gt;
&lt;br /&gt;
=== Monitoring Stats ===&lt;br /&gt;
&lt;br /&gt;
Use llbgstats to monitor your own stats and/or your group stats. PIs can also print their (current) monthly report.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llbgstats -h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interactive Use / Debugging ===&lt;br /&gt;
&lt;br /&gt;
As BGQ codes are cross-compiled they cannot be run direclty on the front-nodes.  &lt;br /&gt;
Users however only have access to the BGQ through loadleveler which is appropriate for batch jobs, &lt;br /&gt;
however an interactive session is typically beneficial when debugging and developing.   As such a &lt;br /&gt;
script has been written to allow a session in which runjob can be run interactively.  The script&lt;br /&gt;
uses loadleveler to setup a block and set all the correct environment variables and then launch a spawned shell on&lt;br /&gt;
the front-end node. The '''debugjob''' session currently allows a 30 minute session on 64 nodes and when run on &lt;br /&gt;
'''&amp;lt;tt&amp;gt;bgqdev&amp;lt;/tt&amp;gt;''' runs in a dedicated reservation as described previously in the [[BGQ#Queue_Limits | queue limits]] section. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[user@bgqdev-fen1]$ debugjob&lt;br /&gt;
&lt;br /&gt;
[user@bgqdev-fen1]$ runjob --np 64 --ranks-per-node=16 --cwd=$PWD : $PWD/my_code -f myflags&lt;br /&gt;
&lt;br /&gt;
[user@bgqdev-fen1]$ exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For debugging, gdb and Allinea DDT are available. The latter is recommended as it automatically attaches to all the processes of a process (instead of attaching a gdbtool by hand (as explained in the BGQ Application Development guide, link below). Simply compile with &amp;lt;tt&amp;gt;-g&amp;lt;/tt&amp;gt;, load the &amp;lt;tt&amp;gt;ddt/4.1&amp;lt;/tt&amp;gt; module, type &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt; and follow the graphical user interface.  The DDT user guide can be found below.&lt;br /&gt;
&lt;br /&gt;
Note: when running a job under ddt, you'll need to add &amp;quot;&amp;lt;tt&amp;gt;--ranks-per-node=X&amp;lt;/tt&amp;gt;&amp;quot; to the &amp;quot;runjob arguments&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
Apart from debugging, this environment is also useful for building libraries and applications that need to run small tests as part of their 'configure' step.   Within the debugjob session, applications compiled with the bgxl compilers or the mpcc/mpCC/mpfort wrappers, will automatically run on the BGQ, skipping the need for the runjob command, provided if you set the following environment variables &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ export BG_PGM_LAUNCHER=yes&lt;br /&gt;
$ export RUNJOB_NP=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The latter setting sets the number of mpi processes to run.  Most configure scripts expect only one mpi process, thus, &amp;lt;tt&amp;gt;RUNJOB_NP=1&amp;lt;/tt&amp;gt; is appropriate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
debugjob session with an executable implicitly calls runjob  with 1 mpi task :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
debugjob -i&lt;br /&gt;
**********************************************************&lt;br /&gt;
 Interactive BGQ runjob shell using bgq-fen1-ib0.10295.0 and           &lt;br /&gt;
 LL14040718574824 for 30 minutes with 64 NODES (1024 cores). &lt;br /&gt;
 IMPLICIT MODE: running an executable implicitly calls runjob&lt;br /&gt;
                with 1 mpi task&lt;br /&gt;
 Exit shell when finished.                                &lt;br /&gt;
**********************************************************&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sub-block jobs ===&lt;br /&gt;
&lt;br /&gt;
BGQ allows multiple applications to share the same block, which is referred to as sub-block jobs, however this needs to be done from within the same loadleveler submission script using multiple calls to runjob.  To run a sub-block job, you need to specify a &amp;quot;--corner&amp;quot; within the block to start each job and a 5D Torus AxBxCxDxE &amp;quot;--shape&amp;quot;.  The starting corner will depend on the specific block details provided by loadleveler and the shape and size of job trying to be used.  &lt;br /&gt;
&lt;br /&gt;
Figuring out what the corners and shapes should be is very tricky (especially since it depends on the block you get allocated).  For that reason, we've created a script called &amp;lt;tt&amp;gt;subblocks&amp;lt;/tt&amp;gt; that determines the corners and shape of the sub-blocks.  It only handles the (presumable common) case in which you want to subdivide the block into n equally sized sub-blocks, where n may be 1,2,4,8,16 and 32.&lt;br /&gt;
&lt;br /&gt;
Here is an example script calling &amp;lt;tt&amp;gt;subblocks&amp;lt;/tt&amp;gt; with a size of 4 that will return the appropriate $SHAPE argument and an array of 16 starting $CORNER. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# @ job_name           = bgsubblock&lt;br /&gt;
# @ job_type           = bluegene&lt;br /&gt;
# @ comment            = &amp;quot;BGQ Job SUBBLOCK &amp;quot;&lt;br /&gt;
# @ error              = $(job_name).$(Host).$(jobid).err&lt;br /&gt;
# @ output             = $(job_name).$(Host).$(jobid).out&lt;br /&gt;
# @ bg_size            = 64&lt;br /&gt;
# @ wall_clock_limit   = 30:00&lt;br /&gt;
# @ bg_connectivity    = Torus&lt;br /&gt;
# @ queue&lt;br /&gt;
&lt;br /&gt;
# Using subblocks script to set $SHAPE and array of ${CORNERS[n]}&lt;br /&gt;
# with size of subblocks in nodes (ie similiar to bg_size)&lt;br /&gt;
&lt;br /&gt;
# In this case 16 sub-blocks of 4 cnodes each (64 total ie bg_size)&lt;br /&gt;
source subblocks 4&lt;br /&gt;
&lt;br /&gt;
# 16 jobs of 4 each&lt;br /&gt;
for (( i=0; i &amp;lt;  16 ; i++)); do&lt;br /&gt;
   runjob --corner ${CORNER[$i]} --shape $SHAPE --np 64 --ranks-per-node=16 :  your_code_here &amp;gt; $i.out &amp;amp;&lt;br /&gt;
done&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Remember that subjobs are not the ideal way to run on the BlueGene/Qs. One needs to consider that these sub-blocks all have to share the same I/O nodes, so for I/O intensive jobs this will be an inefficient setup.  Also consider that if you need to run such small jobs that you have to run in sub-blocks, it may be more efficient to use other clusters such as the GPC.&lt;br /&gt;
&lt;br /&gt;
Let us know if you run into any issues with this technique, please contact bgq-support for help.&lt;br /&gt;
&lt;br /&gt;
== Filesystem ==&lt;br /&gt;
&lt;br /&gt;
The BGQ has its own dedicated 500TB file system based on GPFS (General Parallel File System). There are two main systems for user data: /home, a small, backed-up space where user home directories are located, and /scratch, a large system for input or output data for jobs; data on /scratch is not backed up. The path to your home directory is in the environment variable $HOME, and will look like /home/G/GROUP/USER, .  The path to your scratch directory is in the environment variable $SCRATCH, and will look like /scratch/G/GROUP/USER (following the conventions of the rest of the SciNet systems).  &lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! {{Hl2}} | file system &lt;br /&gt;
! {{Hl2}} | purpose &lt;br /&gt;
! {{Hl2}} | user quota &lt;br /&gt;
! {{Hl2}} | backed up&lt;br /&gt;
! {{Hl2}} | purged&lt;br /&gt;
|- &lt;br /&gt;
| /home&lt;br /&gt;
| development&lt;br /&gt;
| 50 GB&lt;br /&gt;
| yes&lt;br /&gt;
| never&lt;br /&gt;
|-&lt;br /&gt;
| /scratch&lt;br /&gt;
| computation&lt;br /&gt;
| first of (20 TB ; 1 million files)&lt;br /&gt;
| no&lt;br /&gt;
| not currently&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Transfering files===&lt;br /&gt;
The BGQ GPFS file system,  except for HPSS, is '''not''' shared with the other SciNet systems (gpc, tcs, p7, arc), nor is the other file system mounted on the BGQ.  &lt;br /&gt;
Use scp to copy files from one file system to the other, e.g., from bgqdev-fen1, you could do&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ scp -c arcfour login.scinet.utoronto.ca:code.tgz .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or from a login node you could do&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ scp -c arcfour code.tgz bgqdev.scinet.utoronto.ca:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The flag &amp;lt;tt&amp;gt;-c arcfour&amp;lt;/tt&amp;gt; is optional. It tells scp (or really, ssh), to use a non-default encryption. The one chosen here, arcfour, has been found to speed up the transfer by a factor of two (you may expect around 85MB/s).  This encryption method is only recommended for copying from the BGQ file system to the regular SciNet GPFS file system or back. &lt;br /&gt;
 &lt;br /&gt;
Note that although these transfers are witihin the same data center, you have to use the full names of the systems, login.scinet.utoronto.ca and bgq.scinet.utoronto.ca, respectively, and that you will be asked you for your password.&lt;br /&gt;
&lt;br /&gt;
===How much Disk Space Do I have left?===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;'''diskUsage'''&amp;lt;/tt&amp;gt; command, available on the bgqdev nodes, provides information in a number of ways on the home and scratch file systems. For instance, how much disk space is being used by yourself and your group (with the -a option), or how much your usage has changed over a certain period (&amp;quot;delta information&amp;quot;) or you may generate plots of your usage over time. Please see the usage help below for more details.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: diskUsage [-h|-?| [-a] [-u &amp;lt;user&amp;gt;] [-de|-plot]&lt;br /&gt;
       -h|-?: help&lt;br /&gt;
       -a: list usages of all members on the group&lt;br /&gt;
       -u &amp;lt;user&amp;gt;: as another user on your group&lt;br /&gt;
       -de: include delta information&lt;br /&gt;
       -plot: create plots of disk usages&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the information on usage and quota is only updated hourly!&lt;br /&gt;
&lt;br /&gt;
===Bridge to HPSS===&lt;br /&gt;
&lt;br /&gt;
BGQ users may transfer material to/from HPSS via the GPC archive queue. On the HPSS gateway node (gpc-archive01), the BGQ GPFS file systems are mounted under a single mounting point /bgq (/bgq/scratch and /bgq/home). For detailed information on the use of HPSS [https://support.scinet.utoronto.ca/wiki/index.php/HPSS please read the HPSS wiki section.]&lt;br /&gt;
&lt;br /&gt;
== Software modules installed on the BGQ ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!{{Hl2}} |Software  &lt;br /&gt;
!{{Hl2}}| Version&lt;br /&gt;
!{{Hl2}}| Comments&lt;br /&gt;
!{{Hl2}}| Command/Library&lt;br /&gt;
!{{Hl2}}| Module Name&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Compilers &amp;amp; Development Tools'''''&lt;br /&gt;
|-&lt;br /&gt;
|IBM fortran compiler&lt;br /&gt;
|14.1&lt;br /&gt;
|These are cross compilers&lt;br /&gt;
|&amp;lt;tt&amp;gt;bgxlf,bgxlf_r,bgxlf90,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|xlf&lt;br /&gt;
|-&lt;br /&gt;
|IBM c/c++ compilers&lt;br /&gt;
|12.1&lt;br /&gt;
|These are cross compilers&lt;br /&gt;
|&amp;lt;tt&amp;gt;bgxlc,bgxlC,bgxlc_r,bgxlC_r,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|vacpp&lt;br /&gt;
|-&lt;br /&gt;
|MPICH2 MPI library&lt;br /&gt;
|1.4.1&lt;br /&gt;
|There are 4 versions (see BGQ Applications Development document).&lt;br /&gt;
|&amp;lt;tt&amp;gt;mpicc,mpicxx,mpif77,mpif90&amp;lt;/tt&amp;gt;&lt;br /&gt;
|mpich2&lt;br /&gt;
|- &lt;br /&gt;
| GCC Compiler&lt;br /&gt;
| 4.4.6, 4.8.1&lt;br /&gt;
| GNU Compiler Collection for BGQ&amp;lt;br&amp;gt;(4.8.1 requires binutils/2.23 to be loaded)&lt;br /&gt;
| &amp;lt;tt&amp;gt;powerpc64-bgq-linux-gcc, powerpc64-bgq-linux-g++, powerpc64-bgq-linux-gfortran&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;bgqgcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Clang Compiler&lt;br /&gt;
| r217688-20140912, r263698-20160317&lt;br /&gt;
| Clang cross-compilers for bgq&lt;br /&gt;
| &amp;lt;tt&amp;gt;powerpc64-bgq-linux-clang, powerpc64-bgq-linux-clang++&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;bgclang&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Binutils&lt;br /&gt;
| 2.21.1, 2.23&lt;br /&gt;
| Cross-compilation utilities&lt;br /&gt;
| &amp;lt;tt&amp;gt;addr2line, ar, ld, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;binutils&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CMake	&lt;br /&gt;
| 2.8.8, 2.8.12.1&lt;br /&gt;
| cross-platform, open-source build system&lt;br /&gt;
| &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Git&lt;br /&gt;
| 1.9.5&lt;br /&gt;
| Revision control system&lt;br /&gt;
| &amp;lt;tt&amp;gt;git, gitk&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Debug/performance tools'''''&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.gnu.org/software/gdb/ gdb]&lt;br /&gt;
| 7.2&lt;br /&gt;
| GNU Debugger&lt;br /&gt;
| &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.gnu.org/software/ddd/ ddd]&lt;br /&gt;
| 3.3.12&lt;br /&gt;
| GNO Data Display Debugger&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddd&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.allinea.com/products/ddt/ DDT]&lt;br /&gt;
| 4.1, 4.2, 5.0.1&lt;br /&gt;
| Allinea's Distributed Debugging Tool&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[HPCTW]]&lt;br /&gt;
| 1.0&lt;br /&gt;
| BGQ MPI and Hardware Counters&lt;br /&gt;
| &amp;lt;tt&amp;gt;libmpihpm.a, libmpihpm_smp.a, libmpitrace.a &amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hptibm&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [[MemP]]&lt;br /&gt;
| 1.0.3&lt;br /&gt;
| BGQ Memory Stats&lt;br /&gt;
| &amp;lt;tt&amp;gt;libmemP.a &amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;memP&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Storage tools/libraries'''''&lt;br /&gt;
|-&lt;br /&gt;
| HDF5&lt;br /&gt;
| 1.8.9-v18&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;h5ls, h5diff, ..., libhdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hdf5/189-v18-serial-xlc*&amp;lt;br/&amp;gt;hdf5/189-v18-mpich2-xlc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HDF5&lt;br /&gt;
| 1.8.12-v18&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;h5ls, h5diff, ..., libhdf5&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;hdf5/1812-v18-serial-gcc&amp;lt;br/&amp;gt;hdf5/1812-v18-mpich2-gcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NetCDF&lt;br /&gt;
| 4.2.1.1&lt;br /&gt;
| Scientific data storage and retrieval&lt;br /&gt;
| &amp;lt;tt&amp;gt;ncdump,ncgen,libnetcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;netcdf/4.2.1.1-serial-xlc*&amp;lt;br/&amp;gt;netcdf/4.2.1.1-mpich2-xlc&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Parallel NetCDF&lt;br /&gt;
| 1.3.1&lt;br /&gt;
| Parallel scientific data storage and retrieval using MPI-IO&lt;br /&gt;
| &amp;lt;tt&amp;gt;libpnetcdf.a&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;parallel-netcdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Libraries'''''&lt;br /&gt;
|-&lt;br /&gt;
| ESSL&lt;br /&gt;
| 5.1&lt;br /&gt;
| IBM Engineering and Scientific Subroutine Library (manual below)&lt;br /&gt;
| &amp;lt;tt&amp;gt;libesslbg,libesslsmpbg&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;essl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| WSMP&lt;br /&gt;
| 15.06.01&lt;br /&gt;
| Watson Sparse Matrix Package&lt;br /&gt;
| &amp;lt;tt&amp;gt;libpwsmpBGQ.a&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;WSMP&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| FFTW&lt;br /&gt;
| 2.1.5, 3.3.2, 3.1.2-esslwrapper&lt;br /&gt;
| Fast fourier transform &lt;br /&gt;
| &amp;lt;tt&amp;gt;libsfftw,libdfftw,libfftw3, libfftw3f&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;fftw/2.1.5, fftw/3.3.2, fftw/3.1.2-esslwrapper&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| LAPACK + ScaLAPACK&lt;br /&gt;
| 3.4.2 + 2.0.2&lt;br /&gt;
| Linear algebra routines. A subset of Lapack may be found in ESSL as well.&lt;br /&gt;
| &amp;lt;tt&amp;gt;liblapack, libscalpack&amp;lt;/tt&amp;gt;&lt;br /&gt;
| lapack&lt;br /&gt;
|-&lt;br /&gt;
| GSL&lt;br /&gt;
| 1.15&lt;br /&gt;
| GNU Scientific Library&lt;br /&gt;
| &amp;lt;tt&amp;gt;libgsl, libgslcblas&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gsl&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BOOST&lt;br /&gt;
| 1.47.0, 1.54, 1.57&lt;br /&gt;
| C++ Boost libraries&lt;br /&gt;
| &amp;lt;tt&amp;gt;libboost...&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cxxlibraries/boost&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| bzip2 + szip + zlib&lt;br /&gt;
| 1.0.6 + 2.1 + 1.2.7&lt;br /&gt;
| compression libraries&lt;br /&gt;
| &amp;lt;tt&amp;gt;libbz2,libz,libsz&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;compression&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| METIS&lt;br /&gt;
| 5.0.2&lt;br /&gt;
| Serial Graph Partitioning and Fill-reducing Matrix Ordering&lt;br /&gt;
| &amp;lt;tt&amp;gt;libmetis&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;metis&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ParMETIS&lt;br /&gt;
| 4.0.2&lt;br /&gt;
| Parallel graph partitioning and fill-reducing matrix ordering&lt;br /&gt;
| &amp;lt;tt&amp;gt;libparmetis&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;parmetis&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| OpenSSL&lt;br /&gt;
| 1.0.2 &lt;br /&gt;
| General-purpose cryptography library&lt;br /&gt;
| &amp;lt;tt&amp;gt;libcrypto, libssl&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;openssl&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| FILTLAN&lt;br /&gt;
| 1.0&lt;br /&gt;
| The Filtered Lanczos Package &lt;br /&gt;
| &amp;lt;tt&amp;gt;libdfiltlan,libdmatkit,libsfiltlan,libsmatkit&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;FILTLAN&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Scripting/interpreted languages'''''&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]]&lt;br /&gt;
| 2.6.6&lt;br /&gt;
| Python programming language&lt;br /&gt;
| &amp;lt;tt&amp;gt;/bgsys/tools/Python-2.6/bin/python&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]]&lt;br /&gt;
| 2.7.3&lt;br /&gt;
| Python programming language. Modules included : numpy-1.8.0, pyFFTW-0.9.2, astropy-0.3, scipy-0.13.3, mpi4py-1.3.1, h5py-2.2.1&lt;br /&gt;
| &amp;lt;tt&amp;gt;/scinet/bgq/tools/Python/python2.7.3-20131205/bin/python&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]]&lt;br /&gt;
| 3.2.2&lt;br /&gt;
| Python programming language&lt;br /&gt;
| &amp;lt;tt&amp;gt;/bgsys/tools/Python-3.2/bin/python3&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Applications'''''&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.abinit.org/ ABINIT]&lt;br /&gt;
| 7.10.4&lt;br /&gt;
| An atomic-scale simulation software suite&lt;br /&gt;
| &amp;lt;tt&amp;gt;abinit&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;abinit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.berkeleygw.org/ BerkeleyGW library]&lt;br /&gt;
| 1.0.4-2.0.0436&lt;br /&gt;
| Computes quasiparticle properties and the optical responses of a large variety of materials&lt;br /&gt;
| &amp;lt;tt&amp;gt;libBGW_wfn.a, wfn_rho_vxc_io_m.mod&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;BGW-paratec&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cp2k.org/ CP2K]&lt;br /&gt;
| 2.3, 2.4, 2.5.1, 2.6.1&lt;br /&gt;
| DFT molecular dynamics, MPI &lt;br /&gt;
| &amp;lt;tt&amp;gt;cp2k.psmp&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cp2k&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cpmd.org/ CPMD]&lt;br /&gt;
| 3.15.3, 3.17.1&lt;br /&gt;
| Carr-Parinello molecular dynamics, MPI&lt;br /&gt;
| &amp;lt;tt&amp;gt;cpmd.x&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cpmd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| gnuplot&lt;br /&gt;
| 4.6.1&lt;br /&gt;
| interactive plotting program to be run on front-end nodes&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnuplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;gnuplot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| LAMMPS&lt;br /&gt;
| Nov 2012/7Dec15/7Dec15-mpi&lt;br /&gt;
| Molecular Dynamics &lt;br /&gt;
| &amp;lt;tt&amp;gt;lmp_bgq&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;lammps&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NAMD&lt;br /&gt;
| 2.9&lt;br /&gt;
| Molecular Dynamics &lt;br /&gt;
| &amp;lt;tt&amp;gt;namd2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;namd/2.9-smp&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.quantum-espresso.org/index.php Quantum Espresso]&lt;br /&gt;
| 5.0.3/5.2.1&lt;br /&gt;
| Molecular Structure / Quantum Chemistry &lt;br /&gt;
| &amp;lt;tt&amp;gt;qe_pw.x, etc&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;espresso&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[BGQ_OpenFOAM | OpenFOAM]]&lt;br /&gt;
| 2.2.0, 2.3.0, 2.4.0, 3.0.1&lt;br /&gt;
| Computational Fluid Dynamics&lt;br /&gt;
| &amp;lt;tt&amp;gt;icofoam,etc. &amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;openfoam/2.2.0, openfoam/2.3.0, openfoam/2.4.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=5 style='background: #E0E0E0'|'''''Beta Tests'''''&lt;br /&gt;
|-&lt;br /&gt;
| WATSON API&lt;br /&gt;
| beta&lt;br /&gt;
| Natural Language Processing&lt;br /&gt;
| &amp;lt;tt&amp;gt;watson_beta&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;FEN/WATSON&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OpenFOAM on BGQ ===&lt;br /&gt;
[https://wiki.scinet.utoronto.ca/wiki/index.php/BGQ_OpenFOAM How to use OpenFOAM on BGQ]&lt;br /&gt;
&lt;br /&gt;
== Python on BlueGene ==&lt;br /&gt;
Python 2.7.3 has been installed on BlueGene. To use &amp;lt;span style=&amp;quot;color: red;font-weight: bold;&amp;quot;&amp;gt;Numpy&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;color: red;font-weight: bold;&amp;quot;&amp;gt;Scipy&amp;lt;/span&amp;gt;, the module &amp;lt;span style=&amp;quot;color: red;font-weight: bold;&amp;quot;&amp;gt;essl/5.1&amp;lt;/span&amp;gt; has to be loaded.&lt;br /&gt;
The full python path has to be provided (otherwise the default version is used).&lt;br /&gt;
&lt;br /&gt;
To use python on BlueGene (from within a job script or a debugjob session):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module load python/2.7.3&lt;br /&gt;
##Only if you need numpy/scipy :&lt;br /&gt;
module load xlf/14.1 essl/5.1&lt;br /&gt;
runjob --np 1 --ranks-per-node=1 --envs HOME=$HOME LD_LIBRARY_PATH=$LD_LIBRARY_PATH PYTHONPATH=/scinet/bgq/tools/Python/python2.7.3-20131205/lib/python2.7/site-packages/ : /scinet/bgq/tools/Python/python2.7.3-20131205/bin/python2.7 /PATHOFYOURSCRIPT.py &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use the mmap python API, you must use it in PRIVATE mode as shown in the bellow example :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import mmap&lt;br /&gt;
mm=mmap.mmap(-1,256,mmap.MAP_PRIVATE)&lt;br /&gt;
mm.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the mpi4py and h5py modules.&lt;br /&gt;
&lt;br /&gt;
Also, please read Cython documentation.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
#BGQ Day: Intro to Using the BGQ&amp;lt;br/&amp;gt;[[File:BgqIntro-FirstFrame.png|180px|link=http://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqintro/bgqintro.html]]&amp;lt;br/&amp;gt;[[Media:BgqintroUpdatedMarch2015.pdf|Slides (updated in 2015) ]] &amp;amp;nbsp;/ &amp;amp;nbsp; [http://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqintro/bgqintro.html Video recording] [http://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqintro/bgqintro.mp4 (direct link)]&lt;br /&gt;
#BGQ Day: BGQ Hardware Overview&amp;lt;br/&amp;gt;[[File:Bgqhardware-FirstFrame.png|180px|link=http://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqhardware/bgqhardware.html]]&amp;lt;br/&amp;gt;[https://support.scinet.utoronto.ca/~northrup/bgqhardware.pdf Slides] &amp;amp;nbsp;/ &amp;amp;nbsp; [http://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqhardware/bgqhardware.html Video recording] [http://support.scinet.utoronto.ca/CourseVideo/BGQ/bgqhardware/bgqhardware.mp4 (direct link)]&lt;br /&gt;
# [http://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JUQUEEN/Documentation/Documention_node.html Julich BGQ Documentation]&lt;br /&gt;
# [https://wiki.alcf.anl.gov/parts/index.php/Blue_Gene/Q Argonne Mira BGQ Wiki]&lt;br /&gt;
# [https://computing.llnl.gov/tutorials/bgq/ LLNL Sequoia BGQ Info]&lt;br /&gt;
# [https://www.alcf.anl.gov/presentations Argonne MiraCon Presentations]&lt;br /&gt;
# [http://www.redbooks.ibm.com/redbooks/SG247869/wwhelp/wwhimpl/js/html/wwhelp.htm BGQ System Administration Guide]&lt;br /&gt;
# [http://www.redbooks.ibm.com/redbooks/SG247948/wwhelp/wwhimpl/js/html/wwhelp.htm BGQ Application Development ]&lt;br /&gt;
# IBM XL C/C++ for Blue Gene/Q: [[Media:bgqcgetstart.pdf|Getting started]]&lt;br /&gt;
# IBM XL C/C++ for Blue Gene/Q: [[Media:bgqccompiler.pdf|Compiler reference]]&lt;br /&gt;
# IBM XL C/C++ for Blue Gene/Q: [[Media:bgqclangref.pdf|Language reference]]&lt;br /&gt;
# IBM XL C/C++ for Blue Gene/Q: [[Media:bgqcproguide.pdf|Optimization and Programming Guide]]&lt;br /&gt;
# IBM XL Fortran for Blue Gene/Q: [[Media:bgqfgetstart.pdf|Getting started]]&lt;br /&gt;
# IBM XL Fortran for Blue Gene/Q: [[Media:bgqfcompiler.pdf|Compiler reference]]&lt;br /&gt;
# IBM XL Fortran for Blue Gene/Q: [[Media:bgqflangref.pdf|Language reference]]&lt;br /&gt;
# IBM XL Fortran for Blue Gene/Q: [[Media:bgqfproguide.pdf|Optimization and Programming Guide]]&lt;br /&gt;
# [[Media:essl51.pdf|IBM ESSL (Engineering and Scientific Subroutine Library) 5.1 for Linux on Power]]&lt;br /&gt;
# [http://content.allinea.com/downloads/userguide.pdf Allinea DDT 4.1 User Guide]&lt;br /&gt;
# [https://www.ibm.com/support/knowledgecenter/en/SSFJTW_5.1.0/loadl.v5r1_welcome.html IBM LoadLeveler 5.1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--  PUT IN TRAC !!!&lt;br /&gt;
&lt;br /&gt;
=== *Manual Block Creation* ===&lt;br /&gt;
&lt;br /&gt;
To reconfigure the BGQ nodes you can use the bg_console or the web based navigator from the service node &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bg_console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are various options to create block types (section 3.2 in the BGQ admin manual), but the smallest is created using the&lt;br /&gt;
following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gen_small_block &amp;lt;blockid&amp;gt; &amp;lt;midplane&amp;gt; &amp;lt;cnodes&amp;gt; &amp;lt;nodeboard&amp;gt; &lt;br /&gt;
gen_small_block  R00-M0-N03-32 R00-M0 32 N03&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The block then needs to be booted using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allocate R00-M0-N03-32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If those resources are already booted into another block, that block must be freed before the new block can be &lt;br /&gt;
allocated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
free R00-M0-N03&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are many other functions in bg_console:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
help all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BGQ default nomenclature for hardware is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(R)ack - (M)idplane - (N)ode board or block - (J)node - (C)ore&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So R00-M01-N03-J00-C02 would correspond to the first rack, second midplane, 3rd block, 1st node, and second core.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--!&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.scinet.utoronto.ca/index.php?title=SciNet_User_Support_Library&amp;diff=9365</id>
		<title>SciNet User Support Library</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.scinet.utoronto.ca/index.php?title=SciNet_User_Support_Library&amp;diff=9365"/>
		<updated>2018-05-15T18:59:32Z</updated>

		<summary type="html">&lt;p&gt;Rzon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;border-spacing: 8px; width:100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:2px solid; background-color:#f6f674; border-radius:5px&amp;quot;|&lt;br /&gt;
'''WARNING: SciNet is in the process of replacing this wiki with a new documentation site. For current information, please go to [https://docs.scinet.utoronto.ca https://docs.scinet.utoronto.ca]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|  style=&amp;quot;border-spacing: 8px;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:3px solid #0645ad; background-color:#f6f6f6; border-radius:7px&amp;quot;|&lt;br /&gt;
{{SciNetWiki:System_Alerts}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;cellpadding:1em; padding:1em; border:3px solid #0645ad; background-color:#f6f6f6; border-radius:7px&amp;quot;|&lt;br /&gt;
==System News==&lt;br /&gt;
* April 23, 2018: GPC &amp;amp; Sandy decommissioned.&lt;br /&gt;
* April 10, 2018: Niagara commissioned.&lt;br /&gt;
* March 20th, 2018: Gravity decommissioned.&lt;br /&gt;
* Dec 4, 2017 : scratchtcs decommissioned.&lt;br /&gt;
* Nov 28, 2017: The GPC has been reduced from 30,912 to 16,800 cores to make room for the installation of Niagara.&lt;br /&gt;
* Sept 29, 2017: The TCS has been decommissioned.&lt;br /&gt;
&lt;br /&gt;
([[Previous System News]])&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;padding:1em; border:1px solid #aaaaaa; background-color:#f6e8e8; border-radius:7px&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== QuickStart Guides ==&lt;br /&gt;
* [[SciNet Command Line Utilities]]&lt;br /&gt;
* [[Media:SciNet_Tutorial.pdf|SciNet User Tutorial]]&lt;br /&gt;
* [[P7_Linux_Cluster|P7: Power 7 Linux cluster]]&lt;br /&gt;
* [[BGQ|BGQ: BlueGene/Q clusters]]&lt;br /&gt;
* [[Software_and_Libraries|Software and libraries]]&lt;br /&gt;
* [[Data_Management|Data management]]&lt;br /&gt;
* [[FAQ | FAQ (frequently asked questions)]]&lt;br /&gt;
* [[Acknowledging_SciNet | Acknowledging SciNet]]&lt;br /&gt;
* [https://courses.scinet.utoronto.ca SciNet education]&lt;br /&gt;
* [https://www.youtube.com/channel/UC42CaO-AAQhwqa8RGzE3daQ SciNet YouTube Channel]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;padding:1em; border:1px solid #aaaaaa; background-color:#e8f6e8; border-radius:7px&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Tutorials and Manuals ==&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#SciNet_Basics|SciNet basics]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Linux|Linux]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Batch_job_management|Batch job management]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Programming|Programming]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Parallel_Programming|Parallel programming]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#GPU_Computing|GPU computing]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Performance_Tuning|Performance tuning]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Debugging|Debugging]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Math_libraries_.28BLAS.2C_LAPACK.2C_FFT.29|Math libraries (BLAS, LAPACK, FFT)]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#I/O|I/O and databases]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Visualization|Visualization]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Applications|Applications]]&lt;br /&gt;
* [[Knowledge_Base:_Tutorials_and_Manuals#Manuals|Manuals (compilers etc)]]&lt;br /&gt;
* [[2016_Ontario_Summer_School_for_High_Performance_Computing_Central]]&lt;br /&gt;
* [[2015_Ontario_Summer_School_for_High_Performance_Computing_Central]]&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;padding:1em; border:1px solid #aaaaaa; background-color:#e8e8f6; border-radius:7px&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What's New On The Wiki ==&lt;br /&gt;
&amp;lt;div style='text-align:left;'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dec 2014: Updated [[GPC Quickstart]] with info on email notifications from the scheduler.&lt;br /&gt;
&lt;br /&gt;
* Dec 2014: [[Hdf5]] compilation page updated.&lt;br /&gt;
&lt;br /&gt;
* Dec 2014: [[Research Computing with Python 2014]] lectures 5-8&lt;br /&gt;
&lt;br /&gt;
* Nov 2014: &amp;quot;Modern CUDA Features&amp;quot; TechTalk slides in [[SciNet TechTalks and Seminars]].&lt;br /&gt;
&lt;br /&gt;
* Nov 2014: [[Research Computing with Python 2014]] lectures 1-4&lt;br /&gt;
&lt;br /&gt;
* Sept 2014: [[User_Tips#Reducing_virtual_memory_consumption_for_multithreaded_programs| Tip on reducing virtual memory consumption for multithreaded programs]]&lt;br /&gt;
&lt;br /&gt;
* Sept 2014: Improved information on the [[Python]] versions installed on the GPC, and which modules are included in each version.&lt;br /&gt;
&lt;br /&gt;
* Sept 2014: Description on using job arrays on the GPC on the [[Scheduler]] page.&lt;br /&gt;
&lt;br /&gt;
* Sept 2014: [[Intro to Tkinter|Tkinter instructions]], [[Media:Tkinter.pdf|slides]] and [[Media:Tkinter_code.tgz|code]] for the TkInter workshop held in September.&lt;br /&gt;
&lt;br /&gt;
* Sept 2014: Instructions on using [[Hadoop for HPCers|Hadoop]] (for the Hadoop workshop held in September).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Previous new stuff can be found in the [[What's new archive]].&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;padding:1em; border:1px solid #aaaaaa; background-color:#f4f4fa; border-radius:7px&amp;quot; |&lt;br /&gt;
&amp;lt;div style='text-align:left;'&amp;gt;&lt;br /&gt;
{{SciNetWiki:Community_Portal}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#Widget:Twitter|shell.background=#9fb1c2|tweets.links=#4775c1|tweets.color=#000000|tweets.background=#ffffff|user=SciNetHPC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Old Main Page]] --!&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rzon</name></author>
	</entry>
</feed>