Skip to content
All research

Over 6 GB

for Qwen3 at 32k, before the first prompt

OpenWeights, 7 September 2026

Does the exported window matter?

Whether the context window fixed at export, from 2k to 32k, changes anything but memory.

What we found

  • Answers: no consistent effect

    Grades moved between windows about as much as between two runs of the same file.

  • Speed: close, except Qwen3 at 32k

    Paired on the Dimensitys, LFM2.5's windows were within 2.4% of each other. Qwen3 at 32k was 5.9% slower to prefill and 4.7% to decode than at 2k.

  • Memory: the one real cost

    Qwen3-1.7B at 32k needs over 6 GB at load, and 12 GB phones kill it.

  • 2k is tight for a model that reasons

    At 2k, 14 of LFM2.5-2.6B's 60 GSM8K and IFEval replies ran into the window. Grades barely moved.

  • Test the two ends first

    Compute the KV cost first, run the smallest and largest window per model and chip, and add the middle ones only where those two differ or fail.

The results

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, Dimensitys, 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. Dimensitys 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

DimensitysSnapdragon 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

DimensitysSnapdragon 8 EliteTensor G5Exynos 2400Same file run twice× fewer prompts than the full set

What else the matrix found

A missing start token
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.
A phone that dozes
It 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, gave it room to answer: 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.

Every number

The full matrix, as rendered from the graded reports by window_report.py.

LFM2.5 1.2B14 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
D9500s, 2k796 MB17/3015/3026/3010/9036025.925438.72048not logged1186
D9500s, 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
D9500s, 8k802 MB17/3018/3026/3011/9035326.125938.3819212261333
D9500s, 16k810 MB13/3020/3027/3012/9035425.926238.616384not logged993
D9500s repeat, 16k810 MB14/3016/3028/3012/9036826.225938.21638414161528
D9500s, 32k827 MB12/3018/3027/3016/9036626.325738.032768not logged1903
D9500s 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
16kD9500sraw 13/90, calls 23/30, content 20/90
32kD9500sraw 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
D9500sraw 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
D9500s 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 cap9 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
D9500s, 2k1783 MB15/304/3024/3042/9088260.310816.6204819791958
D9500s 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
D9500s, 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
2kD9500sraw 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
D9500sraw 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 cap8 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
D9500s, 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
D9500s, 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
D9500sraw 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.7B9 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
D9500s, 2k1285 MB20/3015/3024/308/9053245.117422.2204817581833
D9500s 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
D9500s, 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
2kD9500sraw 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
D9500sraw 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 probeDimensitys, 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

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.

How we ran it

Why
To decide whether a full sweep of five windows, five models and four chips (about 50 device hours) was worth running. Five windows of LFM2.5-1.2B ran on the Dimensitys; the other model and phone pairs ran the smallest and largest window.
The size of it
The same weights exported at 2k to 32k. 3 models, 4 phones, 23.7 hours.
Grading
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.
Memory per token
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.
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.
What was run, cell by cellWindows and repeats per model, the export recipe, and how long each tookShow
LFM2.5-1.2B
Five windows on the Dimensitys, 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.
Exports
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.

How long it ran

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.

ModelDimensity8 EliteTensor G5Exynos
LFM2.5-1.2B63124335
LFM2.5-2.6B, 640 cap12975128117
LFM2.5-2.6B, 2048 cap146130213195
Qwen3-1.7B33195725

Limits

Not matched conditions
The Dimensitys 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.
Follow-up
The reruns checked every cell of this matrix the same day.

Sources

The LFM2.5-1.2B and LFM2.5-2.6B exports were also published on Hugging Face, each window a file.

Keep reading

All research
  • About 4×

    the median IFEval gain from raising the reply cap to 2048 tokens: 18 to 21 of 30, up from 3 to 6

    OpenWeights, 7 September 2026

    A 640-token reply cap was cutting off the LFM2.5 2.6B

    The model reasons before it answers, so a 640-token cap cut it off. Raising only the cap lifted its scores on every phone. The same day's reruns also tested repeats of one file and a run that had died.

  • 18 of 25

    model and chip pairs reached the first token sooner on ExecuTorch

    OpenWeights, 3 and 4 September 2026

    Five chips, two runtimes

    How fast five small models answer on five phone chips, in llama.cpp and in ExecuTorch.

  • 9 of 9

    models were fastest with NPU prefill

    OpenWeights, 2 to 4 November 2026

    Prefill and decode on CPU, GPU and NPU

    Which processor should prefill and which should decode: nine models, every pairing, on a Snapdragon 8 Elite Gen 5.