Who is this for?

This is an introductory topic for developers who would like to learn about sampling CPU instructions with WindowsPerf and the Arm Statistical Profiling Extension (SPE).

What will you learn?

Upon completion of this Learning Path, you will be able to:

  • Use WindowsPerf with a native Windows on Arm workload.
  • Describe the basic concepts of sampling with Arm SPE.
  • Explore the WindowsPerf command line.
  • Build CPython from sources for Windows on Arm (AArch64).

Prerequisites

Before starting, you will need the following:

  • A Windows on Arm desktop or development machine, with CPU support for SPE.
  • An installation of WindowsPerf .
  • An installation of Visual Studio .
  • An installation of Git .

Summary

AI-assisted

This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
You’ll use WindowsPerf and the Arm SPE to sample CPU instructions on Windows on Arm. First, you’ll check SPE support in the CPU and WindowsPerf binaries, build a debug CPython for AArch64, and run a compute-heavy expression. Then, you’ll use wperf sample and wperf record to start the workload and capture samples. Finally, you’ll review the results with source annotation and disassembly.

Frequently asked questions

AI-assisted

These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
Which WindowsPerf build should I use to profile with Arm SPE?
Use the SPE-enabled build included in WindowsPerf release 3.8.0. Download the release asset and select the WindowsPerf build in the SPE/ subdirectory.
Do I need a debug build of CPython for this path?
Yes. The examples use python_d.exe, which you build from CPython sources in debug mode for Windows on Arm (AArch64).
How do I pass Python arguments without wperf parsing them?
Use -- to separate wperf options from the arguments passed to python_d.exe. Everything after -- is forwarded to the Python process.
Why pin the CPython process to one CPU core, and which core is used?
Pinning keeps the workload on a known CPU so collected samples map to that core consistently. Pin the process to core 1.
What result should I expect after running wperf record with an SPE event?
WindowsPerf records SPE load events for the run. Use the --annotate and --disassemble options to review where sampled instructions map to source code and assembly.
Next