docs / benchmarks / lang

Benchmarks index
  1. Overview
  1. Exemptions
  2. Methodology

aot

  1. Overview
  2. Components

codec

  1. Overview
  2. Base32
  3. Base64
  4. Deflate (dev.cajeta.codec)

codec / csv

  1. CSV

codec / json

  1. JSON

collection

  1. Overview
  2. ArrayList
  3. BPlusTree
  4. Cache
  5. Collectors
  6. HashMap
  7. HashSet
  8. Heap
  9. ImmutableList
  10. ImmutableMap
  11. ImmutableSet
  12. LinkedList
  13. RedBlackTree
  14. Sort

collection / ltm

  1. LtmBPlusTree

concurrent

  1. Overview
  2. AtomicInt32
  3. AtomicInt64
  4. Channel
  5. Fiber
  6. FiberLocal
  7. Lock
  8. Mutex
  9. RwLock
  10. Semaphore
  11. Tasks

gfx

  1. Overview
  2. Texture2D

hash

  1. Overview
  2. DefaultHasher
  3. Hash
  4. SipHash
  5. XXHash3

http

  1. Overview
  2. Client
  3. Server
  4. Server-sent events
  5. Start-up and footprint
  6. TLS
  7. WebSocket

io

  1. Overview
  2. Buffer

io / file

  1. Directory walk
  2. File
  3. FileInfo
  4. FileReader
  5. FileWriter
  6. Path
  7. Watcher

io / net

  1. BufferPool
  2. ByteBuffer
  3. Server
  4. TcpListener
  5. TcpStream
  6. UdpSocket

io / net / uri

  1. Uri
  2. UriBuilder

lang

  1. Overview
  2. Allocation and ownership
  3. Calls and dispatch
  4. Exceptions
  5. Guid
  6. Loops
  7. Math and SIMD
  8. Optional
  9. Pair
  10. Slice
  11. String
  12. StringBuilder
  13. Whole programs: the Benchmarks Game

lang / stream

  1. ArrayStream
  2. Stream

llm

  1. Overview
  2. Decode
  3. Kernel parity
  4. Load and first token
  5. Long context
  6. Memory
  7. Prefill

math

  1. Overview
  2. Ray
  3. Rotation
  4. Tensor
  5. Transform

math / fft

  1. Fft

math / linalg

  1. LinAlg

math / npio

  1. Npy

math / poly

  1. Poly

math / random

  1. Generator

math / stats

  1. Stats

ml

  1. Overview
  2. Classical models
  3. Neural models
  4. XGBoost

nucleo

  1. Overview
  2. Column
  3. Fuse
  4. Table
  5. Tape
  6. Transforms

primavera

  1. Overview
  2. Build time
  3. Dependency injection at scale
  4. REST endpoint
  5. Start-up and footprint
  6. Templated page

process

  1. Overview
  2. Command
  3. Process

reflect

  1. Overview
  2. Class

search

  1. Overview

search / distance

  1. Distance

search / fuzzy

  1. Matcher

search / ngram

  1. Index

time

  1. Overview
  2. Clock
  3. DateTimeFormatter
  4. Duration
  5. Instant
  6. LocalDate
  7. LocalDateTime
  8. LocalTime
  9. ZonedDateTime

toolchain

  1. Overview
  2. Binary size
  3. Build tool
  4. Compile time
  5. Debugger
  6. Notebook kernel start-up
  7. Start-up

toolchain / kernel-startup

  1. Overview
  2. Where cold-start time goes

wire

  1. Overview
  2. CompressStream
  3. Encoder
  4. SchemaEncoder

xpu

  1. Overview
  2. Device
  3. KernelBuffer
  4. KernelStream
  5. KernelTimer

xpu / mesh

  1. MeshSimplifier
Machine
no runs yet

Loops

The language’s loops, measured bare: a counted for, the same loop with bounds checks off, nested loops, foreach over an array and over an ArrayList, a range, a loop-carried reduction and an early exit. These are the floors every other number on this site stands on. Each loop consumes its result through the harness sink so the optimizer cannot delete it, and the smoke test greps the release IR to confirm the loop survived.

Benchmarks

idworkloadagainstcheck
lang/loop-counted1e8 iterations summing i into an int64C++, Rust, Go, Java, Pythonsum
lang/loop-counted-noboundsthe same loop indexing an array with --bounds=offC++, Rust (get_unchecked), Go, Javasum
lang/loop-nested1e4 × 1e4 nested counted loopsC++, Rust, Go, Java, Pythonsum
lang/loop-foreach-arrayforeach over an int32[] of 1e7C++, Rust, Go, Java, Pythonsum
lang/loop-foreach-arraylistwalk an ArrayList<int32> of 1e7 by index (foreach over an ArrayList runs zero iterations on v0.46.3, a filed defect; the row moves to foreach when fixed)C++, Rust, Go, Java, Pythonsum
lang/loop-rangea counted for over [lo, hi) of 1e8 (the language has no range construct; the competitors use theirs)C++, Rust, Go, Java, Pythonsum
lang/loop-reduceloop-carried float64 reduction over 1e7C++, Rust, Go, Java, Pythonsum within epsilon
lang/loop-early-exitscan of 1e7 for a sentinel at the midpoint, 1e3 timesC++, Rust, Go, Java, Pythonindex found

The language has no loop construct a competitor lacks, so every row is the same shape in every language.

Results

One chart per benchmark, for the machine selected at the top of the page. Languages are the bars, best first; Cajeta’s bar is in color and the competitors’ are gray. A skipped competitor keeps its row with the reason in place of a bar. A benchmark with no row on the selected machine says so and shows nothing else.

lang/loop-counted

Not yet measured on Proton.

lang/loop-counted-nobounds

Not yet measured on Proton.

lang/loop-nested

Not yet measured on Proton.

lang/loop-foreach-array

Not yet measured on Proton.

lang/loop-foreach-arraylist

Not yet measured on Proton.

lang/loop-range

Not yet measured on Proton.

lang/loop-reduce

Not yet measured on Proton.

lang/loop-early-exit

Not yet measured on Proton.

Reproduce

cd bench
./bench.sh --bench loop-counted               # Cajeta
./bench.sh --bench loop-counted --competitors # every pinned competitor

Every row records the compiler and competitor versions, flags, machine, OS and driver; METHODOLOGY states the rules a number must satisfy before it is published.

See also

  • Benchmark source: bench/src/main/cajeta/bench/lang/

Source: bench/lang/Loops.md · 2 min read · 388 words