holistechlabsllama.cpp ↔ halogen
DEEN

Messung · 8. September 2026 · ein Durchgang je Engine

Qwen3.8-Flash-Next auf dem HP ZBook Ultra G1a

llama.cpp (rocmfpx-Fork) gegen halogen-flash-server 0.4.4

Autoren

Dipl.-Ing. Sören GebbertInstitut für holistische Technologieforschung GmbH Claude Code Opus 5Anthropic

Maschine

HP ZBook Ultra G1a

SoC
Ryzen AI Max+ PRO 395
GPU
Radeon 8060S, gfx1151, 70 W Budget
Speicher
128 GiB LPDDR5X-8000, verlötet – als Unified Memory von CPU und GPU geteilt
System
Ubuntu 24.04, 140-W-Netzteil, platform_profile=performance

Modell – in beiden Läufen dasselbe

Qwen3.8-Flash-Next

Größe
rund 180B – gemessen 176,9 Mrd. Parameter
Bauart
„512×56B“, 48 Blöcke, 512 Experten, davon 10 je Token aktiv
Kontext
bis 262.144 Token, Vokabular 248.320
Aufgaben
20: 12 × AIME 2024/2025, 4 × Code, 4 × Kontext (~69.000 Token)

Engine A

llama.cpp · rocmfpx-Fork

Stand
Commit e302744, Vulkan/RADV
Gewichte
Q4_0_ROCMFP4_STRIX_LEAN (GGUF), 4,5 bpw
Aufruf
-c 262144 -fa on -ngl 999 -np 1 --cache-ram 0
Budget
65.536 Token

Engine B

halogen-flash-server 0.4.4

Stand
Image halogen-flash-server:0.4.4, Podman
Gewichte
w4b.hgn + Qualitäts-Overlay, 5,53 bpw
Aufruf
HALOGEN_CTX=134400, 4 Slots, HALOGEN_PROMPT_CACHE=0
Budget
49.152 Token (zugleich Prefill-Arena)

halogen auf dieser Maschine

886Token/s

Prompt-Verarbeitung bei 69.000 Token Kontext

39,9Token/s

Ausgabe im langen Kontext dieselben 69.000 Token im Vorlauf

39,3Token/s

Ausgabe im Chat kurze Fragen, unter 800 Token Prompt

157Minuten

für alle zwanzig Aufgaben 339.134 Token erzeugt

Mittelwerte über die Aufgaben der jeweiligen Gruppe, gemessen an den Antworten des Laufs selbst – nicht an Füllsätzen. Temperatur 0, Prompt-Cache aus, 70 W GPU-Budget.

01 · Setup und Speicher

Warum ein 180B-Modell auf einem Notebook überhaupt läuft

Ein Modell mit 176,9 Milliarden Parametern auf einem Gerät mit 128 GiB Arbeitsspeicher (125,1 GiB davon nutzbar), dessen dedizierter Grafikspeicher 0,5 GiB beträgt – das geht nur, weil drei Dinge zusammenkommen: die Bauart des Modells, die Speicherarchitektur der Plattform und das, was die Engine daraus macht.

1 · Das Modell

Dünn besetzt statt dicht

gesamt
176,9 Mrd. Parameter, 48 Blöcke
aktiv
10 von 512 Experten je Token
Folge
Gerechnet wird je Token ein Bruchteil des Modells – gespeichert werden muss es trotzdem ganz

2 · Die Plattform

Ein Speicher für beide

VRAM
nur 0,5 GiB dediziert
GTT
110 GiB des Arbeitsspeichers für die GPU freigegeben (amdgpu.gttsize)
Folge
Die GPU rechnet auf demselben LPDDR5X wie die CPU – kein PCIe-Umweg, keine Kopie

3 · Die Engine

Was halogen daraus macht

laden
124,1 GB Checkpoint eingeblendet, davon 65,64 GiB festgepinnt – in 3,6 s bei 19,4 GB/s
KV
ein Pool über 134.400 Positionen = 3,7 GiB, rund 28 KiB je Position
bereit
nach 15,1 s, 81,1 GiB Arbeitsspeicher blieben frei

Warum der Speicher die erste Frage ist

Bei einem Modell dieser Größe entscheidet der Speicher vor allem anderen. Er ist die harte Grenze: Was nicht hineinpasst, läuft nicht. Und was gerade eben hineinpasst, belegt das Gerät für die Dauer der Rechnung so weit, dass daneben nichts anderes mehr Platz hat – auf einem Notebook, das zugleich Arbeitsgerät ist, ist das der Unterschied zwischen brauchbar und blockiert.

