Count floating-point operations in Python code & benchmark relative flop costs.
Project description
counted-float
This Python package provides functionality for...
- counting floating point operations (FLOPs) of numerical algorithms implemented in plain Python, optionally weighted by their relative cost of execution
- running benchmarks to estimate the relative cost of executing various floating-point operations (requires
numbaoptional dependency for achieving accurate results)
The target application area is evaluation of research prototypes of numerical algorithms where (weighted) flop counting can be useful for estimating total computational cost, in cases where benchmarking a compiled version (C, Rust, ...) is not feasible or desirable.
Flop weights are computed using a highly curated dataset spanning a wide range of modern CPUs:
- 19 benchmarks, 16 spec sheets, 12 third party measurements (Agner Fog, uops.info)
- covering x86 (Intel, AMD) and ARM (Apple, AWS, Azure) architectures
Full documentation: counted-float.readthedocs.io
Installation
Use your favorite package manager such as uv or pip:
pip install counted-float # install without numba optional dependency
pip install counted-float[numba] # install with numba optional dependency
Numba is optional due to its relatively large size (40-50MB, including llvmlite), but without it, benchmarks will not be reliable (but will still run, but not in jit-compiled form).
Quick start
CountedFloat is a drop-in replacement for the built-in float; it is "contagious", so results of
math operations involving a CountedFloat stay CountedFloat:
from counted_float import CountedFloat
cf = CountedFloat(1.3)
f = 2.8
result = cf + f # result = CountedFloat(4.1)
is_float_1 = isinstance(cf, float) # True
is_float_2 = isinstance(result, float) # True
FLOPs performed by CountedFloat values are counted while a FlopCountingContext is active:
from counted_float import CountedFloat, FlopCountingContext
cf1 = CountedFloat(1.73)
cf2 = CountedFloat(2.94)
with FlopCountingContext() as ctx:
_ = cf1 * cf2
_ = cf1 + cf2
counts = ctx.flop_counts() # {FlopType.MUL: 1, FlopType.ADD: 1}
counts.total_count() # 2
Documentation
The documentation site covers the rest:
- Counting FLOPs — the counting model, counting contexts, pausing
- Math patching semantics — how (and when)
math.*functions are instrumented - FLOP weights — built-in consensus weights, configuring your own
- Benchmarking — estimating flop weights on your own hardware
- CLI reference — using
counted_floatas a stand-alone command-line tool - Known limitations — what falls outside the counting model
- Reference — per-FLOP-type counting rules, methodology, CPU scope
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file counted_float-1.2.0.tar.gz.
File metadata
- Download URL: counted_float-1.2.0.tar.gz
- Upload date:
- Size: 96.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd52030f203c241893360d3a68db9d166567e7f0196e16da0e6de142c4dc7f2f
|
|
| MD5 |
3b9fb54c950de9963afe36d1ccfa5b37
|
|
| BLAKE2b-256 |
9f987062bad5ac4b50add309e143a720024611cdd73599a2122fa66f9597fe06
|
Provenance
The following attestation bundles were made for counted_float-1.2.0.tar.gz:
Publisher:
release_tag.yml on bertpl/counted-float
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
counted_float-1.2.0.tar.gz -
Subject digest:
bd52030f203c241893360d3a68db9d166567e7f0196e16da0e6de142c4dc7f2f - Sigstore transparency entry: 2086636929
- Sigstore integration time:
-
Permalink:
bertpl/counted-float@3f4a8f81743ca1f1d13dc366bec60a93a53c3c78 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/bertpl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release_tag.yml@3f4a8f81743ca1f1d13dc366bec60a93a53c3c78 -
Trigger Event:
push
-
Statement type:
File details
Details for the file counted_float-1.2.0-py3-none-any.whl.
File metadata
- Download URL: counted_float-1.2.0-py3-none-any.whl
- Upload date:
- Size: 107.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed5e0615bfc413efc2fdbdc559344586c46aa9abb88fd4c630bbe95e714ef882
|
|
| MD5 |
9d36711217028022bd18abb7c8dfda27
|
|
| BLAKE2b-256 |
9659b7ad589feea89b85cdc0622d12dd72a75aa589091670b97a6606ac74b675
|
Provenance
The following attestation bundles were made for counted_float-1.2.0-py3-none-any.whl:
Publisher:
release_tag.yml on bertpl/counted-float
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
counted_float-1.2.0-py3-none-any.whl -
Subject digest:
ed5e0615bfc413efc2fdbdc559344586c46aa9abb88fd4c630bbe95e714ef882 - Sigstore transparency entry: 2086637021
- Sigstore integration time:
-
Permalink:
bertpl/counted-float@3f4a8f81743ca1f1d13dc366bec60a93a53c3c78 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/bertpl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release_tag.yml@3f4a8f81743ca1f1d13dc366bec60a93a53c3c78 -
Trigger Event:
push
-
Statement type: