<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://support.beocat.ksu.edu/BeocatDocs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sgstrohkorb</id>
	<title>Beocat - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://support.beocat.ksu.edu/BeocatDocs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sgstrohkorb"/>
	<link rel="alternate" type="text/html" href="https://support.beocat.ksu.edu/Docs/Special:Contributions/Sgstrohkorb"/>
	<updated>2026-05-12T23:26:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://support.beocat.ksu.edu/BeocatDocs/index.php?title=Compute_Nodes&amp;diff=232</id>
		<title>Compute Nodes</title>
		<link rel="alternate" type="text/html" href="https://support.beocat.ksu.edu/BeocatDocs/index.php?title=Compute_Nodes&amp;diff=232"/>
		<updated>2017-08-16T00:40:51Z</updated>

		<summary type="html">&lt;p&gt;Sgstrohkorb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We currently have four classes of compute nodes. Starting with the oldest first we have&lt;br /&gt;
&lt;br /&gt;
== Mages ==&lt;br /&gt;
[1,3,5,7,9,11] - Why are these numbered like this? There are actually 12 physical machines, however each pair (1 and 2, 3 and 4, etc.) is tied together with external [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QPI], making them appear as a single node.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Processors&lt;br /&gt;
|8x 10-Core Xeon E7-8870&lt;br /&gt;
|-&lt;br /&gt;
|Ram&lt;br /&gt;
|1024GB&lt;br /&gt;
|-&lt;br /&gt;
|Hard Drive&lt;br /&gt;
|2x 300GB Hitachi 10,000rpm SAS&lt;br /&gt;
|-&lt;br /&gt;
|NIC 0&lt;br /&gt;
|Broadcom NetXtreme II BCM5709&lt;br /&gt;
|-&lt;br /&gt;
|NIC 1&lt;br /&gt;
|Broadcom NetXtreme II BCM5709&lt;br /&gt;
|-&lt;br /&gt;
|NIC 2&lt;br /&gt;
|Broadcom NetXtreme II BCM5709&lt;br /&gt;
|-&lt;br /&gt;
|NIC 3&lt;br /&gt;
|Broadcom NetXtreme II BCM5709&lt;br /&gt;
|-&lt;br /&gt;
| 10GbE and QDR Infiniband&lt;br /&gt;
|Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Elves ==&lt;br /&gt;
[1-56]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Processors&lt;br /&gt;
|2x 8-Core Xeon E5-2690&lt;br /&gt;
|-&lt;br /&gt;
|Ram&lt;br /&gt;
|64GB&lt;br /&gt;
|-&lt;br /&gt;
|Hard Drive&lt;br /&gt;
|1x 250GB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Intel I350&lt;br /&gt;
|-&lt;br /&gt;
| 10GbE and QDR Infiniband&lt;br /&gt;
|Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[57-72,77]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Processors&lt;br /&gt;
|2x 10-Core Xeon E5-2690 v2&lt;br /&gt;
|-&lt;br /&gt;
|Ram&lt;br /&gt;
|96GB&lt;br /&gt;
|-&lt;br /&gt;
|Hard Drive&lt;br /&gt;
|1x 250GB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Intel I350&lt;br /&gt;
|-&lt;br /&gt;
|10GbE and QDR Infiniband&lt;br /&gt;
|Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[73-76,78,79]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Processors&lt;br /&gt;
|2x 10-Core Xeon E5-2690 v2&lt;br /&gt;
|-&lt;br /&gt;
|Ram&lt;br /&gt;
|384GB&lt;br /&gt;
|-&lt;br /&gt;
|Hard Drive&lt;br /&gt;
|1x 250GB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Intel I350&lt;br /&gt;
|-&lt;br /&gt;
|10GbE and QDR Infiniband&lt;br /&gt;
|Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[80-85]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Processors&lt;br /&gt;
|2x 10-Core Xeon E5-2690v2&lt;br /&gt;
|-&lt;br /&gt;
|Ram&lt;br /&gt;
|64GB&lt;br /&gt;
|-&lt;br /&gt;
|Hard Drive&lt;br /&gt;
|1x 250GB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Intel I350&lt;br /&gt;
|-&lt;br /&gt;
| 10GbE and QDR Infiniband&lt;br /&gt;
|Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Heroes ==&lt;br /&gt;
[1-36,47-54]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Processors&lt;br /&gt;
| 2x 12-Core Xeon E5-2680 v3&lt;br /&gt;
|-&lt;br /&gt;
| Ram&lt;br /&gt;
| 128GB&lt;br /&gt;
|-&lt;br /&gt;
| Hard Drive&lt;br /&gt;
|1x 1TB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|2x Intel I350&lt;br /&gt;
|-&lt;br /&gt;
|40GbE&lt;br /&gt;
| Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[37-46]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Processors&lt;br /&gt;
| 2x 12-Core Xeon E5-2680 v3&lt;br /&gt;
|-&lt;br /&gt;
| Ram&lt;br /&gt;
| 512GB&lt;br /&gt;
|-&lt;br /&gt;
| Hard Drive&lt;br /&gt;
|1x 1TB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|2x Intel I350&lt;br /&gt;
|-&lt;br /&gt;
|40GbE&lt;br /&gt;
| Mellanox Technologies MT27500 Family [ConnectX-3]&lt;br /&gt;
|-&lt;br /&gt;
| Additional Notes&lt;br /&gt;
| 2x Xeon Phi FPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dwarves ==&lt;br /&gt;
[1-37,39]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Processors&lt;br /&gt;
| 2x 16-Core Xeon E5-2683 v4&lt;br /&gt;
|-&lt;br /&gt;
| Ram&lt;br /&gt;
| 128GB&lt;br /&gt;
|-&lt;br /&gt;
| Hard Drive&lt;br /&gt;
|1x 1TB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Broadcom BCM5719&lt;br /&gt;
|-&lt;br /&gt;
|40GbE&lt;br /&gt;
| Mellanox Technologies MT27520 Family [ConnectX-3 Pro]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[38]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Processors&lt;br /&gt;
| 2x 16-Core Xeon E5-2683 v4&lt;br /&gt;
|-&lt;br /&gt;
| Ram&lt;br /&gt;
| 512GB&lt;br /&gt;
|-&lt;br /&gt;
| Hard Drive&lt;br /&gt;
|1x 1TB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Broadcom BCM5719&lt;br /&gt;
|-&lt;br /&gt;
|40GbE&lt;br /&gt;
| Mellanox Technologies MT27520 Family [ConnectX-3 Pro]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[40-49]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Processors&lt;br /&gt;
| 2x 16-Core Xeon E5-2683 v4&lt;br /&gt;
|-&lt;br /&gt;
| Ram&lt;br /&gt;
| 128GB&lt;br /&gt;
|-&lt;br /&gt;
| Hard Drive&lt;br /&gt;
|1x 1TB 7,200 RPM SATA&lt;br /&gt;
|-&lt;br /&gt;
|NICs&lt;br /&gt;
|4x Broadcom BCM5719&lt;br /&gt;
|-&lt;br /&gt;
|100GbE&lt;br /&gt;
| Mellanox Technologies MT27700 Family [ConnectX-4]&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Sgstrohkorb</name></author>
	</entry>
	<entry>
		<id>https://support.beocat.ksu.edu/BeocatDocs/index.php?title=Installed_software&amp;diff=215</id>
		<title>Installed software</title>
		<link rel="alternate" type="text/html" href="https://support.beocat.ksu.edu/BeocatDocs/index.php?title=Installed_software&amp;diff=215"/>
		<updated>2017-05-14T20:23:59Z</updated>

		<summary type="html">&lt;p&gt;Sgstrohkorb: This is an issue that I ran into and I want to post it on the wiki so others can learn from my mistake. If there's a better way to fix this issue, please let me know.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Drinking from the Firehose ==&lt;br /&gt;