Deshalb stehen hier zwei Angaben nebeneinander: wie viel Speicher im Betrieb gebunden war und auf welche Weise er gehalten wurde. Beides fällt bei diesen beiden Engines auseinander, und die zweite Angabe entscheidet darüber, wie die erste zu lesen ist.

Was der Betrieb an Speicher bindet

Ein Sensor erfasste während beider Läufe alle zwei Sekunden den Speicherstand. Zwei Begriffe aus der folgenden Tabelle sind dabei erklärungsbedürftig.

GTT steht für Graphics Translation Table und bezeichnet den Teil des Arbeitsspeichers, den der Grafiktreiber der GPU zugänglich macht: Seiten des Systemspeichers werden in den Adressraum der GPU eingeblendet, sodass dort ohne Umkopieren in dedizierten Grafikspeicher gelesen und gerechnet werden kann. Auf dieser Plattform ist das der Regelfall, nicht die Ausnahme – dediziert stehen nur 0,5 GiB zur Verfügung, die Obergrenze für die GTT setzt der Kernelparameter amdgpu.gttsize, hier 110 GiB. Was die Tabelle als GTT ausweist, ist also kein zusätzlicher Speicher, sondern der Anteil desselben Arbeitsspeichers, der zum Messzeitpunkt der GPU zugeteilt war.

MemAvailable ist die Schätzung des Kernels, wie viel Speicher einer neuen Anwendung noch zur Verfügung stünde – einschließlich dessen, was er dafür freiräumen könnte. Die Zeile „frei geblieben“ nennt den Tiefstand dieses Werts über den Lauf, also das, was dem übrigen System im ungünstigsten Moment blieb.

Speicher llama.cpp halogen
Auf der Platte 98,48 GiB
3 GGUF-Shards
115,58 GiB
+ 2,31 GiB Overlay
GTT-Spitze im Lauf 78,7 GiB 52,7 GiB
GTT im Mittel 77,5 GiB 41,0 GiB
vom System als vergeben geführt 88,4 GiB 56,6 GiB
frei geblieben, Tiefstand 36,7 GiB 68,5 GiB

5.065 Messpunkte über den vollständigen halogen-Lauf. Für llama.cpp liegen 5.854 Punkte vor, die allerdings nur die letzten drei Aufgaben abdecken: Dieser Lauf wurde in zwei Sitzungen gefahren, und der Sensor lief in der zweiten. Es sind die drei Kontextaufgaben – der speicherintensivste Teil des Satzes.

Speicher im Verlauf der Läufe Alle zwei Sekunden gemessen. Fläche: vom System als vergeben geführt. Linie: davon der GPU zugeteilt (GTT). HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 0 25 50 75 100 125 Speicher in GiB 0 30 60 90 120 150 llama.cpp vergeben GTT Minuten seit Beginn des Mitschnitts Der Mitschnitt deckt nur die letzten drei Aufgaben ab - die drei Kontextaufgaben, also den speicherintensivsten Teil des Satzes. 0 30 60 90 120 150 halogen vergeben GTT Minuten seit Beginn des Mitschnitts Vollständiger Lauf, vom Start der Engine bis zur letzten Aufgabe. Arbeitsspeicher gesamt: 125,1 GiB
Der Verlauf über die gesamte Messung. Die Fläche ist der vom System als vergeben geführte Speicher, die graue Linie der davon der GPU zugeteilte Anteil. Beide Felder tragen dieselbe Skala.

Zwei Wege, dieselben Gewichte zu halten

Die unteren beiden Zeilen laden dazu ein, sie als Bedarfsangabe zu lesen. Das wären sie nur, wenn beide Engines den Speicher auf dieselbe Weise beanspruchten. Sie tun es nicht:

  • llama.cpp legt die Gewichte mit -ngl 999 als GTT-Allokationen an – Gerätespeicher, der aus demselben Arbeitsspeicher stammt. Solche Seiten sind nicht rückholbar; sie senken MemAvailable in voller Höhe.
  • halogen blendet den Checkpoint ein (mapped 124,1 GB). Dessen Seiten sind sauber und dateigestützt. Der Kernel führt sie als verfügbar, weil er sie jederzeit verwerfen und bei Bedarf erneut von der Platte lesen kann.

Im Protokoll der Engine ist das direkt ablesbar: Auf pinned 65,64 GiB folgt wenige Zeilen später host memory left for everything else: 81,1 GiB. Die gepinnten Seiten erscheinen im belegten Speicher also nicht.

