2 Arm engineers published a case study on optimizing streaming speech recognition with ExecuTorch 1.3.1. The post was published on the PyTorch blog on October 26, 2026. They reported that enabling SME2 roughly halved FP16 (16-bit floating-point) processing time for a 24.9-second recording on Google Pixel 11. Apps must choose both precision and chunk size, the amount of audio collected for processing at once, to meet first-character latency and error rate targets.

Results

Original total processing times. QC8W uses dynamic INT8 activations and per-channel INT8 weights.

Conditions: Google Pixel 11 · 24.9-second recording · 1,120 ms chunks · 1 inference thread (pinned to a middle core) · ExecuTorch 1.3.1 SME2 on/off · 2 warm-up runs + 1 measured run

Unit: processing time in seconds

Results
PrecisionSME2 offSME2 onSpeedupReal-time factor (SME2 on)
FP169.794.612.12×0.19
QC8W (INT8)5.203.241.61×0.13

The real-time factor is processing time divided by audio duration. The authors say both configurations run faster than real time, leaving room for other CPU tasks. However, the first text must wait for audio collection, preprocessing, and inference.

Why the difference?

SME2 is Arm's matrix computation extension. In the authors' ETDump analysis, matrix multiplication (GEMM) accounted for the largest share of time. Enabling SME2 reduced both its time and share.

Table: GEMM execution time comparison from ETDump

Conditions: ETDump operator time · Pixel 11 · SME2 on/off comparison

Unit: seconds

GEMM (matrix multiplication) execution time from ETDump (seconds)FP16: SME2 off 8.2, SME2 on 3.1; QC8W (INT8): SME2 off 4.1, SME2 on 2.0SME2 offSME2 onFP168.23.1QC8W (INT8)4.12.0
GEMM (matrix multiplication) execution time from ETDump (seconds)
Why the difference?
PrecisionSME2 offSME2 on
FP168.23.1
QC8W (INT8)4.12.0

In the same analysis, GEMM's share fell from 84%→67% for FP16. For QC8W, it fell from 78%→62%. Data movement time, such as copying and concatenation, barely changed and remained a relative bottleneck. This work limits overall speedup and is a target for further optimization.

The authors' Arm Streamline measurements showed SME utilization of 38.4% for FP16. For QC8W it was 53.7%. This is the proportion of matrix hardware allocation, not a percentage of peak compute speed.

The authors' kernel sampling confirmed execution of KleidiAI's SME2 GEMM kernels. Some GEMMs still used the NEON vector path in the FP16 build and the FP32 path in the QC8W build.

Selection criteria

Original accuracy results by chunk size. WER stands for word error rate.

Conditions: host measurements · ExecuTorch runtime + XNNPACK CPU backend · 14,019 utterances across 4 corpora: LibriSpeech Other, AMI Cleaned, Earnings22, and VoxPopuli Cleaned AA

Unit: WER in %

Streaming WER versus chunk size (%)80: FP16 WER 15.2, QC8W WER 15.5; 320: FP16 WER 12.67, QC8W WER 12.97; 560: FP16 WER 12.01, QC8W WER 12.26; 1,120: FP16 WER 11.50, QC8W WER 11.72FP16 WERQC8W WER8015.215.532012.6712.9756012.0112.261,12011.5011.72
Streaming WER versus chunk size (%)
Selection criteria
Chunk size (ms)FP16 WERQC8W WER
8015.215.5
32012.6712.97
56012.0112.26
1,12011.5011.72

Longer chunks lower error rates but delay the first character. The authors' estimated first-output latency for 560 ms chunks with SME2 enabled is 691 ms for FP16. For QC8W it is 660 ms. They added audio collection time to the median execution time of the model's three processing stages. Measurements used synthetic input and initialized stream states over 3 rounds, with 75 samples per configuration. The estimate assumes the first output is text.

Applying the case study's 800 ms latency budget and 13% WER ceiling together makes 320 and 560 ms configurations candidates. The 80 ms option exceeds the error target, while 1,120 ms exceeds the latency target. The 320 ms option favors fast responses, while 560 ms favors accuracy; at 560 ms, QC8W offers more latency headroom. Use QC8W to save time when accuracy headroom is ample, and FP16 when it is tight. In the case study, FP16 differed from FP32 by less than 0.03 percentage points. QC8W added 0.21~0.31 percentage points of WER over FP32.

Measurement method

For reproduction, keep the Nemotron 3.5 model artifacts identical and retain XNNPACK and KleidiAI, toggling only SME2. Device conditions are those in the first table.

ETDump shows operator times, while Arm Streamline shows native function samples.

The required CMake settings in the ETDump documentation are:

-DEXECUTORCH_BUILD_DEVTOOLS=ON
-DEXECUTORCH_ENABLE_EVENT_TRACER=ON

With ExecuTorch 1.3.1, verify the SME2 build and analyze ETDump data with the Inspector API, while treating these figures as results from one Pixel 11 and one Nemotron 3.5 model.