For a complete list of all installed software, see [[NodePackageList]]&lt;br /&gt;
&lt;br /&gt;
== Most Commonly Used Software ==&lt;br /&gt;
=== [http://www.open-mpi.org/ OpenMPI] ===&lt;br /&gt;
Version 2.0.1&lt;br /&gt;
&lt;br /&gt;
=== [http://www.scilab.org Scilab] ===&lt;br /&gt;
Version 6.0.0&lt;br /&gt;
&lt;br /&gt;
=== [http://www.r-project.org/ R] ===&lt;br /&gt;
Version 3.3.1&lt;br /&gt;
&lt;br /&gt;
==== Modules ====&lt;br /&gt;
We provide a small number of R modules installed by default, these are generally modules that are needed by more than one person.&lt;br /&gt;
&lt;br /&gt;
==== Installing your own modules ====&lt;br /&gt;
To install your own module, login to Beocat and start R interactively&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
R&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then install the package using&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
install.packages(&amp;quot;PACKAGENAME&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Follow the prompts. Note that there is a CRAN mirror at KU - it will be listed as &amp;quot;USA (KS)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
After installing you can test before leaving interactive mode by issuing the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(&amp;quot;PACKAGENAME&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Running R Jobs ====&lt;br /&gt;
&lt;br /&gt;
You cannot submit an R script directly. '&amp;lt;tt&amp;gt;qsub myscript.R&amp;lt;/tt&amp;gt;' will result in an error. Instead, you need to make a bash [[AdvancedSGE#Running_from_a_qsub_Submit_Script|script]] that will call R appropriately. Here is a minimal example. We'll save this as submit-R.qsub&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #$ -l mem=1G&lt;br /&gt;
 # Now we tell qsub how long we expect our work to take: 15 minutes (H:MM:SS)&lt;br /&gt;
 #$ -l h_rt=0:15:00&lt;br /&gt;
 &lt;br /&gt;
 # Now lets do some actual work. This starts R and loads the file myscript.R&lt;br /&gt;
 R --no-save -q &amp;lt; myscript.R&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, to submit your R job, you would type&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
qsub submit-R.qsub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [http://www.java.com/ Java] ===&lt;br /&gt;
We support 4 versions of the Java VM on Beocat. [[wikipedia:IcedTea|IcedTea]] 7 and 8 (based on [[wikipedia:OpenJDK|OpenJDK]]), Oracle JDK 1.7 (Java 7), and Oracle JDK 1.8 (Java 8).&lt;br /&gt;
&lt;br /&gt;
We allow each user to select his or her Java version individually. If you do not select one, we default to IcedTea 8. This was changed from Oracle JDK 1.7 on May 29, 2015 due to a EOL notice from Oracle.&lt;br /&gt;
&lt;br /&gt;
==== Selecting your Java version ====&lt;br /&gt;
First, lets list the available versions. This can be done with the command &amp;lt;code&amp;gt;eselect java-vm list&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% eselect java-vm list&lt;br /&gt;
Available Java Virtual Machines:&lt;br /&gt;
  [1]   icedtea-bin-7&lt;br /&gt;
  [2]   icedtea-bin-8  system-vm&lt;br /&gt;
  [3]   oracle-jdk-bin-1.7&lt;br /&gt;
  [4]   oracle-jdk-bin-1.8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you'll note,  icedtea-bin-8 (marked &amp;quot;system-vm&amp;quot;) is the default for all users. If you have a custom version set, it will be marked with &amp;quot;user-vm&amp;quot;. Now if you wanted to use icedtea-7, you could run the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
eselect java-vm set user 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Now, we see the difference when running the above command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% eselect java-vm list&lt;br /&gt;
Available Java Virtual Machines:&lt;br /&gt;
  [1]   icedtea-bin-7 user-vm&lt;br /&gt;
  [2]   icedtea-bin-8  system-vm&lt;br /&gt;
  [3]   oracle-jdk-bin-1.7&lt;br /&gt;
  [4]   oracle-jdk-bin-1.8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To verify you are seeing the correct java, you can run &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% java -version&lt;br /&gt;
java version &amp;quot;1.7.0_121&amp;quot;&lt;br /&gt;
OpenJDK Runtime Environment (IcedTea 2.6.8) (Gentoo icedtea-7.2.6.8)&lt;br /&gt;
OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [http://www.python.org/about/ Python] ===&lt;br /&gt;
&lt;br /&gt;
We have several versions of Python available:&lt;br /&gt;
* [http://docs.python.org/2.7/ CPython 2.7]&lt;br /&gt;
* [http://docs.python.org/3.4/ CPython 3.4]&lt;br /&gt;
* [http://pypy.org/ PyPy 5.4.1] (Python 2.7.10)&lt;br /&gt;
* [http://pypy.org/ PyPy3 5.5.0-alpha0] (Python 3.3.5)&lt;br /&gt;
&lt;br /&gt;
For the uninitiated PyPy provides [[wikipedia:Just-in-time_compilation|just-in-time compilation]] for python code. While it doesn't support all modules, code which does run under PyPy can see a significant performance increase.&lt;br /&gt;
&lt;br /&gt;
If you just need python and its default modules, you can use python2 python3 or pypy as you would any other application.&lt;br /&gt;
&lt;br /&gt;
If, however, you need modules that we do not have installed, you should use [http://www.doughellmann.com/projects/virtualenvwrapper/ virtualenvwrapper] to setup a virtual python environment in your home directory. This will let you install python modules as you please.&lt;br /&gt;
&lt;br /&gt;
==== Setting up your virtual environment ====&lt;br /&gt;
* [[LinuxBasics#Shells|Change your shell]] to bash&lt;br /&gt;
* Make sure ~/.bash_profile exists&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ ! -f ~/.bash_profile ]; then cp /etc/skel/.bash_profile ~/.bash_profile; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Add a line like &amp;lt;code&amp;gt;source /usr/bin/virtualenvwrapper.sh&amp;lt;/code&amp;gt; to your .bashrc.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;source /usr/bin/virtualenvwrapper.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* '''''CRITICAL:''''' Logout, and then log back in&lt;br /&gt;
* Show your existing environments&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
workon&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Create a virtual environment. Here I will create a default virtual environment called 'test', a python2 virtual environment called 'testp2', a python3 virtual environment called 'testp3', and a pypy environment called testpypy. Note that &amp;lt;code&amp;gt;mkvirtualenv --help&amp;lt;/code&amp;gt; has many more useful options.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 mkvirtualenv -p $(which python2) testp2&lt;br /&gt;
 mkvirtualenv -p $(which python3) testp3&lt;br /&gt;
 mkvirtualenv -p $(which pypy) testpypy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Lets look at our virtual environments&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%workon&lt;br /&gt;
testp2&lt;br /&gt;
testp3&lt;br /&gt;
testpypy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Activate one of these&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%workon testp2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* You can now install the python modules you want. This can be done using &amp;lt;tt&amp;gt;pip&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install numpy biopython&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Using your virtual environment within a job ====&lt;br /&gt;
Here is a simple job script using the virtual environment testp2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
source /usr/bin/virtualenvwrapper.sh&lt;br /&gt;
workon testp2&lt;br /&gt;
~/path/to/your/python/script.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== A note on [http://mpi4py.scipy.org/docs/usrman/index.html mpi4py] ====&lt;br /&gt;
If you are wanting to use mpi with your python script and are using a virtual environment, you will need to send the correct environment variables to all of the mpi processes to make the virtual environment work.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# sample mpi4py submit script&lt;br /&gt;
source /usr/bin/virtualenvwrapper.sh&lt;br /&gt;
workon testp2&lt;br /&gt;
# figure out the location of the python interpreter in the virtual environment&lt;br /&gt;
PYTHON_BINARY=$(which python)&lt;br /&gt;
# mpirun the python interpreter within the virtual environment&lt;br /&gt;
# if you don't use the interpreter within the virtual environment, i.e. just using 'python'&lt;br /&gt;
# the system python interpreter (without access to your other modules) will be used.&lt;br /&gt;
mpirun ${PYTHON_BINARY} ~/path/to/your/mpi-enabled/python/script.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you are using comm.send and comm.recv for communication with python objects and receive an output message like the one below, you will need to use [https://support.beocat.ksu.edu/BeocatDocs/index.php/AdvancedSGE#Infiniband infiniband] to allow MPI to communicate properly.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
[[33053,1],52]: 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: host&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;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A note on [http://www.scipy.org/ scipy] ====&lt;br /&gt;
SciPy requires numpy, unfortunately it doesn't properly define a dependency on numpy, so you just have to install it first.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source /usr/bin/virtualenvwrapper.sh&lt;br /&gt;
workon testp2&lt;br /&gt;
pip install numpy&lt;br /&gt;
# now scipy needs lapack and it doesn't detect the system one. lets fix it&lt;br /&gt;
export LAPACK=/usr/lib/libreflapack.so&lt;br /&gt;
export BLAS=/usr/lib/libopenblas_openmp.so&lt;br /&gt;
pip install scipy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [http://www.perl.org/ Perl] ===&lt;br /&gt;
The system-wide version of perl is tracking the stable releases of perl. Unfortunately there are some features that we do not include in the system distribution of perl, namely threads.&lt;br /&gt;
==== Submitting a job with Perl ====&lt;br /&gt;
Much like R (above), you cannot simply '&amp;lt;tt&amp;gt;qsub myProgram.pl&amp;lt;/tt&amp;gt;', but you must create a [[AdvancedSGE#Running_from_a_qsub_Submit_Script|submit script]] which will call perl. Here is an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#$ -l mem=1G&lt;br /&gt;
# Now we tell qsub how long we expect our work to take: 15 minutes (H:MM:SS)&lt;br /&gt;
#$ -l h_rt=0:15:00&lt;br /&gt;
# Now lets do some actual work. &lt;br /&gt;
perl /path/to/myProgram.pl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Getting Perl with threads ====&lt;br /&gt;
* Setup perlbrew&lt;br /&gt;
** [[LinuxBasics#Shells|Change your shell]] to bash&lt;br /&gt;
** Install perlbrew&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -L http://install.perlbrew.pl | bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Make sure that ~/.bash_profile exists&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ ! -f ~/.bash_profile ]; then cp /etc/skel/.bash_profile ~/.bash_profile; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Add &amp;lt;code&amp;gt;source ~/perl5/perlbrew/etc/bashrc&amp;lt;/code&amp;gt; to ~/.bash_profile&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;source ~/perl5/perlbrew/etc/bashrc&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Then source your bash profile&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ~/.bash_profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Now, install perl with threads within perlbrew&lt;br /&gt;
** Find the current Perl version.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% perl -version&lt;br /&gt;
&lt;br /&gt;
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux&lt;br /&gt;
(with 22 registered patches, see perl -V for more detail)&lt;br /&gt;
(...several more lines deleted)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** In this case the version is 5.16.3, so we run&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
perlbrew install -f -n -D usethreads perl-5.16.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** To temporarily use the new version of perl in the current shell, we now run&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
perlbrew use perl-5.16.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** To switch versions of perl for every new login or job, run&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
perlbrew switch perl-5.16.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** You can reverse this switch with&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
perlbrew switch-off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing my own software ==&lt;br /&gt;
Installing and maintaining software for the many different users of Beocat would be very difficult, if not impossible. For this reason, we don't generally install user-run software on our cluster. Instead, we ask that you install it into your home directories.&lt;br /&gt;
&lt;br /&gt;
In many cases, the software vendor or support site will incorrectly assume that you are installing the software system-wide or that you need 'sudo' access.&lt;br /&gt;
&lt;br /&gt;
As a quick example of installing software in your home directory, we have a sample video on our [[Training Videos]] page. If you're still having problems or questions, please contact support as mentioned on our [[Main Page]].&lt;/div&gt;</summary>
		<author><name>Sgstrohkorb</name></author>
	</entry>
	<entry>
		<id>https://support.beocat.ksu.edu/BeocatDocs/index.php?title=OLD_DEPRECATED_AdvancedSGE&amp;diff=214</id>
		<title>OLD DEPRECATED AdvancedSGE</title>
		<link rel="alternate" type="text/html" href="https://support.beocat.ksu.edu/BeocatDocs/index.php?title=OLD_DEPRECATED_AdvancedSGE&amp;diff=214"/>
		<updated>2017-05-14T20:02:25Z</updated>

		<summary type="html">&lt;p&gt;Sgstrohkorb: Fixed the option to use infiniband in sample qsub script. I needed to use infiniband and realized that &amp;quot;ib=True&amp;quot; needed a &amp;quot;-l&amp;quot; option before it, so I added it to the wiki so others don't have to deal with it.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resource Requests ==&lt;br /&gt;
Aside from the time, RAM, and CPU requirements listed on the [[SGEBasics]] page, we have several other requestable resources. Generally, if you don't know if you need a particular resource, you should use the default. These can be generated with the command&lt;br /&gt;
 &amp;lt;tt&amp;gt;qconf -sc | awk '{ if ($5 != &amp;quot;NO&amp;quot;) { print }}'&amp;lt;/tt&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!name&lt;br /&gt;
!shortcut&lt;br /&gt;
!type&lt;br /&gt;
!relop&lt;br /&gt;
!requestable&lt;br /&gt;
!consumable&lt;br /&gt;
!default&lt;br /&gt;
!urgency&lt;br /&gt;
|-&lt;br /&gt;
|arch&lt;br /&gt;
|a&lt;br /&gt;
|RESTRING&lt;br /&gt;
|==&lt;br /&gt;
|YES&lt;br /&gt;
|NO&lt;br /&gt;
|NONE&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|avx&lt;br /&gt;
|avx&lt;br /&gt;
|BOOL        &lt;br /&gt;
|==     &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|FALSE    &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|calendar            &lt;br /&gt;
|c          &lt;br /&gt;
|RESTRING    &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|NONE     &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|cpu                 &lt;br /&gt;
|cpu        &lt;br /&gt;
|DOUBLE      &lt;br /&gt;
|&amp;gt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|cpu_flags           &lt;br /&gt;
|c_f        &lt;br /&gt;
|STRING      &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|NONE     &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|cuda                &lt;br /&gt;
|cuda       &lt;br /&gt;
|INT         &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|JOB        &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|display_win_gui     &lt;br /&gt;
|dwg        &lt;br /&gt;
|BOOL        &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|exclusive           &lt;br /&gt;
|excl       &lt;br /&gt;
|BOOL        &lt;br /&gt;
|EXCL    &lt;br /&gt;
|YES         &lt;br /&gt;
|YES        &lt;br /&gt;
|0        &lt;br /&gt;
|1000&lt;br /&gt;
|-&lt;br /&gt;
|h_core              &lt;br /&gt;
|h_core     &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_cpu               &lt;br /&gt;
|h_cpu      &lt;br /&gt;
|TIME        &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0:0:0    &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_data              &lt;br /&gt;
|h_data     &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_fsize             &lt;br /&gt;
|h_fsize    &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_rss               &lt;br /&gt;
|h_rss      &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_rt                &lt;br /&gt;
|h_rt       &lt;br /&gt;
|TIME        &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|FORCED      &lt;br /&gt;
|NO        &lt;br /&gt;
|0:0:0    &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_stack             &lt;br /&gt;
|h_stack    &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|h_vmem              &lt;br /&gt;
|h_vmem     &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|hostname            &lt;br /&gt;
|h          &lt;br /&gt;
|HOST        &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|NONE     &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|infiniband          &lt;br /&gt;
|ib         &lt;br /&gt;
|BOOL        &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|FALSE    &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|m_core              &lt;br /&gt;
|core       &lt;br /&gt;
|INT         &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|m_socket            &lt;br /&gt;
|socket     &lt;br /&gt;
|INT         &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|m_thread            &lt;br /&gt;
|thread     &lt;br /&gt;
|INT         &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|m_topology          &lt;br /&gt;
|topo       &lt;br /&gt;
|RESTRING    &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|NONE     &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|m_topology_inuse    &lt;br /&gt;
|utopo      &lt;br /&gt;
|RESTRING    &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|NONE     &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|mem_free            &lt;br /&gt;
|mf         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|mem_total           &lt;br /&gt;
|mt         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|mem_used            &lt;br /&gt;
|mu         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;gt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0       &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|memory              &lt;br /&gt;
|mem        &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|FORCED      &lt;br /&gt;
|YES        &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|num_proc            &lt;br /&gt;
|p          &lt;br /&gt;
|INT         &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|qname               &lt;br /&gt;
|q          &lt;br /&gt;
|RESTRING    &lt;br /&gt;
|==      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|NONE     &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_core              &lt;br /&gt;
|s_core     &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO        &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_cpu               &lt;br /&gt;
|s_cpu      &lt;br /&gt;
|TIME        &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0:0:0    &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_data              &lt;br /&gt;
|s_data     &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_fsize             &lt;br /&gt;
|s_fsize    &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_rss               &lt;br /&gt;
|s_rss      &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_rt                &lt;br /&gt;
|s_rt       &lt;br /&gt;
|TIME        &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0:0:0    &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_stack             &lt;br /&gt;
|s_stack    &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|s_vmem              &lt;br /&gt;
|s_vmem     &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|slots               &lt;br /&gt;
|s          &lt;br /&gt;
|INT         &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|YES        &lt;br /&gt;
|1        &lt;br /&gt;
|1000&lt;br /&gt;
|-&lt;br /&gt;
|swap_free           &lt;br /&gt;
|sf         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|swap_rate           &lt;br /&gt;
|sr         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;gt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|swap_rsvd           &lt;br /&gt;
|srsv       &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;gt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|swap_total          &lt;br /&gt;
|st         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|swap_used           &lt;br /&gt;
|su         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;gt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|virtual_free        &lt;br /&gt;
|vf         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|virtual_total       &lt;br /&gt;
|vt         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;lt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|virtual_used        &lt;br /&gt;
|vu         &lt;br /&gt;
|MEMORY      &lt;br /&gt;
|&amp;gt;=      &lt;br /&gt;
|YES         &lt;br /&gt;
|NO         &lt;br /&gt;
|0        &lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The good news is that most of these nobody ever uses. There are a couple of exceptions, though:&lt;br /&gt;
=== Infiniband ===&lt;br /&gt;
First of all, let me state that just because it sounds &amp;quot;cool&amp;quot; doesn't mean you need it or even want it. Infiniband does absolutely no good if running in a 'single' parallel environment. Infiniband is a high-speed host-to-host communication fabric. It is used in conjunction with MPI jobs (discussed below). Several times we have had jobs which could run just fine, except that the submitter requested Infiniband, and all the nodes with Infiniband were currently busy. In fact, some of our fastest nodes do not have Infiniband, so by requesting it when you don't need it, you are actually slowing down your job. To request Infiniband, add &amp;lt;tt&amp;gt;-l ib=true&amp;lt;/tt&amp;gt; to your qsub command-line.&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
[[CUDA]] is the resource required for GPU computing. We have a very small number of nodes which have GPUs installed. To request one of these nodes, add &amp;lt;tt&amp;gt;-l cuda=true&amp;lt;/tt&amp;gt; to your qsub command-line.&lt;br /&gt;
=== Exclusive ===&lt;br /&gt;
Some programs just don't play nicely with others. They will attempt to use all available memory or will try to use all the cores it can use. The way to be a nice neighbor if your program has this problem is to request exclusive use of a node with &amp;lt;tt&amp;gt;-l excl=true&amp;lt;/tt&amp;gt;. This can also be useful for benchmarking, where you can be sure that no other jobs are interfering with yours.&lt;br /&gt;
== Parallel Jobs ==&lt;br /&gt;
There are two ways jobs can run in parallel, ''intra''node and ''inter''node. '''Note: Beocat will not automatically make a job run in parallel.''' Have I said that enough? It's a common misperception.&lt;br /&gt;
=== Intranode jobs ===&lt;br /&gt;
Intranode jobs are easier to code and can take advantage of many common libraries, such as [http://openmp.org/wp/ OpenMP], or Java's threads. Many times, your program will need to know how many cores you want it to use. Many will use all available cores if not told explicitly otherwise. This can be a problem when you are sharing resources, as Beocat does. To request multiple cores, use the qsub directive '&amp;lt;tt&amp;gt;-pe single ''n''&amp;lt;/tt&amp;gt;', where ''n'' is the number of cores you wish to use. If your command can take an environment variable, you can use $nslots to tell how many cores you've been allocated.&lt;br /&gt;
=== Internode (MPI) jobs ===&lt;br /&gt;
&amp;quot;Talking&amp;quot; between nodes is trickier that talking between cores on the same node. The specification for doing so is called &amp;quot;[[wikipedia:Message_Passing_Interface|Message Passing Interface]]&amp;quot;, or MPI. We have [http://www.open-mpi.org/ OpenMPI] installed on Beocat for this purpose. Most programs written to take advantage of large multi-node systems will use MPI. You can tell if you have an MPI-enabled program because its directions will tell you to run '&amp;lt;tt&amp;gt;mpirun ''program''&amp;lt;/tt&amp;gt;'. Requesting MPI resources is only mildly more difficult than requesting single-node jobs. Instead of using '&amp;lt;tt&amp;gt;-pe single ''n''&amp;lt;/tt&amp;gt;' for your qsub request, you will use one of the following:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parallel Environment !! Description&lt;br /&gt;
|-&lt;br /&gt;
|mpi-fill&lt;br /&gt;
|This environment will use as many slots on each node as it can until it reaches the number of cores you have requested.&lt;br /&gt;
|-&lt;br /&gt;
|mpi-spread&lt;br /&gt;
|This environment will spread itself out over as many nodes as possible until it reaches the number of cores you have requested.&lt;br /&gt;
|-&lt;br /&gt;
|mpi-1&lt;br /&gt;
|This environment will allocate the slots you've requested 1 per node.&lt;br /&gt;
|-&lt;br /&gt;
|mpi-2&lt;br /&gt;
|This environment will allocate the slots you've requested 2 per node. You must request cores as a multiple of 2&lt;br /&gt;
|-&lt;br /&gt;
|mpi-4&lt;br /&gt;
|This environment will allocate the slots you've requested 4 per node. You must request cores as a multiple of 4&lt;br /&gt;
|-&lt;br /&gt;
|mpi-8&lt;br /&gt;
|This environment will allocate the slots you've requested 8 per node. You must request cores as a multiple of 8&lt;br /&gt;
|-&lt;br /&gt;
|mpi-10&lt;br /&gt;
|This environment will allocate the slots you've requested 10 per node. You must request cores as a multiple of 10&lt;br /&gt;
|-&lt;br /&gt;
|mpi-12&lt;br /&gt;
|This environment will allocate the slots you've requested 12 per node. You must request cores as a multiple of 12&lt;br /&gt;
|-&lt;br /&gt;
|mpi-16&lt;br /&gt;
|This environment will allocate the slots you've requested 16 per node. You must request cores as a multiple of 16&lt;br /&gt;
|-&lt;br /&gt;
|mpi-20&lt;br /&gt;
|This environment will allocate the slots you've requested 20 per node. You must request cores as a multiple of 20&lt;br /&gt;
|-&lt;br /&gt;
|mpi-80&lt;br /&gt;
|This environment will allocate the slots you've requested 80 per node. You must request cores as a multiple of 80&lt;br /&gt;
|}&lt;br /&gt;
Some quick examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-pe mpi-4 16&amp;lt;/tt&amp;gt; will give you 4 chunks of 4 cores apiece. They might all happen to be allocated on the same node (16 cores), on 4 different nodes (4 cores each), on 3 nodes (8 cores on one and 4 cores on the other two), or on 2 nodes (8 cores each).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-pe mpi-fill 40&amp;lt;/tt&amp;gt; will give you 40 cores, but will attempt to get them all on the same node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-pe mpi-fill 100&amp;lt;/tt&amp;gt; will give you 100 cores, and place them on as few nodes as possible. In this case it's likely you would get a full mage (80 cores) and either part of another mage (the remaining 20 cores) or one of the 20-core elves.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-pe mpi-spread 40&amp;lt;/tt&amp;gt; will give you 40 cores, and will attempt to place each on a separate node.&lt;br /&gt;
== Requesting memory for multi-core jobs ==&lt;br /&gt;
All memory requests are '''per core'''. One of the more common scenarios is where somebody will need, say 20 cores and 400 GB of memory. So they will make a request like '&amp;lt;tt&amp;gt;-pe single 20, -l mem=400G&amp;lt;/tt&amp;gt;' This will never run, because what you are really requesting is 20 cores and 8000GB of memory (20 * 400). Since we have no nodes with 8000 terabytes of memory, the job will never run. In this case, you will divide the 400GB total memory request by the number of cores (20), so the correct command would be '&amp;lt;tt&amp;gt;-pe single 20, -l mem=20G&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
== Other Handy SGE Features ==&lt;br /&gt;
=== Email status changes ===&lt;br /&gt;
One of the most commonly used options when submitting jobs not related to resource requests is to have have SGE email you when a job changes its status. This takes two directives to qsub: '&amp;lt;tt&amp;gt;-M ''someone@somewhere.com''&amp;lt;/tt&amp;gt;' will give the email address to which to send status updates. '&amp;lt;tt&amp;gt;-m abe&amp;lt;/tt&amp;gt;' is probably the most common directive given for ''when'' to send updates. This will send email messages when a job (a)borts, (b)egins, or (e)nds. Other possibilities are (s)uspended and (n)ever.&lt;br /&gt;
=== Job Naming ===&lt;br /&gt;
If you have several jobs in the queue, running the same script with different parameters, it's handy to have a different name for each job as it shows up in the queue. This is accomplished with the '&amp;lt;tt&amp;gt;-N ''JobName''&amp;lt;/tt&amp;gt;' qsub directive.&lt;br /&gt;
=== Combining Output Streams ===&lt;br /&gt;
Normally, SGE will create two files for output. One will be .e''jobnumber'' and the other .o''jobnumber''. If you want both of these to be combined into a single file, you can use the qsub directive '&amp;lt;tt&amp;gt;-j y&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
=== Running from the Current Directory ===&lt;br /&gt;
By default, jobs run from your home directory. Many programs incorrectly assume that you are running the script from the current directory. You can use the '&amp;lt;tt&amp;gt;-cwd&amp;lt;/tt&amp;gt;' directive to change to the &amp;quot;current working directory&amp;quot; you used when submitting the job.&lt;br /&gt;
=== Running in a specific class of machine ===&lt;br /&gt;
If you want to run on a specific class of machines, e.g., the Dwarves, you can add the flag &amp;quot;-q \*@@dwarves&amp;quot; to select that queue.&lt;br /&gt;
=== SGE Environment Variables ===&lt;br /&gt;
Within an actual job, sometimes you need to know specific things about the running environment to setup your scripts correctly. Here is a listing of environment variables that SGE makes available to you. Of course the value of these variables will be different based on many different factors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HOSTNAME=titan1.beocat&lt;br /&gt;
SGE_TASK_STEPSIZE=undefined&lt;br /&gt;
SGE_INFOTEXT_MAX_COLUMN=5000&lt;br /&gt;
SHELL=/usr/local/bin/sh&lt;br /&gt;
NHOSTS=2&lt;br /&gt;
SGE_O_WORKDIR=/homes/mozes&lt;br /&gt;
TMPDIR=/tmp/105.1.batch.q&lt;br /&gt;
SGE_O_HOME=/homes/mozes&lt;br /&gt;
SGE_ARCH=lx24-amd64&lt;br /&gt;
SGE_CELL=default&lt;br /&gt;
RESTARTED=0&lt;br /&gt;
ARC=lx24-amd64&lt;br /&gt;
USER=mozes&lt;br /&gt;
QUEUE=batch.q&lt;br /&gt;
PVM_ARCH=LINUX64&lt;br /&gt;
SGE_TASK_ID=undefined&lt;br /&gt;
SGE_BINARY_PATH=/opt/sge/bin/lx24-amd64&lt;br /&gt;
SGE_STDERR_PATH=/homes/mozes/sge_test.sub.e105&lt;br /&gt;
SGE_STDOUT_PATH=/homes/mozes/sge_test.sub.o105&lt;br /&gt;
SGE_ACCOUNT=sge&lt;br /&gt;
SGE_RSH_COMMAND=builtin&lt;br /&gt;
JOB_SCRIPT=/opt/sge/default/spool/titan1/job_scripts/105&lt;br /&gt;
JOB_NAME=sge_test.sub&lt;br /&gt;
SGE_NOMSG=1&lt;br /&gt;
SGE_ROOT=/opt/sge&lt;br /&gt;
REQNAME=sge_test.sub&lt;br /&gt;
SGE_JOB_SPOOL_DIR=/opt/sge/default/spool/titan1/active_jobs/105.1&lt;br /&gt;
ENVIRONMENT=BATCH&lt;br /&gt;
PE_HOSTFILE=/opt/sge/default/spool/titan1/active_jobs/105.1/pe_hostfile&lt;br /&gt;
SGE_CWD_PATH=/homes/mozes&lt;br /&gt;
NQUEUES=2&lt;br /&gt;
SGE_O_LOGNAME=mozes&lt;br /&gt;
SGE_O_MAIL=/var/mail/mozes&lt;br /&gt;
TMP=/tmp/105.1.batch.q&lt;br /&gt;
JOB_ID=105&lt;br /&gt;
LOGNAME=mozes&lt;br /&gt;
PE=mpi-fill&lt;br /&gt;
SGE_TASK_FIRST=undefined&lt;br /&gt;
SGE_O_HOST=loki&lt;br /&gt;
SGE_O_SHELL=/bin/bash&lt;br /&gt;
SGE_CLUSTER_NAME=beocat&lt;br /&gt;
REQUEST=sge_test.sub&lt;br /&gt;
NSLOTS=32&lt;br /&gt;
SGE_STDIN_PATH=/dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sometimes it is nice to know what hosts you have access to during a PE job. You would checkout the PE_HOSTFILE to know that. If your job has been restarted, it is nice to be able to change what happens rather than redoing all of your work. If this is the case, RESTARTED would equal 1. There are lots of useful Environment Variables there, I will leave it to you to identify the ones you want.&lt;br /&gt;
&lt;br /&gt;
Some of the most commonly-used variables we see used are $NSLOTS, $HOSTNAME, and $SGE_TASK_ID (used for array jobs, discussed below).&lt;br /&gt;
== Running from a qsub Submit Script ==&lt;br /&gt;
No doubt after you've run a few jobs you get tired of typing something like 'qsub -l mem=2G,h_rt=10:00 -pe single 8 -n MyJobTitle MyScript.sh'. How are you supposed to remember all of these every time? The answer is to create a 'submit script', which outlines all of these for you. Below is a sample submit script, which you can modify and use for your own purposes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
## A Sample qsub script created by Kyle Hutson&lt;br /&gt;
##&lt;br /&gt;
## Note: Usually a '#&amp;quot; at the beginning of the line is ignored. However, in&lt;br /&gt;
## the case of qsub, lines beginning with #$ are commands for qsub itself, so&lt;br /&gt;
## I have taken the convention here of starting *every* line with a '#', just&lt;br /&gt;
## Delete the first one if you want to use that line, and then modify it to&lt;br /&gt;
## your own purposes. The only exception here is the first line, which *must*&lt;br /&gt;
## be #!/bin/bash (or another valid shell).&lt;br /&gt;
&lt;br /&gt;
## Specify the amount of RAM needed _per_core_. Default is 1G&lt;br /&gt;
##$ -l mem=1G&lt;br /&gt;
&lt;br /&gt;
## Specify the maximum runtime. Default is 1 hour (1:00:00)&lt;br /&gt;
##$ -l h_rt=1:00:00&lt;br /&gt;
&lt;br /&gt;
## Require the use of infiniband. If you don't know what this is, you probably&lt;br /&gt;
## don't need it. Default is &amp;quot;FALSE&amp;quot;&lt;br /&gt;
##$ -l ib=TRUE&lt;br /&gt;
&lt;br /&gt;
## CUDA directive. If You don't know what this is, you probably don't need it&lt;br /&gt;
## Default is &amp;quot;FALSE&amp;quot;&lt;br /&gt;
##$ -l cuda=TRUE&lt;br /&gt;
&lt;br /&gt;
## Parallel environment. Syntax is '-pe Environment NumberOfCores' A list of&lt;br /&gt;
## valid environments can be found at&lt;br /&gt;
## https://support.beocat.ksu.edu/BeocatDocs/index.php/AdvancedSGE (section 2). One&lt;br /&gt;
## quick note here. Jobs requesting 16 or fewer cores tend to get scheduled&lt;br /&gt;
## fairly quickly. If you need a job that requires more than that, you might&lt;br /&gt;
## benefit from emailing us at beocat@cs.ksu.edu to see how we can assist in&lt;br /&gt;
## getting your job scheduled in a reasonable amount of time. Default is&lt;br /&gt;
## &amp;quot;single 1&amp;quot;&lt;br /&gt;
##$ -pe single 12&lt;br /&gt;
##$ -pe mpi-1 2&lt;br /&gt;
##$ -pe mpi-fill 20&lt;br /&gt;
##$ -pe mpi-spread 16&lt;br /&gt;
&lt;br /&gt;
## Checkpointing. Options are BLCR or dmtcp. Default is no checkpointing.&lt;br /&gt;
##$ -ckpt dmtcp&lt;br /&gt;
&lt;br /&gt;
## Use the current working directory instead of your home directory&lt;br /&gt;
##$ -cwd&lt;br /&gt;
&lt;br /&gt;
## Merge output and error text streams into a single stream&lt;br /&gt;
##$ -j y&lt;br /&gt;
&lt;br /&gt;
## Name my job, to make it easier to find in the queue&lt;br /&gt;
##$ -N MyJobTitle&lt;br /&gt;
&lt;br /&gt;
## And finally, we run the job we came here to do.&lt;br /&gt;
## $HOME/ProgramDir/ProgramName ProgramArguments&lt;br /&gt;
&lt;br /&gt;
## OR, for the case of MPI-capable jobs&lt;br /&gt;
## mpirun $HOME/path/MpiJobName&lt;br /&gt;
&lt;br /&gt;
## Send email when a job is aborted (a), begins (b), and/or ends (e)&lt;br /&gt;
##$ -m abe&lt;br /&gt;
&lt;br /&gt;
## Email address to send the email to based on the above line.&lt;br /&gt;
##$ -M myemail@ksu.edu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Array Jobs ==&lt;br /&gt;
One of SGE's useful options is the ability to run &amp;quot;Array Jobs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It can be used with the following option to qsub.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  -t n[-m[:s]]&lt;br /&gt;
     Submits  a  so  called  Array  Job,  i.e. an array of identical tasks being differentiated only by an index number and being treated by  Grid&lt;br /&gt;
     Engine almost like a series of jobs. The option argument to -t specifies the number of array job tasks and the index  number  which  will  be&lt;br /&gt;
     associated with the tasks. The index numbers will be exported to the job tasks via the environment variable SGE_TASK_ID. The option arguments&lt;br /&gt;
     n, m and s will be available through the environment variables SGE_TASK_FIRST, SGE_TASK_LAST and  SGE_TASK_STEPSIZE.&lt;br /&gt;
 &lt;br /&gt;
     Following restrictions apply to the values n and m:&lt;br /&gt;
 &lt;br /&gt;
            1 &amp;lt;= n &amp;lt;= 1,000,000&lt;br /&gt;
            1 &amp;lt;= m &amp;lt;= 1,000,000&lt;br /&gt;
            n &amp;lt;= m&lt;br /&gt;
 &lt;br /&gt;
     The task id range specified in the option argument may be a single number, a simple range of the form n-m or  a  range  with  a  step  size.&lt;br /&gt;
     Hence,  the task id range specified by 2-10:2 would result in the task id indexes 2, 4, 6, 8, and 10, for a total of 5 identical tasks, each&lt;br /&gt;
     with the environment variable SGE_TASK_ID containing one of the 5 index numbers.&lt;br /&gt;
 &lt;br /&gt;
     Array  jobs  are  commonly  used to execute the same type of operation on varying input data sets correlated with the task index number. The&lt;br /&gt;
     number of tasks in a array job is unlimited.&lt;br /&gt;
 &lt;br /&gt;
     STDOUT and STDERR of array job tasks will be written into different files with the default location&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;jobname&amp;gt;.['e'|'o']&amp;lt;job_id&amp;gt;'.'&amp;lt;task_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
==== Change the Size of the Run ====&lt;br /&gt;
Array Jobs have a variety of uses, one of the easiest to comprehend is the following:&lt;br /&gt;
&lt;br /&gt;
I have an application, app1 I need to run the exact same way, on the same data set, with only the size of the run changing.&lt;br /&gt;
&lt;br /&gt;
My original script looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RUNSIZE=50&lt;br /&gt;
#RUNSIZE=100&lt;br /&gt;
#RUNSIZE=150&lt;br /&gt;
#RUNSIZE=200&lt;br /&gt;
app1 $RUNSIZE dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For every run of that job I have to change the RUNSIZE variable, and submit each script. This gets tedious.&lt;br /&gt;
&lt;br /&gt;
With Array Jobs the script can be written like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#$ -t 50:200:50&lt;br /&gt;
RUNSIZE=$SGE_TASK_ID&lt;br /&gt;
app1 $RUNSIZE dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
I then submit that job, and SGE understands that it needs to run it 4 times, once for each task. It also knows that it can and should run these tasks in parallel.&lt;br /&gt;
&lt;br /&gt;
==== Choosing a Dataset ====&lt;br /&gt;
A slightly more complex use of Array Jobs is the following:&lt;br /&gt;
&lt;br /&gt;
I have an application, app2, that needs to be run against every line of my dataset. Every line changes how app2 runs slightly, but I need to compare the runs against each other.&lt;br /&gt;
&lt;br /&gt;
Originally I had to take each line of my dataset and generate a new submit script and submit the job. This was done with yet another script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 DATASET=dataset.txt&lt;br /&gt;
 scriptnum=0&lt;br /&gt;
 while read LINE&lt;br /&gt;
 do&lt;br /&gt;
     echo &amp;quot;app2 $LINE&amp;quot; &amp;gt; ${scriptnum}.sh&lt;br /&gt;
     qsub ${scriptnum}.sh&lt;br /&gt;
     scriptnum=$(( $scriptnum + 1 ))&lt;br /&gt;
 done &amp;lt; $DATASET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Not only is this needlessly complex, it is also slow, as qsub has to verify each job as it is submitted. This can be done easily with array jobs, as long as you know the number of lines in the dataset. This number can be obtained like so: wc -l dataset.txt in this case lets call it 5000.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#$ -t 1:5000&lt;br /&gt;
app2 `sed -n &amp;quot;${SGE_TASK_ID}p&amp;quot; dataset.txt`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This uses a subshell via `, and has the sed command print out only the line number $SGE_TASK_ID out of the file dataset.txt.&lt;br /&gt;
&lt;br /&gt;
Not only is this a smaller script, it is also faster to submit because it is one job instead of 5000, so qsub doesn't have to verify as many.&lt;br /&gt;
&lt;br /&gt;
To give you an idea about time saved: submitting 1 job takes 1-2 seconds. by extension if you are submitting 5000, that is 5,000-10,000 seconds, or 1.5-3 hours.&lt;br /&gt;
== Running jobs interactively ==&lt;br /&gt;
Some jobs just don't behave like we think they should, or need to be run with somebody sitting at the keyboard and typing in response to the output the computers are generating. Beocat has a facility for this, called 'qrsh'. qrsh uses the exact same command-line arguments as qsub. If no node is available with your resource requirements, qrsh will tell you&lt;br /&gt;
 Your &amp;quot;qrsh&amp;quot; request could not be scheduled, try again later.&lt;br /&gt;
Note that, like qsub, your interactive job will timeout after your allotted time has passed.&lt;br /&gt;
== Altering Job Requests ==&lt;br /&gt;
We generally do not support users to modify job parameters once the job has been submitted. It can be done, but there are numerous catches, and all of the variations can be a bit problematic; it is normally easier to simply delete the job and resubmit it with the right parameters. '''If your job doesn't start after modifying such parameters (after a reasonable amount of time), delete the job and resubmit it.'''&lt;br /&gt;
=== qalter ===&lt;br /&gt;
&amp;lt;tt&amp;gt;qalter&amp;lt;/tt&amp;gt; is the command that can be used to modify parameters of the job after it has been submitted. '''Note: resource requests (memory, runtime, et. al.) can only be modified on jobs that have yet to start running.'''&lt;br /&gt;
==== Changing resource requests ====&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
qalter -l $all_resources $jobid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
When modifying resource requests, you '''must''' specify all of the resources your job needs, not just the one you plan to change. If you just specify h_rt, it will drop the memory request. If you just specify memory, it will drop the h_rt. And so on. This leads to jobs failing to start.&lt;br /&gt;
==== Changing core requests ====&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
qalter -pe $pe_name $number_of_cores $jobid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you request more cores than are available in the parallel environment that you need, the job may fail to start.&lt;br /&gt;
: i.e. requesting 400 cores in the single environment will fail due to the fact that we have no machines with 400 cores.&lt;br /&gt;
==== Determining why a job is not running ====&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
qalter -w v $jobid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This will output the scheduler's reasoning as to why the job has not started. Note that lines like:&lt;br /&gt;
 Job 1122334455 cannot run in PE &amp;quot;single&amp;quot; because it only offers 0 slots&lt;br /&gt;
Are usually red herrings. Sometimes they are indicative that the scheduler cannot meet the resources requests for that job at this moment in time.&lt;br /&gt;
&lt;br /&gt;
Sometimes you will see output like this:&lt;br /&gt;
 Job 1122334455 does not request 'forced' resource &amp;quot;memory&amp;quot; of queue instance batch.q@elf73.beocat&lt;br /&gt;
In this case the user performed a qalter and forgot to specify the memory request. The job will never run in this state.&lt;br /&gt;
&lt;br /&gt;
Other times it will have lots of lines like this:&lt;br /&gt;
 verification: found possible assignment with 1 slots&lt;br /&gt;
This indicates that the job should be scheduled shortly.&lt;br /&gt;
== Killable jobs ==&lt;br /&gt;
There are a growing number of machines within Beocat that are owned by a particular person or group. Normally jobs from users that aren't in the group designated by the owner of these machines cannot use them. This is because we have guaranteed that the nodes will be accessible and available to the owner at any given time. We will allow others to use these nodes if they designate their job as &amp;quot;killable.&amp;quot; If your job is designated as killable, your job will be able to use these nodes, but can (and will) be killed off at any point in time to make way for the designated owner's jobs. Jobs that are marked killable will be re-queued and may restart on another node.&lt;br /&gt;
&lt;br /&gt;
The way you would designate your job as killable is to add &amp;lt;tt&amp;gt;-l killable&amp;lt;/tt&amp;gt; to the '''&amp;lt;tt&amp;gt;qsub&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;qrsh&amp;lt;/tt&amp;gt;''' arguments. This could be either on the command-line or in your script file.&lt;br /&gt;
&lt;br /&gt;
''Note: This is a submit-time only request, it cannot be added by a normal user after the job has been submitted.'' If you would like jobs modified to be '''killable''' after the jobs have been submitted (and it is too much work to &amp;lt;tt&amp;gt;qdel&amp;lt;/tt&amp;gt; the jobs and re-submit), send an e-mail to the administrators detailing the job ids and what you would like done.&lt;br /&gt;
&lt;br /&gt;
== Scheduling Priority ==&lt;br /&gt;
The scheduler uses a complex formula to determine the order that jobs get scheduled in.  Jobs in general get run in the order that they are submitted to the queue with the following exceptions.  Jobs for users in a group that owns nodes will immediately get scheduled on those nodes even if that means bumping existing jobs off.  Users in groups that have contributed funds to Beocat may have higher scheduling priority.  You can check the base scheduling priority of each group using &amp;lt;tt&amp;gt;qconf -sst&amp;lt;/tt&amp;gt;.   If you do not have a group your jobs are scheduled using BEODEFAULT.  The higher the priority, the faster your job will be moved to the front of the queue.  A fair scheduling algorithm adjusts this scheduling priority down as users in that group submit more jobs.  &lt;br /&gt;
&lt;br /&gt;
Since all users not in a group having higher priority get put into BEODEFAULT, the priority is always very low and each job gets scheduled in the order it was submitted.  Groups with a higher priority may jump ahead of the BEODEFAULT jobs, but if these groups are submitting lots of jobs their priority will become low as well.  Groups with the highest priority that are submitting the fewest jobs may see those jobs moved to the front of the queue quickly.&lt;br /&gt;
&lt;br /&gt;
When processing cores become available, the scheduler looks at the head of the queue to find jobs that will fit within the resources available.  Shorter jobs of 12 hours or less get marked as killable and will be run on nodes owned by other groups.  These jobs will jump past longer jobs when resources become available on owned nodes.  Many jobs in the queue may require more memory than is available on some nodes, so smaller memory jobs will be scheduled ahead of larger memory jobs on hosts with more limited memory.  &amp;lt;tt&amp;gt;kstat -q&amp;lt;/tt&amp;gt; will show you the order in the queue and allow you to see jobs marked as &amp;quot;killable&amp;quot; and those that require large memory.&lt;br /&gt;
&lt;br /&gt;
== Job Accounting ==&lt;br /&gt;
Some people may find it useful to know what their job did during its run. The qacct tool will read SGE's accounting file and give you summarized or detailed views on jobs that have run within Beocat.&lt;br /&gt;
=== qacct ===&lt;br /&gt;
This data can usually be used to diagnose two very common job failures.&lt;br /&gt;
==== Job debugging ====&lt;br /&gt;
It is simplest if you know the job number of the job you are trying to get information on.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# if you know the jobid, put it here:&lt;br /&gt;
qacct -j 1122334455&lt;br /&gt;
# if you don't know the job id, you can look at your jobs over some number of days in this case the past 14 days:&lt;br /&gt;
qacct -o $USER -d 14 -j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== My job didn't do anything when it ran! =====&lt;br /&gt;
 &amp;lt;tt&amp;gt;qname        batch.q             &lt;br /&gt;
 hostname     mage07.beocat       &lt;br /&gt;
 group        some_user_users        &lt;br /&gt;
 owner        some_user              &lt;br /&gt;
 project      BEODEFAULT          &lt;br /&gt;
 department   defaultdepartment   &lt;br /&gt;
 jobname      my_job_script.sh  &lt;br /&gt;
 jobnumber    1122334455          &lt;br /&gt;
 ...&lt;br /&gt;
 snipped to save space&lt;br /&gt;
 ...&lt;br /&gt;
 exit_status  1                   &amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt style=&amp;quot;color: red&amp;quot;&amp;gt;ru_wallclock 1s&amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt&amp;gt;ru_utime     0.030s&lt;br /&gt;
 ru_stime     0.030s&lt;br /&gt;
 ...&lt;br /&gt;
 snipped to save space&lt;br /&gt;
 ...&lt;br /&gt;
 arid         undefined&lt;br /&gt;
 category     -u some_user -q batch.q,long.q -l h_rt=604800,mem_free=1024.0M,memory=2G&amp;lt;/tt&amp;gt;&lt;br /&gt;
If you look at the line showing ru_wallclock. You can see that it shows 1s. This means that the job started and then promptly ended. This points to something being wrong with your submission script. Perhaps there is a typo somewhere in it.&lt;br /&gt;
&lt;br /&gt;
===== My job ran but didn't finish! =====&lt;br /&gt;
 &amp;lt;tt&amp;gt;qname        batch.q             &lt;br /&gt;
 hostname     scout59.beocat      &lt;br /&gt;
 group        some_user_users     &lt;br /&gt;
 owner        some_user           &lt;br /&gt;
 project      BEODEFAULT          &lt;br /&gt;
 department   defaultdepartment   &lt;br /&gt;
 jobname      my_job_script.sh           &lt;br /&gt;
 jobnumber    1122334455            &lt;br /&gt;
 ...&lt;br /&gt;
 snipped to save space&lt;br /&gt;
 ...            &lt;br /&gt;
 slots        1                   &amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt style=&amp;quot;color: red&amp;quot;&amp;gt;failed       37  : qmaster enforced h_rt, h_cpu, or h_vmem limit&amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt&amp;gt;exit_status  0                   &amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt style=&amp;quot;color: red&amp;quot;&amp;gt;ru_wallclock 21600s&amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt&amp;gt;ru_utime     0.130s&lt;br /&gt;
 ru_stime     0.020s&lt;br /&gt;
 ...&lt;br /&gt;
 snipped to save space&lt;br /&gt;
 ...&lt;br /&gt;
 arid         undefined&amp;lt;/tt&amp;gt;&lt;br /&gt;
 &amp;lt;tt style=&amp;quot;color: red&amp;quot;&amp;gt;category     -u some_user -q batch.q,long.q -l h_rt=21600,mem_free=512.0M,memory=1G&amp;lt;/tt&amp;gt;&lt;br /&gt;
If you look at the lines showing failed, ru_wallclock and category we can see some pointers to the issue.&lt;br /&gt;
It didn't finish because the scheduler (qmaster) enforced some limit. If you look at the category line, the only limit requested was h_rt. So it was a runtime (wallclock) limit.&lt;br /&gt;
Comparing ru_wallclock and the h_rt request, we can see that it ran until the h_rt time was hit, and then the scheduler enforce the limit and killed the job. You will need to resubmit the job and ask for more time next time.&lt;/div&gt;</summary>
		<author><name>Sgstrohkorb</name></author>
	</entry>
</feed>