Die Tabelle weist damit aus, wie viel Speicher das System als vergeben führt. Das ist die betriebsrelevante Größe – von ihr hängt ab, ob neben dem Modell noch gearbeitet werden kann. Eine Bedarfsangabe im Sinne von „so viel Speicher benötigt die Engine“ ist sie nicht, und ein Vergleich der beiden Spalten misst zu einem Teil die Buchführung des Kernels statt den Bedarf der Engine.

Die Rolle der SSD

Von 115,6 GiB Mapping sind 65,64 GiB festgepinnt; der Rest bleibt als Dateiseiten liegen und kann verdrängt werden. Damit wird die Platte Teil des Speicherpfades: Sie trägt den Kaltstart und fängt auf, was unter Speicherdruck ausgelagert wird. Erst diese Rückfallebene lässt einen Checkpoint dieser Größe auf einem Gerät mit 128 GiB überhaupt zu – und macht die Wahl einer schnellen SSD zu einer Entscheidung über die Startzeit, nicht nur über den Plattenplatz.

Wie groß dieser Unterschied ausfällt, zeigt der Startvorgang selbst. Liegt der Checkpoint noch im Page-Cache, sind die 65,64 GiB in 3,6 Sekunden fixiert – 19,4 GB/s, also gar kein Plattenzugriff. Liegt er nicht dort, liest die Engine ihn tatsächlich vom Laufwerk: 2,1 GB/s, aus 3,6 werden 33,2 Sekunden. Beide Werte stammen von derselben Maschine und demselben Checkpoint; verschieden ist nur der Weg, den die Daten nehmen.

Wie viel im Verlauf der Läufe nachgeladen wurde, weist diese Messung nicht aus: Der Sensor erfasste GPU-Leistung, Takt, Temperatur, GTT und MemAvailable, jedoch keine I/O-Zähler. Eine belastbare Aussage darüber verlangt einen eigenen Lauf mit Blockstatistik.

Die eigentliche Grenze ist das Generierungsbudget

Die Messung lief mit einem Kontextfenster von 134.400 Positionen; das Modell beherrscht 262.144. Auch dieses volle Fenster ist auf dem Gerät fahrbar. Der KV-Speicher kostet rund 28 KiB je Position – die gefahrenen Positionen belegen 3,7 GiB, die vollen 262.144 entsprechend 7,2 GiB. Mit einem Pool dieser Größe und demselben Generierungsbudget von 49.152 Token ist die Engine auf der ansonsten unbelasteten Maschine nach 18,9 Sekunden bereit und beantwortet den längsten Prompt des Aufgabensatzes, 68.801 Token, mit 1.005 Token/s Prompt-Verarbeitung; 76,3 GiB Arbeitsspeicher bleiben frei.

Begrenzend wirkt eine andere Größe: HALOGEN_MAX_TOK bestimmt nicht nur, wie lang eine Antwort werden darf, sondern bemisst zugleich die Prefill-Arena.

HALOGEN_MAX_TOK Prefill-Arena freie 2-MiB-Blöcke danach Prefill von 60 Token
32.768 16,7 GiB
49.152 gefahren ~25 GiB 2.152 (4,3 GiB) 2,3 s
65.536 33,4 GiB 184 (368 MiB)127 s

Der Engpass ist dabei nicht die Menge des Speichers, sondern seine Form. Die Engine braucht große zusammenhängende Blöcke; sind nur noch kleine vorhanden, verbringt sie den Start mit Kompaktierung. Bei 65.536 Token Budget bleiben nach dem Start 184 zusammenhängende 2-MiB-Blöcke bei 637 Kompaktierungsläufen allein für die Pool-Reservierung, und ein Prefill von 60 Token dauert dann 127 Sekunden statt 2,3. Der große KV-Pool wirkt in dieselbe Richtung, wenn auch schwächer: Mit 262.144 Positionen verbleiben 275 Blöcke bei 285 Kompaktierungsläufen.

Für die Messung fiel die Wahl deshalb auf 134.400 Positionen: Dieses Fenster deckt den längsten Prompt des Satzes samt vollem Budget ab und lässt der Arena den meisten zusammenhängenden Speicher. Wer den vollen Kontext braucht, bekommt ihn – und bezahlt ihn mit einem knapperen Start.

Einordnung

