Skip to content

August on DGX Spark ​

August's LLVM compiler built and ran on a physical DGX Spark on October 2, 2026. It passed the language regression suite, safety gyms, and installed-CLI checks for all four public native libraries. These are CPU results. They do not qualify GPU execution or the rest of PyTorch's API.

Machine and measurement ​

The host ran Ubuntu 24.04.4 LTS, Linux 6.17.0-1021-nvidia, on a 20-core ARM64 CPU with Cortex-X925 and Cortex-A725 cores. Builds used August's Debian 12 maintainer container: glibc 2.36, Node 24.21.0, LLVM 23.1.2, and Debian Clang 14.0.6 for the independent C references. The container ran directly on the Spark's ARM64 CPU.

Timed runs were restricted to four performance cores, CPUs 5–8. Frequency and other host activity were not fixed. Each sample started a fresh executable; timings include process startup and exclude compilation. Implementation order rotated in a separate measurement process, and every output was checked. Both August and C used O2 without LTO or fast-math. Compare implementations within a row; do not treat these numbers as a comparison of Spark and the Mac results.

The raw reports say unknown for the CPU model because Node did not expose its name in the container. The hardware description above comes from the host's lscpu inventory. The reports are preserved as recorded.

Core workloads ​

DGX Spark execution time

Median ms · shorter is better. Each panel starts at zero and scales to the implementations shown.

Compare

StartupCode and spec ↗

  • August1.33 ms
  • C0.92 ms
  • Node19.3 ms
  • Python7.43 ms

Integer loop · 2 million stepsCode and spec ↗

  • August7.77 ms
  • C7.51 ms
  • Node36.76 ms
  • Python220.76 ms

Map + Set · 20,000 entriesCode and spec ↗

  • August4.24 ms
  • C3.7 ms
  • Node28.03 ms
  • Python12.68 ms

Map + Set · 200,000 entriesCode and spec ↗

  • August63.48 ms
  • C22.47 ms
  • Node82.6 ms
  • Python50.7 ms

JSON · 5,000 recordsCode and spec ↗

  • August7.19 ms
  • C1.6 ms
  • Node22.65 ms
  • Python22.29 ms
Exact values and sample ranges
DGX Spark execution time · ms
ProgramImplementationMedianMinimumMaximumSamples
StartupAugust1.330.942.1960
StartupC0.920.713.4660
StartupNode19.315.7225.460
StartupPython7.436.5410.0260
Integer loop · 2 million stepsAugust7.777.458.1960
Integer loop · 2 million stepsC7.517.148.2760
Integer loop · 2 million stepsNode36.7632.7940.1360
Integer loop · 2 million stepsPython220.76212.99241.8860
Map + Set · 20,000 entriesAugust4.243.365.7460
Map + Set · 20,000 entriesC3.72.385.2160
Map + Set · 20,000 entriesNode28.0321.5334.9360
Map + Set · 20,000 entriesPython12.6810.1814.7960
Map + Set · 200,000 entriesAugust63.4846.0673.4660
Map + Set · 200,000 entriesC22.4717.6727.5760
Map + Set · 200,000 entriesNode82.663.9196.8460
Map + Set · 200,000 entriesPython50.743.2159.7460
JSON · 5,000 recordsAugust7.196.748.5460
JSON · 5,000 recordsC1.61.272.0560
JSON · 5,000 recordsNode22.6518.6127.1660
JSON · 5,000 recordsPython22.2920.4124.6460

These medians use 60 samples after three warmups. The full report includes all samples, peak memory, build times, Node and Python comparisons, and the C migration backend. The performance guide explains the programs and their comparison limits.

ProgramWork per runAugust LLVMCAugust / C
StartupPrint one integer1.33 ms0.92 ms1.44
Integer loop2,000,000 steps7.77 ms7.51 ms1.04
Map and Set20,000 entries4.24 ms3.70 ms1.15
Map and Set200,000 entries63.48 ms22.47 ms2.83
JSON5,000 records7.19 ms1.60 ms4.49

The larger collection case and JSON still have substantial overhead. The JSON C reference parses and writes data without constructing August records. The migration check compares LLVM with the same August program compiled through C. The standalone C references perform different work, as described below.

Eight application kernels ​

DGX Spark application kernels

Median ms · shorter is better. Each panel starts at zero and scales to the implementations shown.

Compare

Floating-point loopCode and spec ↗

  • August2.15 ms
  • C1.57 ms

Labeled callsCode and spec ↗

  • August2.5 ms
  • C1.58 ms

List traversalCode and spec ↗

  • August3.62 ms
  • C1.96 ms

String processingCode and spec ↗

  • August8.29 ms
  • C2.07 ms

Map deletion and refillCode and spec ↗

  • August5.31 ms
  • C4.47 ms

Checked failuresCode and spec ↗

  • August1.04 ms
  • C0.72 ms

Record allocationCode and spec ↗

  • August22.6 ms
  • C3.09 ms

Task schedulingCode and spec ↗

  • August8.23 ms
  • C1.3 ms
