Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision |
doku:forge [2020/09/24 11:48] – sh | doku:forge [2022/11/04 10:14] – [Usage of map:] goldenberg |
---|
===== forge = map + ddt (VSC-3) ===== | ===== forge = map + ddt ===== |
==== Synopsis: ==== | ==== Synopsis: ==== |
<html> <font color=#cc3300><b>map</b></font> </html> and <html> <font color=#cc3300><b>ddt</b></font> </html> are ARM's (formerly Allinea's) advanced tools for performance analysis, see [[https://developer.arm.com/tools-and-software/server-and-hpc/debug-and-profile/arm-forge]]. | <html> <font color=#cc3300><b>map</b></font> </html> and <html> <font color=#cc3300><b>ddt</b></font> </html> are ARM's (formerly Allinea's) advanced tools for performance analysis, see [[https://developer.arm.com/tools-and-software/server-and-hpc/debug-and-profile/arm-forge]]. |
Licenses for up to 512 parallel tasks are available. Of additional note, <html> <font color=#cc3300><b>perf-report</b></font> </html> --- a related lightweight profiling tool --- has now been integrated into forge in more recent releases. | Licenses for up to 512 parallel tasks are available. Of additional note, [[doku:perf-report|perf-report]] --- a related lightweight profiling tool --- has now been integrated into forge in more recent releases. |
| |
| |
#SBATCH -J map | #SBATCH -J map |
#SBATCH -N 4 | #SBATCH -N 4 |
#SBATCH -L allinea@vsc | |
#SBATCH --ntasks-per-node 16 | #SBATCH --ntasks-per-node 16 |
#SBATCH --ntasks-per-core 1 | #SBATCH --ntasks-per-core 1 |
| |
module purge | module purge |
module load intel/18 intel-mpi/2018 allinea/20.1_FORGE | module load intel/18 intel-mpi/2018 arm/20.1_FORGE |
| |
map --profile srun --jobid $SLURM_JOB_ID --mpi=pmi2 -n 64 ./a.out | map --profile srun --jobid $SLURM_JOB_ID --mpi=pmi2 -n 64 ./a.out |
which generates a *.map file (note the mention of #tasks and #nodes together with the date/time stamp in the filename) that may then be analyzed via the gui, ie | which generates a *.map file (note the mention of #tasks and #nodes together with the date/time stamp in the filename) that may then be analyzed via the gui, ie |
| |
ssh vsc3.vsc.ac.at -l my_uid -X | ssh vsc4.vsc.ac.at -l my_uid -X |
cd wherever/the/map/file/may/be | cd wherever/the/map/file/may/be |
| |
| |
==== Usage of ddt: ==== | ==== Usage of ddt: ==== |
Debugging with ''ddt'' is currently limited to the __Remote Launch__ option. There are two ways to launch this type of ''ddt''-sessions: | Debugging with ''ddt'' is currently limited to the __Remote Launch__ option. |
| <html><!-- There are two ways to launch this type of ''ddt''-sessions: --></html> |
| Best is to launch ''ddt''-sessions on separate compute nodes. |
| |
<html><!-- === 1.) ddt (semi-interactive via sbatch): === --></html> | <html><!-- === 1.) ddt (semi-interactive via sbatch): === --></html> |
| |
| |
=== 2.) ddt (fully interactive via salloc): === | === ddt (fully interactive via salloc): === |
The following steps need to be carried out: | The following steps need to be carried out: |
| |
ssh vsc3.vsc.ac.at -l my_uid -X | ssh vsc3.vsc.ac.at -l my_uid -X |
my_uid@l33$ module load intel/16 intel-mpi/5 allinea/18.2_FORGE ( or whatever else suite of MPI ) | |
my_uid@l33$ cd wherever/my/app/may/be | my_uid@l33$ cd wherever/my/app/may/be |
my_uid@l33$ mpicc -g -O0 my_app.c | |
my_uid@l33$ salloc -N 4 -L allinea@vsc | my_uid@l33$ salloc -N 4 -L allinea@vsc |
my_uid@l33$ scontrol show hostnames $SLURM_NODELIST > ./machines.txt | my_uid@l33$ echo $SLURM_JOB_ID ( just to figure out the current job ID, say it's 8909346 ) |
... let's assume we got n12-[045,051,068,071] which should now be listed inside file 'machines.txt' | my_uid@l33$ srun --jobid 8909346 -n 4 hostname | tee ./machines.txt ( this is important ! it looks like a redundant command but will actually fix a lot of the prerequisites usually taken care of in the SLURM prologue of regular submit scripts, one of them being provisioning of required licenses ) |
| ... let's assume we got n305-[044,057,073,074] which should now be listed inside file 'machines.txt' |
my_uid@l33$ rm -rf ~/.allinea/ ( to get rid of obsolete configurations from previous sessions ) | my_uid@l33$ rm -rf ~/.allinea/ ( to get rid of obsolete configurations from previous sessions ) |
my_uid@l33$ srun -n 4 hostname ( this is important ! it looks like a redundant command but will actually fix a lot of the prerequisites usually taken care of in the SLURM prologue of regular submit scripts, one of them being provisioning of required licenses ) | my_uid@l33$ module purge |
my_uid@l33$ ddt & | my_uid@l33$ module load intel/18 intel-mpi/2018 allinea/20.1_FORGE ( or whatever else suite of MPI ) |
| my_uid@l33$ mpiicc -g -O0 my_app.c |
| my_uid@l33$ ddt & ( gui should open ) |
... select 'Remote Launch - Configure' | ... select 'Remote Launch - Configure' |
... click 'Add' | ... click 'Add' |
... set my_uid@n12-045 as 'Host Name' or any other node from the above list | ... set my_uid@n305-044 as 'Host Name' or any other node from the above list |
... set 'Remote Installation Directory' to /opt/sw/x86_64/glibc-2.17/ivybridge-ep/allinea/18.2_FORGE | ... set 'Remote Installation Directory' to /opt/sw/x86_64/glibc-2.17/ivybridge-ep/allinea/20.1_FORGE |
... check it with 'Test Remote Launch' ( should be ok ) | ... keep auto-selected defaults for the rest, then check it with 'Test Remote Launch' ( should be ok ) |
... click OK twice to close the dialogues | ... click OK twice to close the dialogues |
... click Close to exit from the Configure menu | ... click Close to exit from the Configure menu |
... next really select 'Remote Launch' by clicking the name tag that was auto-assigned above ( licence label should be ok in the lower left corner and the connecting client should appear in the lower right corner ) | ... next really select 'Remote Launch' by clicking the name tag that was auto-assigned above ( licence label should be ok in the lower left corner and the hostname of the connecting client should appear in the lower right corner ) |
| |
ssh vsc3.vsc.ac.at -l my_uid ( a second terminal will be needed to actually start the debug session ) | ssh vsc3.vsc.ac.at -l my_uid ( a second terminal will be needed to actually start the debug session ) |
my_uid@l34$ ssh n12-045 ( log into that compute node that was selected/prepared above for remote launch ) | my_uid@l34$ ssh n305-044 ( log into that compute node that was selected/prepared above for remote launch ) |
my_uid@n12-045$ module load intel/16 intel-mpi/5 allinea/18.2_FORGE | my_uid@n305-044$ module purge |
my_uid@n12-045$ cd wherever/my/app/may/be | my_uid@n305-044$ module load intel/18 intel-mpi/2018 allinea/20.1_FORGE |
my_uid@n12-045$ mpirun -np 16 -machinefile ./machines.txt hostname ( just a dummy check to see whether all is set up correctly ) | my_uid@n305-044$ cd wherever/my/app/may/be |
my_uid@n12-045$ ddt --connect mpirun -np 64 -machinefile ./machines.txt ./a.out -arg1 -arg2 ( in the initial ddt-window a dialogue will pop up prompting for a Reverse Connection request; accept it and click Run and the usual debug session will start ) | my_uid@n305-044$ srun --jobid 8909346 -n 16 hostname ( just a dummy check to see whether all is set up and working correctly ) |
| my_uid@n305-044$ ddt --connect srun --jobid 8909346 --mpi=pmi2 -n 64 ./a.out -arg1 -arg2 ( in the initial ddt-window a dialogue will pop up prompting for a Reverse Connection request; accept it and click Run and the usual debug session will start ) |
| |
| |
==== Further Reading: ==== | ==== Further Reading: ==== |
''/opt/sw/x86_64/glibc-2.17/ivybridge-ep/allinea/18.2_FORGE/doc/userguide-forge.pdf'' | ''/opt/sw/x86_64/glibc-2.17/ivybridge-ep/allinea/20.1_FORGE/doc/userguide-forge.pdf'' |
| |
| |