======Using the SUN M9000 SMP====== This guide explains how to use the M9000 massive multi-core shared memory super computer. =====Hardware===== | ^ M9000 | ^ CPU | 64× SPARC64 VII quad-core | ^ CPU clock | 2.88 GHz | ^ CPU cores | 256 (512 threads available) | ^ Memory | 2 048 GB (2 TB)| ^ Peak performance | 2 Tflops | ^ Linpack performance | [[wp>SPARC_Enterprise|1.032 Tflops]] | ^ Interconnect | Jupiter | ^ O.S. | Solaris 10 | ^ Storage | 5.3 TB XFS | ^ Incept date | September 2009 | =====Operating System===== The operating system on the M9000 is Oracle (né Sun) Solaris version 10: m9000:~$ uname -a SunOS m9000 5.10 Generic_139555-08 sun4u sparc SUNW,SPARC-Enterprise >SunOS is the actual name of the operating system; version 5 was renamed "Solaris" and the .10 in 5.10 refers to the version of Solaris. Wikipedia explains the confusing naming [[wp>Solaris_%28operating_system%29#History|history]]. =====File Systems===== ^ Partition ^ File System ^ Mount point ^ Size ^Usage | | Scratch | XFS | ''/scratch''/* | 5.3 TB | Scratch (local) storage | | | | ''/scratch/work/'' | 5.3 TB | Local scratch **work** directory | | Gridware | NFS | ''/opt/gridware'' | 1.6 TB | Shared software*: compilers, tools, libraries and applications | | Home | NFS | ''/export/home'' | 1.8 TB | Users' home directories from Sun cluster storage | | Software | | ''/opt/software'' | | SPARC64-Solaris compatible software: compilers and libraries| * **WARNING:** *Most of the software in ''/opt/gridware'' is compiled for the amd64 (x86_64) architecture of the Sun/Dell clusters and is **not** usable on the sparc architecture of the M9000. The M9000 does not mount the Lustre SCRATCH* file systems. If you need fast local storage for your processing jobs, request a sub-directory be created for you on ''/scratch/work/'' by emailing {{:guide:helpdesk.png?nolink|}}. =====Compilers===== | Language ^ GCC ^ Sun Studio | ^ C | ''gcc'' | ''cc'' | ^ Fortran | ''gfortran'' | ''f90'' / ''f95'' | ^ C++ | ''g++'' | ''CC'' | The recommended system compilers are Sun Studio. The installed version is: m9000:~$ f90 -V f90: Sun Fortran 95 8.3 SunOS_sparc Patch 127000-07 2008/10/21 Usage: f90 [ options ] files. Use 'f90 -flags' for details The default system GCC compilers are very old (version 3.4.x) and the newer GCC 4.6.3 is installed in ''/opt/software/gcc-4.6.3/''. Add to your path variables: export PATH=/opt/software/gcc-4.6.3/bin:$PATH export LD_LIBRARY_PATH=/opt/software/gcc-4.6.3/lib:$LD_LIBRARY_PATH export MANPATH=/opt/software/gcc-4.6.3/share/man:$MANPATH And, when building code using make files or ''configure'' you will need to specify the compilers to use: ===GCC 4.6.3=== export CC=gcc export CXX=g++ export FC=gfortran export F77=gfortran ===Sun Studio=== export CC=cc export CXX=CC export FC=f90 export F77=f90 ====OpenMP==== The above compilers include support for OpenMP. To compile an OpenMP code with the GCC compilers add the ''-fopenmp'' option. For example: gcc -o mp_hello -fopenmp mp_hello.c Example code from [[https://computing.llnl.gov/tutorials/openMP/samples/C/omp_hello.c]] With the Sun Studio compilers, use the ''-xopenmp=parallel'' option or the safer ''-xopenmp=noopt'' option. See Oracle's [[http://docs.oracle.com/cd/E19205-01/820-7883/820-7883.pdf|documentation]]. | ''-xopenmp=parallel'' | Enables recognition of OpenMP pragmas. **The minimum optimization level for ''-xopenmp=parallel'' is ''-xO3''**. The compiler changes the optimization from a lower level to ''-xO3'' if necessary, and issues a warning. | Not recommended unless you know what you are doing and really want full speed. | ^ ''-xopenmp=noopt'' ^ Enables recognition of OpenMP pragmas. The compiler does not raise the optimization level if it is lower than ''-xO3''. If you explicitly set the optimization level lower than ''-xO3'', as in ''-xO2 -openmp=noopt'' the compiler will issue an error. //If you do not specify an optimization level with// ''-openmp=noopt'', //the OpenMP pragmas are recognized, the program is parallelized accordingly, but no optimization is done.// ^ Recommended as it does not introduce potentially risky out of order optimisations. ^ * **IMPORTANT** Always use validation and verification test benchmarks with your parallel code after compiling with OpenMP enabled and especially if you used any compiler optimisations. Floating point arithmetic is **not associative** and out of order execution may introduce greater than expected approximation errors. =====Libraries===== See under ''/opt/software/'' and add to paths (see above examples) as needed. ====MPI==== =====Job submission===== [Courtesy of Sean February] The queue name for the M9000 machine is spark. Your job script (see example below) must be located somewhere in ''/scratch/work/yourusername/'' (equivalently ''/export/home/yourusername/m9_scratch/''). Submission should be done normally via the PBS scheduler from the login node: yourusername@login02:~/m9_scratch $ qsub jobscriptname Example script: #!/bin/sh #PBS -N test #PBS -q spark #PBS -l select=1:ncpus=10:mpiprocs=10 #PBS -l place=free #PBS -l walltime=01:00:00 #PBS -o /scratch/work/yourusername/stdout #PBS -e /scratch/work/yourusername/stderr cd $PBS_O_WORKDIR HOME_DIR=/scratch/work/yourusername/ LOG_NAME=testjob_log THIS_JOB=$HOME_DIR$LOG_NAME echo "My job starts here" > $THIS_JOB date >> $THIS_JOB pwd >> $THIS_JOB echo $PATH >> $THIS_JOB echo `cat $PBS_NODEFILE` >> $THIS_JOB date >> $THIS_JOB echo "My job ends here" >> $THIS_JOB