Changes between Version 9 and Version 10 of cypress/using
- Timestamp:
- 04/08/15 16:07:59 (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
cypress/using
v9 v10 26 26 For those who are new to cluster computing and resource management, let's begin with an explanation of what a resource manager is and why it is necessary. Suppose you have a piece of C code that you would like to compile and execute, for example a helloworld program. 27 27 28 [[Image(helloworld.png, 50%)]] 28 {{{#!c 29 #include<stdio.h> 29 30 30 31 int main(){ 32 printf("Hello World\n"); 33 return 0; 34 } 35 }}} 36 31 37 On your desktop you would open a terminal, compile the code using your favorite c compiler and execute the code. You can do this without worry as you are the only person using your computer and you know what demands are being made on your CPU and memory at the time you run your code. On a cluster, many users must share the available resources equitably and simultaneously. It's the job of the resource manager to choreograph this sharing of resources by accepting a description of your program and the resources it requires, searching the available hardware for resources that meet your requirements, and making sure that no one else is given those resources while you are using them. 32 38 … … 37 43 The syntax of these script directives is manager specific. For the SLURM resource manager, all script directives begin with "#SBATCH". Let's look at a basic SLURM script requesting one node and one core on which to run our helloworld program. 38 44 39 [[Image(hello_srun.png, 50%)]] 45 {{{#!bash 46 #!/bin/bash 47 #SBATCH --job-name=HiWorld ### Job Name 48 #SBATCH --output=Hi.out ### File in which to store job output 49 #SBATCH --error=Hi.err ### File in which to store job error messages 50 #SBATCH --qos=normal ### Quality of Service (like a queue in PBS) 51 #SBATCH --time=0-00:01:00 ### Wall clock time limit in Days-HH:MM:SS 52 #SBATCH --nodes=1 ### Node count required for the job 53 #SBATCH --ntasks-per-node=1 ### Nuber of tasks to be launched per Node 40 54 55 ./helloworld 56 }}} 41 57 42 58 Notice that the SLURM script begins with #!/bin/bash. This tells the Linux shell what flavor shell interpreter to run. In this example we use BASh (Bourne Again Shell). The choice of interpreter (and subsequent syntax) is up to the user, but every SLURM script should begin this way. This is followed by a collection of #SBATCH script directives telling the manager about the resources needed by our code and where to put the codes output. Lastly, we have the executable we wish the manager to run (note: this script assumes it is located in the same directory as the executable). … … 48 64 Our job was successfully submitted and was assigned the job number 6041. We can check the output of our job by examining the contents of our output and error files. Referring back to the helloworld.srun SLURM script, notice the lines 49 65 50 [[Image(output_error.png, 50%)]] 66 {{{#!bash 67 #SBATCH --output=Hi.out ### File in which to store job output 68 #SBATCH --error=Hi.err ### File in which to store job error messages 69 }}} 51 70 52 71 These specify files in which to store the output written to standard out and standard error, respectively. If our code ran without issue, then the Hi.err file should be empty and the Hi.out file should contain our greeting.