Skip to content

Commit b0ec899

Browse files
style: standardize section headings for consistency in how-to guides
1 parent 8aa5f61 commit b0ec899

3 files changed

Lines changed: 6 additions & 6 deletions

File tree

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
@@ -21,7 +21,7 @@ If this is your first time setting up Arm Performix, follow the [Arm Performix i
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

24-
## Build Application on Remote Server
24+
## Build application on remote server
2525

2626
Connect to the remote server using SSH or Visual Studio Code. Install git and the C++ compiler. On dnf-based systems such as Amazon Linux 2023 or RHEL, run:
2727

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ weight: 4
66
layout: learningpathall
77
---
88

9-
## Run Code Hotspots Recipe
9+
## Run Code Hotspots recipe
1010

1111
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.
1212

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

5353
![The Arm Performix Code Hotspots recipe configuration screen showing launch settings, binary path, and sampling rate fields#center](./code-hotspots-config.jpg "Code Hotspots recipe configuration")
5454

55-
## Analyse Results
55+
## Analyze results
5656

5757
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`.
5858

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Looking at the `Mandelbrot::getIterations` function, there are two clear optimiz
2222
}
2323
```
2424
25-
### Optimization 1 - Limiting loop boundary
25+
### Optimization 1: Limiting loop boundary
2626
2727
The iteration count is bounded by `MAX_ITERATIONS`, defined as 1024, a `static const` integer in the `Mandelbrot.h` header. Halving this to 512 reduces the maximum work per pixel but you will need to verify that the change in image quality is acceptable.
2828
@@ -46,7 +46,7 @@ There is negligible difference in perceived image quality when halving `MAX_ITER
4646

4747
![Side-by-side comparison of Mandelbrot fractal output at MAX_ITERATIONS 1024 (left) and 512 (right). Both images show the same level of detail and structure, confirming that the reduced iteration count doesn't compromise visual quality.#center](./comparison.jpg "Image quality comparison: 1024 vs 512 iterations")
4848

49-
### Optimization 2 - Parallelizing the hot function
49+
### Optimization 2: Parallelizing the hot function
5050

5151
The loop in `Mandelbrot::getIterations` has no loop-carried dependencies — each iteration's result is independent of any other. This means you can parallelize the hot function across multiple threads if your CPU has multiple cores.
5252

@@ -80,7 +80,7 @@ The proportion of samples has not changed significantly overall, but with 64 thr
8080
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.
8181
{{% /notice %}}
8282

83-
### (Optional Challenge) Additional optimizations
83+
### (Optional challenge) Additional optimizations
8484

8585
The `Makefile` uses the `-O0` flag when the `DEBUG=1` argument is passed in. This disables all compiler optimizations. Try experimenting with higher optimization levels, different loop boundary sizes, and thread counts. See the Learning Path [Get started with compiler optimization flags](/learning-paths/servers-and-cloud-computing/cplusplus_compilers_flags/) for guidance. You might also want to explore vectorized math libraries that could replace the `libm` hypotenuse function, such as the [Arm Performance Libraries vector math functions](https://developer.arm.com/documentation/101004/2601/Arm-Performance-Libraries-Math-Functions/Arm-Performance-Libraries-Vector-Math-Functions--Accuracy-Table).
8686

0 commit comments

Comments
 (0)