Der Prefill in Stücken von 32.768 Token, das Pinning und der gemeinsame KV-Pool sind Eigenschaften dieser Engine-Fassung, nicht des Modells. Die Gewichte der beiden Läufe sind nicht dieselben (4,5 gegen 5,53 bpw): halogens Checkpoint ist der genauere und der größere. Und llama.cpp lief mit n_ctx 262.144 gegen halogens 134.400 – ohne Wirkung auf die Ergebnisse, da keine Anfrage darüber hinausgeht, aber ein Teil des Speicherunterschieds geht darauf zurück. Die vollständige Einordnung steht in Kapitel 11.

02 · Und im Vergleich

Dieselbe Maschine, dieselben Aufgaben, die andere Engine

Trefferquote
17 : 18 von 20
McNemar exakt p = 1,000 – kein messbarer Unterschied in der Fähigkeit.
Prompt-Verarbeitung
7,1 ×
126 gegen 886 Token/s bei 69.000 Token Prompt.
Dauer des Laufs
486 157 min
Dieselben zwanzig Aufgaben, hintereinander, ohne Fremdlast.
Wiederholbarkeit
0/18 : 9/9
Byteweise identische Antwortpaare auf dieselbe Frage bei Temperatur 0.

Was darunter folgt, ist diese Messung in neun Kapiteln: was gefragt wurde, was beide gelöst haben, wo die Zeit hingeht, wie sie an die Aufgaben herangehen – und was die Arbeit nicht zeigt.

03 · Was gemessen wurde

Zwanzig Aufgaben, drei Sorten, zwei Stapel

Zwölf Aufgaben aus den AIME-Wettbewerben 2024 und 2025 – ganzzahlige Lösung, maschinell prüfbar. Vier eigene Codeaufgaben, deren Antwort im rootlosen Sandkasten ohne Netz gegen Testfälle ausgeführt wird. Und vier eigene Kontextaufgaben über eine Messreihe von rund 69.000 Token, die der Prompt vollständig enthält.

Die eigenen Aufgaben sind die kontaminationsfreie Gegenprobe zu den öffentlichen AIME-Sätzen: Sie standen nirgends im Netz, als das Modell trainiert wurde. Beide Engines bekamen exakt dieselben Prompts in derselben Reihenfolge, Temperatur 0, Prompt-Cache aus, am 140-W-Netzteil im Leistungsprofil. Während eines Laufs lief nichts anderes auf der Maschine; der Runner bricht ab, wenn er einen Fremdprozess oder ein anderes Energieprofil vorfindet.

Die 20 Aufgaben Woher sie stammen, worum es geht, wie lang der Prompt war und wer sie gelöst hat. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen Zahl = Prompt-Token · gefüllt = gelöst, offen = nicht gelöst AIME 2024 öffentlicher Wettbewerb aime2024-1 Logarithmensystem, drei Unbekannte 287 aime2024-2 Schnittpunkte verschachtelter Beträge 219 aime2024-3 Komplexe Zahlen, größter Realteil 186 aime2024-4 Zahlentheorie: kleinstes p mit p² | n⁴+1 203 aime2024-5 Zweistellige Zahlen zur Basis b 261 aime2024-6 Kreisgeometrie, Tangenten, Potenzsatz 492 AIME 2025 öffentlicher Wettbewerb aime2025-1 Teilbarkeit im Stellenwertsystem zur Basis b 169 aime2025-2 Gleichschenkliges Trapez mit Inkreis 222 aime2025-3 Sägezahnfunktion schneidet Parabel 335 aime2025-4 Sechs Punkte auf einer Geraden 237 aime2025-5 Zwei Kreise, innere Berührung, Rechteck 934 aime2025-6 Reguläres 24-Eck, Matchings gleicher Länge 194 Eigene Codeaufgaben im Sandkasten gegen Testfälle geprüft c1 Damerau-Levenshtein-Distanz, unbeschränkt 222 c3 Maximaler Fluss im gerichteten Netzwerk 211 c4 Lexikographisch kleinste Topo-Sortierung 201 c6 Teilmengen mit Zielsumme, auch negative 188 Eigene Kontextaufgaben Protokoll aus 1.400 Messzeilen k1 Schneehöhen am Ostgrat unter 0 °C 68.824 k2 Höchste Windspitze bei Schnee über 300 cm 68.832 k3 Messpunkte mit drei Bedingungen 68.845 k4 Zwei Differenzen aus zwei Messzeilen 68.851 Beide AIME-Sätze sind öffentlich und stehen wahrscheinlich in den Trainingsdaten. Für den Vergleich zweier Quantisierungen desselben Modells ist das tragbar — beide haben dieselbe Erinnerung. Die acht eigenen Aufgaben sind die kontaminationsfreie Gegenprobe.
Der Aufgabensatz. Sechs AIME 2024, sechs AIME 2025, vier Codeaufgaben, vier Kontextaufgaben. Die Zahl an jeder Aufgabe ist die Länge ihres Prompts in Token – die vier Kontextaufgaben sind die einzigen, die den langen Weg gehen.
AufgabeThema Herkunft Prompt-Token llama.cppSekunden halogenSekunden
c1Damerau-Levenshtein-Distanz, unbeschränktCode222gelöst2.289gelöst1.108
c3Maximaler Fluss im gerichteten NetzwerkCode211gelöst1.230gelöst631
c4Lexikographisch kleinste Topo-SortierungCode201gelöst70gelöst37
c6Teilmengen mit Zielsumme, auch negativeCode188gelöst2.812gelöst962
k1Schneehöhen am Ostgrat unter 0 °CKontext68.824falsch1.832gelöst893
k2Höchste Windspitze bei Schnee über 300 cmKontext68.832gelöst2.284gelöst495
k3Messpunkte mit drei BedingungenKontext68.845Budget erschöpft6.394gelöst822
k4Zwei Differenzen aus zwei MesszeilenKontext68.851gelöst582gelöst84
aime2024-1Logarithmensystem, drei UnbekannteAIME2024287gelöst76gelöst37
aime2024-2Schnittpunkte verschachtelter BeträgeAIME2024219Budget erschöpft4.905Budget erschöpft1.302
aime2024-3Komplexe Zahlen, größter RealteilAIME2024186gelöst69gelöst30
aime2024-4Zahlentheorie: kleinstes p mit p² | n⁴+1AIME2024203gelöst897gelöst301
aime2024-5Zweistellige Zahlen zur Basis bAIME2024261gelöst310gelöst339
aime2024-6Kreisgeometrie, Tangenten, PotenzsatzAIME2024492gelöst2.717gelöst976
aime2025-1Teilbarkeit im Stellenwertsystem zur Basis bAIME2025169gelöst35gelöst22
aime2025-2Gleichschenkliges Trapez mit InkreisAIME2025222gelöst65gelöst57
aime2025-3Sägezahnfunktion schneidet ParabelAIME2025335gelöst913Schleife763
aime2025-4Sechs Punkte auf einer GeradenAIME2025237gelöst68gelöst49
aime2025-5Zwei Kreise, innere Berührung, RechteckAIME2025934gelöst367gelöst257
aime2025-6Reguläres 24-Eck, Matchings gleicher LängeAIME2025194gelöst1.232gelöst267

Spaltenkopf anklicken zum Sortieren

Ein Unterschied im Aufbau ist erwähnenswert, weil er sonst wie ein Vorteil aussähe: llama.cpp lief mit einem Token-Budget von 65.536, halogen mit 49.152 – bei halogen ist dieser Wert zugleich die Prefill-Arena und hätte bei 65.536 rund 33 GiB belegt. Ausgewertet wird deshalb auf dem gemeinsamen Budget 49.152. Die Umrechnung nimmt llama.cpp eine gelöste Aufgabe und gibt keiner Engine etwas dazu.

04 · Fähigkeit

In der Fähigkeit trennt sie nichts

17 gegen 18 gelöste Aufgaben von zwanzig. Gepaart ausgewertet: McNemar exakt, p = 1,000. Bei zwanzig Aufgaben und 3 unterschiedlich beantworteten ist ein realer Unterschied dieser Größe vom Zufall nicht zu trennen.

Wer eine der beiden Engines wählt, weil sie bessere Antworten gebe, wählt auf einer Grundlage, die diese Messung nicht hergibt. Das ist keine Schwäche des Vergleichs, sondern sein wichtigstes Ergebnis: Es räumt die Fähigkeitsfrage ab und macht den Weg frei für die Frage, die tatsächlich Unterschiede zeigt.

Gleiche Trefferquote, ein Drittel der Zeit Links: gelöste Aufgaben von 20, gepaart ausgewertet. Rechts: was eine gelöste Aufgabe an Zeit gekostet hat. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen Gelöste Aufgaben llama.cpp 17 / 20 halogen 18 / 20 McNemar exakt: p = 1,000 Der Unterschied ist vom Zufall nicht zu trennen. 19 von 20 Aufgaben: derselbe Lösungsweg Blind beurteilt, beide Wege vollständig gelesen. Sekunden je gelöster Aufgabe llama.cpp 1.714 s 17 gelöste Aufgaben in 486 Minuten halogen 524 s 18 gelöste Aufgaben in 157 Minuten 3,3× mehr Zeit je Ergebnis bei gleicher Trefferquote.
Gleiche Trefferquote, ungleiche Rechnung. Links, was gelöst wurde; rechts, was es gekostet hat. Die linke Hälfte ist der Grund, warum die rechte überhaupt interessant ist.

