Skip to content

Commit d586687

Browse files
Merge pull request #3035 from jasonrandrews/review2
Arm Performix updates
2 parents 5378ddf + f07c443 commit d586687

6 files changed

Lines changed: 19 additions & 11 deletions

File tree

.wordlist.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5953,4 +5953,8 @@ uarch
59535953
umount
59545954
vtable
59555955
xC
5956-
Performix
5956+
Performix
5957+
ArmPerformix
5958+
callees
5959+
parallelizable
5960+
performix

content/install-guides/performix.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,8 @@ Choose one of the following methods to authenticate with your target:
384384
- Generates an RSA 4096-bit key pair on your host (without a passphrase)
385385
- Authenticates to the target using the password you provide
386386
- Adds the public key to the target's `~/.ssh/authorized_keys` file
387-
- Records the target's host key in APX's known hosts
388-
- Stores the private key securely for future APX connections
387+
- Records the target's host key in the known hosts list
388+
- Stores the private key securely for future connections
389389
- Discards the password immediately after use (not stored)
390390

391391
**Host key verification:**

content/learning-paths/servers-and-cloud-computing/cpu_hotspot_performix/_index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ operatingsystems:
3030

3131

3232
further_reading:
33+
- resource:
34+
title: Optimize application performance using Arm Performix CPU microarchitecture analysis
35+
link: /learning-paths/servers-and-cloud-computing/performix-microarchitecture/
36+
type: documentation
3337
- resource:
3438
title: Flame Graphs
3539
link: https://www.brendangregg.com/flamegraphs.html

content/learning-paths/servers-and-cloud-computing/cpu_hotspot_performix/how-to-2.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ You don't need to understand the Mandelbrot algorithm in detail to follow this L
1717

1818
## Connect to Target
1919

20-
If this is your first time setting up Arm Performix, follow the [Arm Performix installation guide](/install-guides/performix/). In this Learning Path you'll connect to an AWS Graviton3 metal instance (`m7g.metal`) with 64 Neoverse V1 cores, your remote target server. From the host machine, test the connection to the remote server by navigating to **Targets** > **Test Connection**. You should see the successful connection screen below.
20+
If this is your first time setting up Arm Performix, follow the [Arm Performix install guide](/install-guides/performix/). In this Learning Path you'll connect to an AWS Graviton3 metal instance (`m7g.metal`) with 64 Neoverse V1 cores, your remote target server. From the host machine, test the connection to the remote server by navigating to **Targets** > **Test Connection**. You should see the successful connection screen below.
2121

2222
![The Arm Performix Targets panel showing a successful connection test result for a remote Arm server#center](./successful-connection.jpg "Successful connection to remote target")
2323

content/learning-paths/servers-and-cloud-computing/cpu_hotspot_performix/how-to-3.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ layout: learningpathall
88

99
## Run Code Hotspots recipe
1010

11-
As shown in the `src/main_single_thread.cpp` file below, the program generates a 1920×1080 bitmap image of the fractal. To identify performance bottlenecks, run the Code Hotspots recipe in Arm Performix (APX). APX uses sampling to estimate where the CPU spends most of its time, allowing it to highlight the hottest functions—especially useful in larger applications where it isn't obvious ahead of time which functions will dominate runtime.
11+
As shown in the `src/main_single_thread.cpp` file below, the program generates a 1920×1080 bitmap image of the fractal. To identify performance bottlenecks, run the Code Hotspots recipe in Arm Performix. It uses sampling to estimate where the CPU spends most of its time, highlighting the hottest functions—especially useful in larger applications where it isn't obvious ahead of time which functions will dominate runtime.
1212

1313
{{% notice Note %}}
14-
The `myplot.draw()` call uses a relative path (`./images/green.bmp`). When APX launches the binary, it runs it from a temporary location, so the image would be written there rather than to your project directory. To ensure the output is saved where you expect it, update the first string argument in `src/main_single_thread.cpp` to the absolute path of the output file, for example `/home/ec2-user/Mandelbrot-Example/images/green.bmp`.
14+
The `myplot.draw()` call uses a relative path (`./images/green.bmp`). When Arm Performix launches the binary, it runs it from a temporary location, so the image would be written there rather than to your project directory. To ensure the output is saved where you expect it, update the first string argument in `src/main_single_thread.cpp` to the absolute path of the output file, for example `/home/ec2-user/Mandelbrot-Example/images/green.bmp`.
1515
{{% /notice %}}
1616

1717
```cpp
@@ -40,11 +40,11 @@ make clean
4040
make single_thread DEBUG=1
4141
```
4242

43-
Open APX from the host machine. Select the **Code Hotspot** recipe. If this is the first time running the recipe on this target machine you might need to select the install tools button.
43+
Open Arm Performix from the host machine. Select the **Code Hotspot** recipe. If this is the first time running the recipe on this target machine you might need to select the install tools button.
4444

4545
![The Arm Performix recipe selection screen with the Code Hotspots recipe highlighted and the install tools button visible for first-time setup#center](./install-tools.jpg "Selecting the Code Hotspots recipe")
4646

47-
Configure the recipe to launch a new process. APX will automatically start collecting metrics when the program starts and stop when the program exits.
47+
Configure the recipe to launch a new process. Arm Performix will automatically start collecting metrics when the program starts and stop when the program exits.
4848

4949
Provide the absolute path to the binary built in the previous step: `/home/ec2-user/Mandelbrot-Example/build/mandelbrot_single_thread_debug`.
5050

@@ -54,7 +54,7 @@ Use the default sampling rate of **Normal**. If your application is short-runnin
5454

5555
## Analyze results
5656

57-
A flame graph is generated once the run completes. The default colour mode labels the hottest functions—those using CPU most frequently—in the darkest shade. In this example, the `__complex_abs__` function is present in approximately 65% of samples, and it calls the `__hypot` symbol in `libm.so`.
57+
A flame graph is generated once the run completes. The default color mode labels the hottest functions—those using CPU most frequently—in the darkest shade. In this example, the `__complex_abs__` function is present in approximately 65% of samples, and it calls the `__hypot` symbol in `libm.so`.
5858

5959
![A flame graph showing single-threaded Mandelbrot profiling results with __complex_abs__ as the dominant hotspot#center](./single-thread-flame-graph.jpg "Single-threaded flame graph showing __complex_abs__ as the hottest function")
6060

content/learning-paths/servers-and-cloud-computing/cpu_hotspot_performix/how-to-4.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ make clean
6666
make parallel DEBUG=1
6767
```
6868

69-
Update the binary path in APX to `./builds/mandelbrot_parallel_debug` and pass the desired thread count as an argument, then rerun the recipe from the host.
69+
Update the binary path in Arm Performix to `./builds/mandelbrot_parallel_debug` and pass the desired thread count as an argument, then rerun the recipe from the host.
7070

7171
To compare with a previous run, switch to comparison mode. Under the **Run Details** tab, execution time drops further from 0m 32s to 7s with 32 threads.
7272

@@ -77,7 +77,7 @@ The proportion of samples has not changed significantly overall, but with 64 thr
7777
![Side-by-side flame graph comparison between single-threaded and parallel Mandelbrot builds, showing reduced dominance of the Mandelbrot::draw function#center](./flame-graph-comparison.jpg "Flame graph comparison: single-threaded vs parallelized build")
7878

7979
{{% notice Note %}}
80-
The total run duration shown in APX includes tooling setup and data analysis time, not just application execution time. To measure only the application, use the `time` command: the application now runs in approximately 1 second — close to a 100x improvement over the original single-threaded baseline.
80+
The total run duration shown in Arm Performix includes tooling setup and data analysis time, not just application execution time. To measure only the application, use the `time` command: the application now runs in approximately 1 second — close to a 100x improvement over the original single-threaded baseline.
8181
{{% /notice %}}
8282

8383
### (Optional challenge) Additional optimizations

0 commit comments

Comments
 (0)