Skip to content

7 September 2026

Does the exported window matter?

ExecuTorch, 2k to 32k

ExecuTorch fixes a model's context window when the model is exported. This page asks whether that choice changes anything but memory.

Purpose
Decide whether a full sweep of five windows, five models and four chips (about 50 device hours) was worth running, by measuring the same weights exported at 2k, 4k, 8k, 16k and 32k on the same prompts. Five windows of LFM2.5-1.2B ran on the Dimensity 9400; the other model and phone pairs ran the smallest and largest window.
How it was graded
90 prompts per cell: 30 GSM8K (the last number in the reply must equal the reference), 30 IFEval (every instruction in the prompt must be satisfied, checked by the benchmark's own code), 30 BFCL (exactly one call to the right function with the right arguments). Greedy decoding, thinking off, replies capped at 640 tokens (384 for BFCL). The 2.6B was also rerun at a 2048 cap.
How long it ran
ModelDimensity8 EliteTensor G5Exynos
LFM2.5-1.2B63124335
LFM2.5-2.6B, 640 cap12975128117
LFM2.5-2.6B, 2048 cap146130213195
Qwen3-1.7B33195725

Minutes the model spent generating, summed over every run in that cell; 23.7 hours in all. Loading, cooling and Test Lab queueing came on top. Run on 2026-09-07.

Findings

Answers and tool calls
No consistent directional effect found
Two windows agree on 12 to 19 of 90 replies; the same file run twice agrees on 7 to 15. Grades move both ways between windows by about as much as between repeats.
Speed
Paired medians close; Qwen3 32k slower
Same prompt, same turn, Dimensity 9400: LFM2.5 windows within 2.4% of each other. Qwen3 32k was 5.9% slower on prefill and 4.7% on decode than 2k.
Memory
The one thing the window buys, at load
LFM2.5 pays 25 to 33 KB per token of window; Qwen3-1.7B pays 224 KB, so its 32k export needs over 6 GB before the first prompt and 12 GB phones kill it.
Where the window did matter
At 2k, 14 of 60 long replies hit the window
The 2.6B reasons before it answers. At 2k, prompt plus reply reached the window and was cut; at 4k and above only the reply cap cut them. Grades barely moved.
The full sweep
Screen the endpoints before any full sweep
Compute the KV cost, run the smallest and largest window per model and chip, and add middle windows only where those two diverge or fail.

Every chart, one condition at a time

Pick a model or condition; every chart follows.

Memory after load

Resident memory of the test process right after each export loaded, Dimensity 9400, from the fixed-prompt probe. The picked model is drawn solid.

0 GB2 GB4 GB6 GB8 GB2k4k8k16k32kExported context window, tokensSamsung Heimdall threshold seen in the S25 Ultra and S24+ logs, 6 GBLFM2.5 1.2B 1.8 GBLFM2.5 2.6B 2.9 GBQwen3 1.7B 6.2 GB

Speed, paired probe

Each window's throughput as a ratio of the model's smallest window, same 929-token prompt, same turn against same turn, six pairs per file. Dot is the median, bar the range. Dimensity 9400 only.

0.800.901.001.101.202k4k8k16k32kExported context window, tokensThroughput vs smallest windowabove the dashed line is faster than the smallest window; bars are the min to max of six paired turns

PrefillDecode1.00 means no difference

Grades by window

Prompts passed out of 30 on each set, per chip. Points are joined only where neighbouring windows were both measured; the cloud phones have endpoint measurements only and cannot exclude an effect at 8k or 16k. Hollow markers are one same-file repeat on the same phone, an observed run-to-run reference rather than a noise bound.

GSM8K01020302k4k8k16k32kIFEval2k4k8k16k32kBFCL2k4k8k16k32k

Dimensity 9400Snapdragon 8 EliteTensor G5Exynos 2400Second run, same file

Identical replies

How many prompts came back byte-identical to the largest window's reply: the raw token stream, the parsed tool calls (BFCL prompts only) and the shown text. Dashed lines are same-file repeats on the phone of that colour, a reference for observed run-to-run agreement.

Raw token stream0%25%50%75%100%2k4k8k16kParsed tool calls2k4k8k16kWindow compared with the 32k exportShown text2k4k8k16k

Dimensity 9400Snapdragon 8 EliteTensor G5Exynos 2400Same file run twice× fewer prompts than the full set

Notes

  • Two things the matrix found that it was not looking for. Every compiled model this app had ever run was fed no start-of-text token: the ExecuTorch 1.4.0 runtime adds one only when asked and the app never asked. LFM2.5-1.2B shrugs it off; LFM2.5-2.6B scored 0 of 30 on GSM8K on every chip until the engine wrote the token itself, and every 2.6B cell here is from the fixed build. The 1.2B cells remain BOS-less as measured: comparable among themselves, and a description of that deployed configuration. And a phone that has dozed throttles instrumentation two to five times with wild variance, so the local runner now wakes the phone and holds it awake.
  • Two 2.6B conditions. Its own template makes it reason before answering, so under the suite's 640-token cap 16 of 30 GSM8K and 26 of 30 IFEval replies never reached an answer: those rows are cap-censored and kept for their BFCL calls, memory and speed. The rerun at a 2048 cap, GSM8K and IFEval only, is the model's real score: 23 to 28 of 30 and 18 to 21 of 30 on every phone and window, with its same-file repeat moving grades by 2 and its BFCL calls unchanged.
  • Qwen3 32k on 12 GB phones. Samsung's Heimdall memory guard killed the test process on the Galaxy S25 Ultra and S24+ after 7 to 12 prompts ("Trigger Global kill before GC, Usage 8.67 GB, Threshold 6 GB" in the logcats). A rerun on the Poco with logcat attached died the same way after 7: MIUI's ActivityManager force-stopped it for "used too many pss resource, pss used 8.65 GB, threshold 6 GB". Only the 16 GB Pixel 10 Pro XL finished. Those cells are marked incomplete and carry no grade or timing.
  • Not matched conditions. The Dimensity 9400 ran in hand, cooled below 42 C before each probe load. The 8 Elite, Tensor G5 and Exynos 2400 ran racked on Firebase Test Lab, where phones throttle within about 40 seconds, and had no paired probe: their suite timings are per-cell medians over different replies and do not support a speed claim either way.

Every number

The full matrix, as rendered from the graded reports by window_report.py. Prefill ms is the runtime's prefill of the whole prompt, the engine-side part of time to first token. ms/token is decode time over generated tokens; replies differ per cell, so it is not a paired comparison. Capped counts replies that ran to the token cap (640, or 384 for BFCL). RSS is resident memory right after load and at the end of the run.

LFM2.5 1.2B 14 cells, LFM2.5-1.2B-Instruct-8da4wShow

Scrolls sideways; the phone and window column stays put.

Phone and windowFileGSM8KIFEvalBFCLCappedPrefill msms/tokenPrefill tok/sDecode tok/sRan atRSS after load MBRSS at end MB
D9400, 2k796 MB17/3015/3026/3010/9036025.925438.72048not logged1186
D9400, 4k798 MB16/3017/3026/3012/9036326.725337.5409610991218
8 Elite, 4k798 MB13/3018/3028/3011/9037417.722756.4409611041207
Tensor G5, 4k798 MB13/3018/3027/3014/9081764.212915.6409611131225
Exynos 2400, 4k798 MB13/3017/3026/3011/9046034.019529.4409611261213
Exynos 2400 repeat, 4k798 MB15/3021/3027/3010/9051637.518026.7409611261217
D9400, 8k802 MB17/3018/3026/3011/9035326.125938.3819212261333
D9400, 16k810 MB13/3020/3027/3012/9035425.926238.616384not logged993
D9400 repeat, 16k810 MB14/3016/3028/3012/9036826.225938.21638414161528
D9400, 32k827 MB12/3018/3027/3016/9036626.325738.032768not logged1903
D9400 repeat, 32k827 MB12/3015/3027/3012/9039228.823734.83276817981901
8 Elite, 32k827 MB16/3013/3026/3011/9032416.326161.232768not logged1880
Tensor G5, 32k827 MB16/3018/3027/3013/9086279.59812.632768not logged1896
Exynos 2400, 32k827 MB14/3020/3025/3011/9046237.118427.032768not logged1883

Run-to-run control: the same file run twice on the same phone, replies byte-identical.

WindowPhoneIdentical replies
4kExynos 2400raw 7/90, calls 23/30, content 11/90
16kD9400raw 13/90, calls 23/30, content 20/90
32kD9400raw 15/90, calls 25/30, content 18/90

Replies identical to the 32k export, per window: raw stream and shown content over the prompts both runs completed, parsed tool calls over the BFCL prompts among them.

Phone2k4k8k16k
D9400raw 12/90, calls 25/30, content 17/90raw 17/90, calls 26/30, content 18/90raw 18/90, calls 28/30, content 19/90raw 12/90, calls 24/30, content 16/90
D9400 repeat---raw 14/90, calls 25/30, content 17/90
8 Elite-raw 13/90, calls 26/30, content 15/90--
Tensor G5-raw 10/90, calls 24/30, content 14/90--
Exynos 2400-raw 16/90, calls 28/30, content 16/90--
LFM2.5 2.6B, 640 cap 9 cells, LFM2.5-2.6B-8da4wShow

Scrolls sideways; the phone and window column stays put.

Phone and windowFileGSM8KIFEvalBFCLCappedPrefill msms/tokenPrefill tok/sDecode tok/sRan atRSS after load MBRSS at end MB
D9400, 2k1783 MB15/304/3024/3042/9088260.310816.6204819791958
D9400 repeat, 2k1783 MB13/306/3024/3043/9087259.611016.8204819841871
8 Elite, 4k1786 MB13/305/3022/3044/90119755.47218.0409620582194
Tensor G5, 4k1786 MB17/306/3024/3038/90106692.28810.8409620542221
Exynos 2400, 4k1786 MB10/305/3023/3046/90114283.58112.0409621362189
D9400, 32k1815 MB13/305/3024/3045/9088259.710916.83276829372185
8 Elite, 32k1815 MB13/305/3025/3042/90109649.78120.13276829503082
Tensor G5, 32k1815 MB19/304/3025/3037/9096881.110112.33276829623120
Exynos 2400, 32k1815 MB18/303/3025/3039/90108584.58011.83276830323084

Run-to-run control: the same file run twice on the same phone, replies byte-identical.

WindowPhoneIdentical replies
2kD9400raw 0/90, calls 24/30, content 29/90

Replies identical to the 32k export, per window: raw stream and shown content over the prompts both runs completed, parsed tool calls over the BFCL prompts among them.

Phone2k4k
D9400raw 0/90, calls 24/30, content 29/90-
8 Elite-raw 0/90, calls 25/30, content 29/90
Tensor G5-raw 0/90, calls 27/30, content 30/90
Exynos 2400-raw 0/90, calls 25/30, content 30/90
LFM2.5 2.6B, 2048 cap 8 cells, LFM2.5-2.6B-8da4w (cap 2048)Show

Scrolls sideways; the phone and window column stays put.

Phone and windowFileGSM8KIFEvalBFCLCappedPrefill msms/tokenPrefill tok/sDecode tok/sRan atRSS after load MBRSS at end MB
D9400, 2k1783 MB24/3021/30-14/6069362.810515.9204819591783
8 Elite, 4k1786 MB25/3019/30-11/6086651.18219.6409620552139
Tensor G5, 4k1786 MB23/3021/30-13/6077681.910612.2409620552188
Exynos 2400, 4k1786 MB25/3021/30-13/6089387.18411.5409621362187
D9400, 32k1815 MB26/3021/30-10/6062159.511316.83276829222262
8 Elite, 32k1815 MB24/3021/30-15/6098254.58018.43276829502626
Tensor G5, 32k1815 MB28/3018/30-12/60842102.4809.83276829623123
Exynos 2400, 32k1815 MB27/3019/30-10/6092487.88211.43276830283080

Replies identical to the 32k export, per window: raw stream and shown content over the prompts both runs completed, parsed tool calls over the BFCL prompts among them.

Phone2k4k
D9400raw 0/60, calls 0/0, content 0/60-
8 Elite-raw 0/60, calls 0/0, content 0/60
Tensor G5-raw 0/60, calls 0/0, content 0/60
Exynos 2400-raw 0/60, calls 0/0, content 0/60
Qwen3 1.7B 9 cells, Qwen3-1.7B-8da4wShow

Scrolls sideways; the phone and window column stays put.

Phone and windowFileGSM8KIFEvalBFCLCappedPrefill msms/tokenPrefill tok/sDecode tok/sRan atRSS after load MBRSS at end MB
D9400, 2k1285 MB20/3015/3024/308/9053245.117422.2204817581833
D9400 repeat, 2k1285 MB17/3018/3024/307/9053245.717421.9204817661900
8 Elite, 2k1285 MB18/3013/3025/3012/9067341.914123.9204817711887
Tensor G5, 2k1285 MB23/3013/3024/308/9081489.312111.2204817721892
Exynos 2400, 2k1285 MB17/3012/3023/3010/9073465.912515.2204818381886
D9400, 32k1348 MBINCOMPLETE: process ended after 6/90 prompts3276861885426 (last observed)
8 Elite, 32k1348 MBINCOMPLETE: process ended after 12/90 prompts3276861274836 (last observed)
Tensor G5, 32k1348 MB16/3014/3025/308/9084494.013910.63276884998602
Exynos 2400, 32k1348 MBINCOMPLETE: process ended after 7/90 prompts3276863966380 (last observed)

Run-to-run control: the same file run twice on the same phone, replies byte-identical.

WindowPhoneIdentical replies
2kD9400raw 31/90, calls 30/30, content 31/90

Replies identical to the 32k export, per window: raw stream and shown content over the prompts both runs completed, parsed tool calls over the BFCL prompts among them.

Phone2k
D9400raw 0/6, calls 0/0, content 0/6
8 Eliteraw 0/12, calls 0/0, content 0/12
Tensor G5raw 29/90, calls 27/30, content 31/90
Exynos 2400raw 0/7, calls 0/0, content 0/7
Fixed-prompt speed probe Dimensity 9400, 12 files, 929-token prompt, 160-token cap, three turns per load, two interleaved passesShow

Phone cooled below 42 C and awake before each load. The second table pairs each turn with the same turn of the model's smallest window in the same pass.

FileTurnsPrefill tok/s (median, min to max)Decode tok/s (median, min to max)Prefill ms, 929 tokensResident after load MB
LFM2.5-1.2B-Instruct-8da4w-2k6332 (288 to 344)40.2 (33.7 to 41.0)28041050
LFM2.5-1.2B-Instruct-8da4w-4k6340 (330 to 344)40.4 (36.9 to 41.0)27381098
LFM2.5-1.2B-Instruct-8da4w-8k6343 (327 to 345)40.8 (40.0 to 41.2)27121194
LFM2.5-1.2B-Instruct-8da4w-16k6342 (326 to 345)40.5 (39.8 to 41.2)27181386
LFM2.5-1.2B-Instruct-8da4w-32k6343 (329 to 346)40.5 (39.9 to 40.9)27121768
LFM2.5-2.6B-8da4w-2k6149 (142 to 153)19.0 (16.7 to 19.5)62541984
LFM2.5-2.6B-8da4w-4k6148 (135 to 153)18.1 (16.5 to 19.5)62642046
LFM2.5-2.6B-8da4w-8k6149 (140 to 153)18.2 (16.7 to 19.5)62342172
LFM2.5-2.6B-8da4w-16k6149 (138 to 153)18.4 (16.6 to 19.5)62262427
LFM2.5-2.6B-8da4w-32k6149 (139 to 152)18.1 (16.2 to 19.5)62402936
Qwen3-1.7B-8da4w-2k6200 (193 to 206)18.0 (16.1 to 18.2)46801758
Qwen3-1.7B-8da4w-32k6184 (162 to 203)16.6 (15.1 to 17.6)50646153
FilePrefill vs smallest window (median ratio, min to max)Decode vs smallest windowPaired turns
LFM2.5-1.2B-Instruct-8da4w-2k1.000 (1.000 to 1.000)1.000 (1.000 to 1.000)6
LFM2.5-1.2B-Instruct-8da4w-4k1.007 (0.987 to 1.181)0.999 (0.927 to 1.190)6
LFM2.5-1.2B-Instruct-8da4w-8k1.003 (0.995 to 1.198)1.011 (0.995 to 1.187)6
LFM2.5-1.2B-Instruct-8da4w-16k1.008 (0.992 to 1.190)1.009 (0.988 to 1.187)6
LFM2.5-1.2B-Instruct-8da4w-32k1.013 (0.999 to 1.202)1.006 (0.993 to 1.184)6
LFM2.5-2.6B-8da4w-2k1.000 (1.000 to 1.000)1.000 (1.000 to 1.000)6
LFM2.5-2.6B-8da4w-4k0.995 (0.947 to 1.002)0.985 (0.946 to 1.005)6
LFM2.5-2.6B-8da4w-8k0.997 (0.983 to 1.005)0.991 (0.943 to 1.000)6
LFM2.5-2.6B-8da4w-16k1.003 (0.971 to 1.005)0.997 (0.938 to 1.005)6
LFM2.5-2.6B-8da4w-32k0.997 (0.975 to 1.003)0.976 (0.943 to 1.005)6
Qwen3-1.7B-8da4w-2k1.000 (1.000 to 1.000)1.000 (1.000 to 1.000)6
Qwen3-1.7B-8da4w-32k0.941 (0.793 to 0.982)0.953 (0.835 to 1.012)6

How it was run

  • What was run. LFM2.5-1.2B: five windows on the Dimensity 9400, 16k and 32k twice; 4k and 32k on the cloud chips, 4k twice on the Exynos. LFM2.5-2.6B: 2k and 32k on the Dimensity, 2k twice; 4k and 32k on the cloud chips; then GSM8K and IFEval again at a 2048 cap on every one of those cells. Qwen3-1.7B: 2k and 32k everywhere, 2k twice on the Dimensity, 32k twice on the Dimensity to catch the kill. Every file loaded at its own exported window. Exports use ExecuTorch 1.4.0's recipes: 8-bit dynamic activations, 4-bit weights in groups of 32, 8-bit embeddings, fp32 KV cache, prefill chunk 2048.
  • Review. Codex reviewed the method twice, before and after the data: same-file repeats, a paired speed probe separate from the task eval, a three-way identity metric counted over BFCL only, memory after load, a second architecture, incomplete cells shown as such, and conclusions bounded by the observed run variation. All are in what you see here.
  • Where things are. The note: executorch-window-matrix.md. The tables: window-matrix.md. Raw and graded reports: tools/eval/results. The exports, each window a file: LFM2.5-1.2B, LFM2.5-2.6B, Qwen3-1.7B on Hugging Face.

OpenWeightsFive chips, two runtimesWhat the reruns changedSource on GitHub