05 · Prompt-Verarbeitung

Der Vorsprung wächst mit der Länge des Prompts

Bei kurzen Fragen liest llama.cpp den Prompt mit 99, halogen mit 129 Token/s ein – spürbar, aber nicht dramatisch. Bei den vier Kontextaufgaben mit knapp 69.000 Token stehen 126 gegen 886 Token/s: Faktor 7,1 zugunsten von halogen.

Prompt-Verarbeitung, in Balken Links das Tempo, rechts was davon ankommt: die Wartezeit, bis das erste Token erscheint. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen Eingelesene Token je Sekunde kurze Fragen, unter 800 Token 99 t/s 129 t/s langer Kontext, 69.000 Token 126 t/s 886 t/s Wartezeit auf das erste Token bei 69.000 Token Prompt, Mittel aus k1 bis k4 llama.cpp 9:08 min halogen 1:18 min Aus neun Minuten Warten wird gut eine Minute. Je Aufgabe, bei vier Aufgaben dieses Zuschnitts.
Kurz gegen lang. Dieselbe Größe, zweimal gemessen: an kurzen Fragen und an den Kontextaufgaben. llama.cpp bleibt, wo es ist; halogen zieht genau dort davon, wo der Prompt teuer wird.

Der Grund, warum das wichtig ist, steht nicht in der Zahl, sondern in der Arbeitsweise: Ein langer Prompt ist der Normalfall, sobald ein Modell eine Datei, ein Protokoll oder einen Verlauf lesen soll. Genau dort verlangt llama.cpp gut sieben Minuten für das, wofür halogen eine braucht – bevor das erste Zeichen der Antwort erscheint.

Prompt-Verarbeitung: 7× schneller, wo es weh tut Eingelesene Token je Sekunde über der Länge des Prompts. Gleiche 20 Aufgaben, gleiche Maschine, Cache aus. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen 0 200 400 600 800 1.000 200 500 1k 2k 5k 10k 20k 50k 100k Token je Sekunde Länge des Prompts in Token (logarithmisch) keine Messpunkte in diesem Bereich 886 t/s 126 t/s 7,1× bei 69.000 Token Prompt kurze Fragen: 1,1× bis 1,9×
Dieselbe Messung als Kurve. Jeder Punkt ist eine Aufgabe des Laufs, die Achse logarithmisch. Der Abstand zwischen den beiden Linien ist der Vorsprung – und er öffnet sich nach rechts.

06 · Ausgabetempo

Der eine bricht im langen Kontext ein, der andere nicht

Bei kurzen Fragen erzeugt llama.cpp 21,1, halogen 39,3 Token/s – gut 1,9 × so schnell. Mit 69.000 Token Vorlauf fällt llama.cpp auf 9,7 Token/s – etwa die Hälfte seines eigenen Tempos. halogen bleibt bei 39,9.

Ausgabetempo: 40 Token/s gegen 10 im langen Kontext Erzeugte Token je Sekunde. Bei 69.000 Token Vorlauf verliert llama.cpp die Hälfte seines Tempos, halogen nichts. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen kurze Fragen unter 800 Prompt-Token 21,1 t/s 39,3 t/s langer Kontext 69.000 Prompt-Token 9,7 t/s 39,9 t/s alle 20 Aufgaben Durchschnitt des ganzen Laufs 18,8 t/s 38,7 t/s Mittelwerte über die Aufgaben der jeweiligen Gruppe, gemessen an den Antworten des Laufs selbst — nicht an Füllsätzen.
Was der Kontext kostet. Nicht der Abstand zwischen den Farben ist das Bemerkenswerte, sondern das Gefälle innerhalb der blauen: llama.cpp verliert die Hälfte, halogen nichts.

Beides zusammen – langsamer eingelesen und danach langsamer geschrieben – ist der Grund, warum sich die Laufzeiten am Ende nicht um Prozente, sondern um einen Faktor unterscheiden.

07 · Warum das zählt

Der Unterschied ist Durchsatz, nicht Geschwätzigkeit

Ein schnellerer Lauf könnte auch schlicht ein kürzerer sein. Ist er nicht: llama.cpp erzeugte über die zwanzig Aufgaben 362.635 Token, halogen 339.134 – halogen also sogar 6,5 % weniger.

Beide denken damit ähnlich lang über dieselben Aufgaben nach. Der Zeitunterschied entsteht nicht daraus, dass einer sich kürzer fasst, sondern daraus, wie schnell dieselbe Menge Text durch die Maschine geht.

Gleich viel gedacht, ein Drittel der Zeit gebraucht Beide Engines erzeugen fast dieselbe Menge Text. Der Zeitunterschied ist Durchsatz, nicht Geschwätzigkeit. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen Erzeugte Token alle 20 Aufgaben zusammen 362.635 339.134 Laufzeit insgesamt vom Start bis zur letzten Antwort 486 min 157 min Token je Sekunde über den ganzen Lauf, Wartezeit eingerechnet 12,4 t/s 36,0 t/s 0,94× so viel Text, aber in 0,32× der Zeit — der Unterschied liegt im Durchsatz, nicht im Umfang der Antworten.
Fast dieselbe Menge Text. Wären die Balken deutlich verschieden, wäre die Zeitersparnis zum Teil nur Wortkargheit. Sie sind es nicht.

08 · Zusammengeführt

Sekunden je gelöster Aufgabe

Trefferquote und Tempo in eine Zahl gebracht: 1.714 gegen 524 Sekunden je gelöster Aufgabe. Faktor 3,3 – bei gleicher Trefferquote. Über den ganzen Lauf: 486 gegen 157 Minuten.

Jede einzelne Aufgabe, jede einzelne Wartezeit Sekunden vom Absenden bis zur fertigen Antwort, logarithmisch. Offener Kreis: Aufgabe nicht gelöst. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen 30 s 1 min 2 min 5 min 10 min 20 min 50 min 100 min k3 aime2024-2 c6 aime2024-6 c1 k2 k1 aime2025-6 c3 aime2025-3 aime2024-4 k4 aime2025-5 aime2024-5 aime2024-1 c4 aime2024-3 aime2025-4 aime2025-2 aime2025-1 halogen war bei 19 von 20 Aufgaben schneller. Einzige Ausnahme: aime2024-5.
Jede Aufgabe einzeln. Kein Mittelwert versteckt hier einen Ausreißer: Der Vorsprung liegt nicht an wenigen Aufgaben, sondern zieht sich durch den ganzen Satz.

09 · Die blinde Gegenprobe

Sie lösen die Aufgaben nicht nur gleich oft, sondern gleich

Ein Prüfer, der nicht wusste, welche Engine welchen Text erzeugt hatte, bekam zu jeder der zwanzig Aufgaben beide vollständigen Lösungswege vorgelegt. Ergebnis: in 19 von 20 Fällen derselbe Ansatz – dieselbe Substitution, derselbe Satz, derselbe Algorithmus.

Auch das Prüfverhalten unterscheidet sich nicht: Wer nachrechnet, wer eine Probe macht, wer in eine Sackgasse läuft und wie er wieder herausfindet, verteilt sich über beide Stapel gleich. Das stützt den Befund aus Kapitel 04 von einer anderen Seite – nicht über die Trefferquote, sondern über den Weg dorthin.

Nicht nur gleich oft gelöst — gleich gelöst Ein blinder Prüfer las zu jeder Aufgabe beide vollständigen Lösungswege, zufällig vertauscht, ohne Projektkontext. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen 19 von 20 Aufgaben: derselbe Ansatz Gleiche Substitution, gleicher Satz, gleicher Algorithmus. aime2024-1 aime2024-2 aime2024-3 aime2024-4 aime2024-5 aime2024-6 aime2025-1 aime2025-2 aime2025-3 aime2025-4 aime2025-5 aime2025-6 c1 c3 c4 c6 k1 k2 k3 k4 Einzige Abweichung: aime2025-4 — Koordinaten gegen Streckenalgebra, beide Wege richtig. Wo es schiefging Nie das Verständnis der Aufgabe, nie ein Rechenfehler. llama.cpp: 1× Methode, 1× fehlende Ausdauer halogen: 2× fehlende Ausdauer Wie geprüft wurde an Beispielen durchgerechnet 7 6 zweiter, anderer Weg 6 6 dieselbe Rechnung nochmal 4 3 Gegenprobe 2 2 gar nicht 1 3 Umgang mit Sackgassen keine Sackgasse 14 12 abgebrochen, neu angesetzt 3 2 weitergerechnet 1 3 im Kreis 2 3 Gleiche Wege, gleicher Prüfaufwand — und dabei 3,3× schneller je gelöster Aufgabe.
Was der blinde Prüfer sah. Gleicher Ansatz, gleiches Prüfverhalten, gleicher Umgang mit Sackgassen. Der Prüfer lief in einem leeren Arbeitsverzeichnis ohne Projektkontext und kannte die Zuordnung nicht.

