docs / benchmarks / math

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

Tensor

cajeta.math.Tensor — the keystone n-dimensional array. Element access is the row the tensor-element-access work targeted at 1.5 ns in release; the elementwise, broadcast, reduce and transpose rows are the operations every model is made of; matmul on the CPU is the kernel-pool path.

Benchmarks

idworkloadagainstcheck
math/tensor-element-getflatGet over every element of a 1M float64 tensor per trial, against a plain array and the hostBuffer() view; the three read paths must agree before a time is printedNumPy item access (noted as interpreted), Eigen, ndarraysum
math/tensor-element-setflatSet over the same 1M elementssamechecksum
math/tensor-elementwisea * b + c over 1e7 float32NumPy, Eigen, Rust ndarray, Go gonum, Java EJMLwithin epsilon
math/tensor-broadcastadd a 1e3 row to a 1e4 × 1e3 matrixNumPy, Eigen, Rust ndarray, Go gonum, Java EJMLwithin epsilon
math/tensor-reducesum, max and mean along each axis of 1e4 × 1e3NumPy, Eigen, Rust ndarray, Go gonum, Java EJMLwithin epsilon
math/tensor-transposematerialized transpose of 4096 × 4096 float32NumPy, Eigen, Rust ndarray, Go gonum, Java EJMLequality
math/tensor-castfloat32 → float64 → int32 over 1e7 (an element loop over the host buffers: Tensor has no cast yet)NumPy, Eigen, Rust ndarray, Go gonum, Java EJMLchecksum
math/matmul200 × 200 float64 matrix multiply on the host kernel-pool path (the first suite’s shape, kept)OpenBLAS through NumPy, Eigen, ndarray with BLAS, gonum, EJMLwithin epsilon

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.

math/tensor-element-get

Not yet measured on Proton.

math/tensor-element-set

Not yet measured on Proton.

math/tensor-elementwise

Not yet measured on Proton.

math/tensor-broadcast

Not yet measured on Proton.

math/tensor-reduce

Not yet measured on Proton.

math/tensor-transpose

Not yet measured on Proton.

math/tensor-cast

Not yet measured on Proton.

math/matmul

Not yet measured on Proton.

Reproduce

cd bench
./bench.sh --bench tensor-element-get               # Cajeta
./bench.sh --bench tensor-element-get --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

  • Reference: Tensor
  • Source: runtime/src/cajeta/math/Tensor.cajeta
  • Benchmark source: bench/src/main/cajeta/bench/math/

Source: bench/math/Tensor.md · 2 min read · 383 words