Skip to main content

coren

Compute and resource normalization.

Measures what your machine can do. Built for irohds -- to tell you whether a computation is faster to run locally or fetch from the network.

Any two machines looking at the same function can independently agree on how much work it requires (an almost deterministic op count). Each machine knows its own capabilities (benchmarked once at startup). The verdict is local arithmetic: compare estimated compute time against estimated fetch time.

Integration into irohds, a decentralized memoization system for scientific computing, was the initial reason for making this package. It is also useful as a standalone tool for roofline analysis, ETL buffer sizing, and build parallelism decisions.

Install

uv add coren

Or from source:

uv run maturin develop --features python

Usage

from coren import FnCost, MachCap

# Describe the work (deterministic, same on every machine)
cost = FnCost.sort(1_000_000, 64, 64_000_000)

# Measure this machine (benchmarks run once, cached)
cap = MachCap.read()

# Get the answer
v = cap.verdict(cost)
print(v)  # "compute (saves 0.712s)" or "fetch (saves 2.3s)"

if v.should_fetch():
    download_result()
else:
    compute_locally()

How it works

Two layers:

FnCost describes a function's resource requirements in absolute physical units. Four integers: ops (total arithmetic operations), mem_bytes (memory traffic), peak_mem (peak RAM footprint), result_bytes (output size). These are properties of the algorithm and its inputs. Bitwise identical on every machine.

MachCap describes what this machine can do. Measured via micro-benchmarks (FMA throughput, STREAM triad, disk sequential I/O) and OS queries (NIC link speed, battery state, core count, RAM). Produces a roofline model: peak ops/s and memory bandwidth.

The verdict compares estimated compute time (from the roofline model) against estimated fetch time (result_bytes / NIC bandwidth). The score is the difference in seconds: positive means fetch is faster, negative means compute is faster. Infinity means one option is impossible (no RAM, or no network).

FnCost constructors

FnCost.new(ops, mem_bytes, peak_mem, result_bytes)   raw values
FnCost.scan(n_bytes, result_bytes)                   linear scan
FnCost.sort(n, item_bytes, result_bytes)             merge sort
FnCost.hash(n_bytes)                                 crypto hash
FnCost.matmul(m, n, k, result_bytes)                 dense GEMM
FnCost.etl(rows, row_bytes, ops_per_row, result_bytes)  row processing
FnCost.copy(size)                                    file copy (ops=0)

Combinators

a.then(b)    # sequential: ops sum, peak_mem = max, result = b's output
a + b        # same as then
a.par(b)     # parallel: ops = max, peak_mem sums, result sums
a.repeat(k)  # k iterations, peak_mem unchanged

Normalizing wall-clock measurements

When a function is executed and you only know the wall-clock time (not the algorithmic complexity), MachCap.normalize() converts the measurement into a FnCost suitable for local verdict computation.

WARNING: normalize() output is NOT deterministic across machines. Different machines produce different ops/mem_bytes values for the same function. Do NOT use normalize()-produced FnCost as cache keys, content addresses, or any identifier that must match across peers. For cache keys, use the static constructors (sort, hash, matmul, etc.) or FnCost.new() with values derived from the function's definition and parameters.

cost = cap.normalize(compute_ns=15_000_000_000, peak_mem=4_000_000_000, result_bytes=500_000_000)
# cost is a safe overestimate, suitable for verdict() but NOT for cache keys

CLI

$ coren
coren  [desktop]
  cores                    8p / 16l
  frequency                3600 MHz

  roofline (measured)
    peak (all cores)       89.2 GFLOPS
    mem bandwidth          38.1 GB/s
    disk bandwidth         1.52 GB/s
    ridge point            2.34 ops/byte

  verdicts (what should this machine do?)
    task                       ops         Q         R    score       neck action
    sort 1M x 64B          200.0M     1.2GB    10.0MB   -0.712   memory compute
    matmul 1k^3              2.0G    22.9MB    10.0MB   -0.779  compute compute

$ coren --json   # machine-readable output

Rust

use coren::{FnCost, MachCap};

let cost = FnCost::sort(1_000_000, 64, 64_000_000);
let cap = MachCap::read(".");
let v = cap.verdict(&cost);

if v.should_fetch() {
    // download from peer
} else {
    // compute locally
}

License

MIT OR Apache-2.0

Release files for coren 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for coren 0.1.5
File Size Uploaded
coren-0.1.5.tar.gz 78.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for coren 0.1.5
File Interpreter ABI Platform
coren-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
coren-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details

Total release size: 863.0 kB

Release files / coren-0.1.5.tar.gz

Download URL coren-0.1.5.tar.gz
Size 78.0 kB
Tags Source
SHA-256 checksum
How to use checksums
6f7624150d07da230545dce91a2788c1927b751f66050c1d7f5010f2274d1323
BLAKE2b-256 checksum
How to use checksums
b162fe87c555d9a40ac5209f9a743a91c49ab8286b7529d2ecb8bf2a0e066ddf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / coren-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL coren-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 405.2 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ca655e2f3eb624a9e966e0550302c337d5296ef867bd5ef402ca6c7c17b7bec9
BLAKE2b-256 checksum
How to use checksums
1fea31c2ac62caa8569125d2844f0cb34a1017738f486ce174d347e089fc1b12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / coren-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL coren-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 379.8 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
14622f1ad012cba996d2137c5c3fb3849f6a58bf9ecbdc091a4f49451d8c8d19
BLAKE2b-256 checksum
How to use checksums
3c01a83d50d29da9f48736bec38b7f2817e8bb997acd72fcb43d5fd8ec4a41c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release history Release notifications | RSS feed

This release

0.1.5 This release

3 release files

0.1.4

3 release files

0.1.3

3 release files

0.1.2

4 release files

0.1.1

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page