10 · Der ungeplante Befund

Dieselbe Frage, dieselbe Antwort – oder eben nicht

Bei Temperatur 0 sollte dieselbe Anfrage dieselbe Antwort ergeben. llama.cpp tut das in keinem einzigen Fall: 0 von 18 Antwortpaaren über 18 Durchgänge in zwei Konfigurationen waren byteweise identisch. halogen in allen: 9 von 9, über Neustarts der Engine hinweg.

Bei einer Aufgabe lagen die Antworten auf dieselbe Frage zwischen 1.165 und 36.455 Token. Der naheliegende Verdächtige – llama.cpps Übernahme des Slot-Zustands zwischen Anfragen – wurde durch einen zweiten Durchlauf mit cache_prompt: false ausgeschlossen. Gleich war nur die erste Anfrage nach einem Serverstart, und die über zwei unabhängige Starts hinweg byteweise: Die Streuung sitzt im Zustand zwischen den Anfragen, nicht im Sampling.

Dieselbe Frage, dreimal gestellt Sekunden je Durchgang, identische Anfrage bei Temperatur 0, Cache aus. HP ZBook Ultra G1a · Ryzen AI Max+ PRO 395 · Qwen3.8-Flash-Next llama.cpp: rocmfpx-Fork, Vulkan · halogen: halogen-flash-server 0.4.4 · Temperatur 0, Prompt-Cache aus · gemessen am 8.9.2026 llama.cpp halogen 0 200 400 600 800 1.000 1.200 Sekunden je Durchgang aime2024-1 102 68 58 2.559 / 1.866 / 1.625 Token 38 40 40 3 × 1.609 Token · identisch c4 98 42 52 2.502 / 1.165 / 1.436 Token 36 38 38 3 × 1.365 Token · identisch aime2024-4 788 1.143 680 14.315 / 19.640 / 12.532 Token 301 324 322 3 × 12.076 Token · identisch Cache aus, cache_prompt: false, gleicher Server, gleiche Parameter. Die Endantwort war in allen 18 Durchgängen richtig — nur der Weg dorthin nicht.
Drei Läufe je Aufgabe, byteweise verglichen. Die Endantworten waren jedes Mal richtig. Nicht reproduzierbar ist der Weg und sein Preis – nicht das Ergebnis.

Für die Praxis heißt das zweierlei. Erstens: Wer eine Antwort belegen oder eine Regression eingrenzen will, braucht die Wiederholbarkeit – und bekommt sie hier nur von einer der beiden Seiten. Zweitens, und unbequemer: Die llama.cpp-Zeiten in dieser Messung sind eine Stichprobe, keine Konstante. Sie sind mit einer breiten, hier nicht bezifferten Streuung zu lesen.

11 · Was diese Arbeit nicht zeigt

Vier Einschränkungen, die man mitlesen muss

Der wichtigste Vorbehalt

Es sind nicht dieselben Gewichte. llama.cpp lief mit 4,5 bpw (Q4_0_ROCMFP4_STRIX_LEAN, GGUF), halogen mit 5,53 bpw (.hgn w4b plus Qualitäts-Overlay: 12 Tensoren in q8g64, 2,31 GiB). Verglichen wurde der Stapel aus Engine und Quantisierung, nicht die Engine allein.

  • Kontamination. AIME 2024 und 2025 sind öffentlich und stehen wahrscheinlich in den Trainingsdaten. Für den Vergleich zweier Quantisierungen desselben Modells ist das tragbar – beide haben dieselbe Erinnerung –, als absolute Fähigkeitsaussage taugt es nicht. Die eigenen Code- und Kontextaufgaben sind die Gegenprobe.
  • Ein Notebook mit 70 W GPU-Budget ist kein Desktop. Die absoluten Zahlen gelten für dieses Gerät an diesem Netzteil.
  • Ein Durchgang je Engine – und bei llama.cpp ist das nachweislich eine Stichprobe, keine Konstante (Kapitel 10).
  • Der Stand von heute ist nicht der Stand der Messung. Der rocmfpx-Fork ist seit dem Messtag dreizehn Commits weiter, mit einer Optimierung genau am hier gemessenen Schwachpunkt; halogen liegt bei 0.5.0. Nachgemessen wurde das nicht – diese Seite gilt für die Fassungen, die sie nennt.