Exact values and sample ranges
DGX Spark application kernels · ms
ProgramImplementationMedianMinimumMaximumSamples
Floating-point loopAugust2.151.872.5930
Floating-point loopC1.571.32.330
Labeled callsAugust2.52.213.2830
Labeled callsC1.581.42.0330
List traversalAugust3.622.644.5330
List traversalC1.961.352.5630
String processingAugust8.297.748.7930
String processingC2.071.712.630
Map deletion and refillAugust5.314.965.9230
Map deletion and refillC4.474.135.3830
Checked failuresAugust1.040.931.2430
Checked failuresC0.720.641.0430
Record allocationAugust22.618.5926.1530
Record allocationC3.092.283.9330
Task schedulingAugust8.236.179.1830
Task schedulingC1.30.92.0930

These medians use 30 samples after three warmups. Each linked project shows the complete August code beside its compiled explanation, with an indentation/braces switch. Raw samples and expected results retain the C migration comparison too.

Program and code/specWork per runAugust LLVMCAugust / C
Floating-point loop1,000,0002.15 ms1.57 ms1.37
Labeled calls200,0002.50 ms1.58 ms1.59
List traversal100,0003.62 ms1.96 ms1.84
String processing20,0008.29 ms2.07 ms4.00
Map deletion and refill4,0005.31 ms4.47 ms1.19
Checked failures20,0001.04 ms0.72 ms1.43
Record allocation50,00022.60 ms3.09 ms7.32
Task scheduling2,0008.23 ms1.30 ms6.32

The C references use concrete representations and explicit cleanup. The ordered map uses linear search. The task reference calls functions sequentially; it does not implement August's scheduler or cancellation rules. August also performs managed allocation and task scheduling. Those costs are included in the measurements.

HTTP throughput ​

DGX Spark HTTP throughput

Median requests/s · longer is better. Each panel starts at zero and scales to the implementations shown.

Compare

1 concurrent clientsCode and spec ↗

  • August18,441 requests/s
  • Node17,271 requests/s

16 concurrent clientsCode and spec ↗

  • August37,864 requests/s
  • Node34,749 requests/s

64 concurrent clientsCode and spec ↗

  • August35,395 requests/s
  • Node31,815 requests/s
Exact values and sample ranges
DGX Spark HTTP throughput · requests/s
ProgramImplementationMedianMinimumMaximumSamples
1 concurrent clientsAugust18,44116,74820,6005
1 concurrent clientsNode17,27116,49218,4105
16 concurrent clientsAugust37,86437,43939,7625
16 concurrent clientsNode34,74931,87438,0375
64 concurrent clientsAugust35,39533,69836,9695
64 concurrent clientsNode31,81531,21434,9985

Each median covers five fresh server runs with 5,000 validated requests per run, after warmup. The load is HTTP/1.1 loopback with keep-alive, fixed concurrency and no TLS, authentication or logging. It measures this endpoint and client together, not a server's maximum capacity. There is no standalone C HTTP implementation in this comparison.

Concurrent clientsAugust LLVMAugust C backendNode
118,441 requests/s16,157 requests/s17,271 requests/s
1637,864 requests/s38,866 requests/s34,749 requests/s
6435,395 requests/s36,414 requests/s31,815 requests/s

Safety and real imports ​

All 266 LLVM parity tests passed with no skips, including source breakpoints and debugger variable inspection. The full safety gym report passed 3,612 generated and edge-case checks in development and optimized builds, rejected eight forbidden contracts, and detected all 14 valid behavioral mutations. All six additional circuits passed with no skipped tests: source mutations, ownership/concurrency, native boundaries, package integrity, HTTP boundaries and sanitizers.

The installed-CLI report records public URL imports and named aliases for CPU LibTorch v0.1.4, SQLite v0.1.3, zlib v0.1.3, and Rust BLAKE3 v0.1.3. The real libraries produced the expected tensor sum, database query, compression round trip and hash. Frozen/offline restores, relocated deployments, same-file tests, resource cleanup counters, tasks, JSON, clocks, crypto and HTTP forms passed too. This check used a locally supplied compiler archive before publication.

After 0.21.0 was published, a fresh installed-CLI check repeated all those operations with the public compiler and library downloads. Its source and artifact caches started empty, and no native developer tools were on the test processes' search path. The report omits only its temporary directory path. The separate clean-container CI checks remove compilers, Git and development headers from the consumer filesystem.

These finite tests do not prove arbitrary foreign code safe. Core sanitizers do not instrument the interiors of prebuilt libraries, and the coroutine gate does not establish whole-process leak freedom. Read the gym limits before interpreting a pass.

Revision ​

This run used commit e3c072b. All three benchmark/gym reports carry source SHA-256 d6afc98df62d8a40990cf4032cf01595e8c353bf7419d44ddfefa7c479681a79, which includes the platform's prepared compiler-pack metadata. The results apply to that recorded snapshot. Contributor instructions explain how to produce new evidence after a change.

The world runs on language