Full tracing mode traces more APIs than LWT tracing, see the List of Supported MPI APIs for Full Tracing table in MPI Full Tracing Using CLI for a complete list of APIs. This mode is helpful for in-depth analysis of an MPI application activity.
The report file for the full tracing includes multiple tables to represent various details.
-
MPI Communicator Summary consists
of the following columns :
- Ranks: Member rank IDs
- Communicator Size: Number of the member ranks
- Elapsed Time: Time spent by the MPI APIs in the communicator
-
See the Figure 1.
-
Rank Summary Table (All Ranks)
consists of the following columns:
- Rank: Rank ID.
- PID: Process ID.
- MPI Time (seconds): Total time spent on the MPI APIs.
- MPI Time (%): Percentage of MPI Time with respect to the total MPI time of all the ranks.
- Wait Time (seconds): Time spent by the rank waiting.
- Wait Time (%): Percentage of the rank wait time with respect to the application runtime.
- Call Count: Number of times MPI APIs are called.
- Volume (bytes): Volume of data in bytes sent or received.
- Volume (%): Percentage of volume with respect to the total volume sent or received by all the ranks.
- Elapsed Time (seconds): Application runtime.
- Time (%): Percentage of elapsed time with respect to the total elapsed time.
-
See the Figure 2.
-
MPI Function Summary Table consists
of the following columns.
- Function: MPI API name.
- Min Time (seconds): Minimum time spent in this API across all the ranks.
- Max Time (seconds): Maximum time spent in this API across all the ranks.
- Average Time (seconds): Average time spent on the API per rank.
- MPI Time (%): Percentage of the time spent on this API with respect to the total time spent on all the MPI APIs.
- Volume (Bytes): Total volume sent or received by this MPI API.
- Calls: Number of times this MPI API is called.
- Total Time (seconds): Total time spent in the API in all the ranks.
See Figure 3. Also see, non-collective communication APIs: Table 1, Table 2, and Table 3
-
Communication Matrix consists of
the following columns:
- Rank: Directed arrow from Sender rank ID to Receiver rank ID.
- MPI Time (seconds): Total time spent on the APIs sending data from the sender rank to the receiver rank.
- MPI Time (%): Percentage of MPI time with respect to the total MPI Time spent on all the APIs.
- Volume (Bytes): Total volume of data sent from the sender rank to the receiver rank.
- Volume (%): Percentage of volume with respect to the total volume transferred between all the ranks.
-
Transfers:
Number of transfers from the sender rank to the receiver rank.
See Figure 4.
-
Collective Events Summary consists
of the following columns:
- Function: API name.
- Min Time (seconds): Minimum time spent on this API across all ranks.
- Max Time (seconds): Maximum time spent on this API across all ranks.
- Average time (seconds): Average time spent on this API per rank.
- MPI Time (%): Percentage of time spent on this API with respect to the total time spent on all the MPI calls.
- Input Volume (Bytes): Total data in bytes received by all the ranks involved in this API call.
- Output Volume (Bytes): Total data sent by all the ranks involved in this API call.
- Calls: Number of times this API is called.
-
Total Time
(seconds): Total time spent in the API in all the
ranks.
See Figure 5. Also see: Table 1 for a list of APIs covered for this section.
The list of supported MPI APIs is as follows:
| Sr. No. | API | Sr. No. | API | Sr. No. | API |
|---|---|---|---|---|---|
| 1 | MPI_Pcontrol | 30 | MPI_Ssend_init | 59 | MPI_Iscatterv |
| 2 | MPI_Mrecv | 31 | MPI_Neighbor_alltoallv | 60 | MPI_Intercomm_create |
| 3 | MPI_Reduce | 32 | MPI_Ibarrier | 61 | MPI_Waitsome |
| 4 | MPI_Iallreduce | 33 | MPI_Test | 62 | MPI_Scatterv |
| 5 | MPI_Cancel | 34 | MPI_Rsend_init | 63 | MPI_Igather |
| 6 | MPI_Imrecv | 35 | MPI_Bcast | 64 | MPI_Intercomm_merge |
| 7 | MPI_Allreduce | 36 | MPI_Ibcast | 65 | MPI_Barrier |
| 8 | MPI_Ialltoall | 37 | MPI_Testall | 66 | MPI_Gather |
| 9 | MPI_Probe | 38 | MPI_Send_init | 67 | MPI_Igatherv |
| 10 | MPI_Send | 39 | MPI_Scan | 68 | MPI_Cart_create |
| 11 | MPI_Alltoall | 40 | MPI_Comm_create | 69 | MPI_Recv |
| 12 | MPI_Ialltoallv | 41 | MPI_Testany | 70 | MPI_Gatherv |
| 13 | MPI_Iprobe | 42 | MPI_Ibsend | 71 | MPI_Iallgather |
| 14 | MPI_Bsend | 43 | MPI_Reduce_scatter | 72 | MPI_Cart_sub |
| 15 | MPI_Alltoallv | 44 | MPI_Comm_dup | 73 | MPI_Irecv |
| 16 | MPI_Ialltoallw | 45 | MPI_Testsome | 74 | MPI_Allgather |
| 17 | MPI_Mprobe | 46 | MPI_Issend | 75 | MPI_Iallgatherv |
| 18 | MPI_Ssend | 47 | MPI_Ireduce_scatter | 76 | MPI_Graph_create |
| 19 | MPI_Alltoallw | 48 | MPI_Comm_dup_with_info | 77 | MPI_Sendrecv |
| 20 | MPI_Ineighbor_alltoall | 49 | MPI_Wait | 78 | MPI_Allgatherv |
| 21 | MPI_Improbe | 50 | MPI_Irsend | 79 | MPI_Ineighbor_allgather |
| 22 | MPI_Rsend | 51 | MPI_Iscan | 80 | MPI_Dist_graph_create |
| 23 | MPI_Neighbor_alltoall | 52 | MPI_Comm_split | 81 | MPI_Sendrecv_replace |
| 24 | MPI_Ineighbor_alltoallw | 53 | MPI_Waitall | 82 | MPI_Neighbor_allgather |
| 25 | MPI_Start | 54 | MPI_Isend | 83 | MPI_Ineighbor_allgatherv |
| 26 | MPI_Bsend_init | 55 | MPI_Iscatter | 84 | MPI_Dist_graph_create_adjacent |
| 27 | MPI_Neighbor_alltoallw | 56 | MPI_Comm_split_type | 85 | MPI_Recv_init |
| 28 | MPI_Ineighbor_alltoallv | 57 | MPI_Waitany | 86 | MPI_Neighbor_allgatherv |
| 29 | MPI_Startall | 58 | MPI_Scatter | 87 | MPI_Ireduce |
Collect Profile Data
Example of a command to FULL trace an MPI application using AMD uProf CLI:
$ mpirun -np <number of processes> ./AMDuProfCLI collect --trace mpi --mpi-impl mpich --mpi-scope full -o <output_directory> <application>
After completing the tracing, the path to the session directory is displayed on the terminal.
$ mpirun -np <number of processes> ./AMDuProfCLI collect --trace mpi --mpi-impl openmpi --mpi-scope full -o <output_directory> <application>
$ mpirun -np <number of processes> ./AMDuProfCLI collect --trace mpi --mpi-impl mpich --mpi-scope full -o <output_directory> <application>
Ensure that the correct option (mpich or openmpi) is passed depending on the MPI implementation used for compiling the MPI application. Passing an incorrect option might cause undefined behavior.
Generate Profile Report
Example of a command to generate the report in .csv format. Pass the session directory path with the-i
option:$ ./AMDuProfCLI report -i <output_directory>/<SESSION_DIR>
After completing the report generation, the report.csv file path is displayed on the terminal.
Tables in the Report file
The following screenshots show example sections of a full tracing report file: