Benchmarking and Performance#

These pages help you keep Cellucid responsive on large datasets, run repeatable benchmarks, and report performance issues in a way that can actually be fixed.

They are written for mixed audiences:

  • Wet lab / non-technical: a clear “is this normal?” checklist and safe defaults.

  • Computational users: scaling rules, workflow patterns, and the data characteristics that dominate performance.

  • Power users / developers: how to measure, compare, and debug performance issues without guesswork.

Important

Cellucid performance is usually limited by one of these three resources:

  • GPU-bound (rendering): too many pixels — from the window, the point size, or antialiasing — plus volumetric smoke and vector field overlays.

  • CPU-bound (computation): repeated filtering, heavy analysis, large category accounting.

  • Network/storage-bound (I/O): remote server latency, loading large expression chunks, slow disk/remote mounts.

The fastest fix is almost always: identify which one you hit first, then change the one knob that actually affects it.

Note

Two behaviours in this section are the opposite of what most people assume, and both are worth knowing before you start tuning:

  • Hiding cells with a filter makes navigation faster, not slower. Hidden cells are rejected before anything is drawn for them.

  • Each view draws every point again. On a large dataset frame time grows with the number of views, and Level of detail is what keeps a multiview comparison smooth.

Performance mental model explains both.


Fast path (if it feels slow right now)#

Use this table when you’re in the middle of work and just need relief.

What you see

Most likely bottleneck

Do this first (safe)

Next page

Navigation (orbit/pan/zoom) feels choppy

GPU

Make the window smaller, switch to Points mode, close other GPU-heavy tabs

Performance mental model

Slider scrubbing (filters) stutters

CPU

Turn Live filtering off and use Filter to apply once

Performance considerations (what gets slow and why)

Loading takes forever or tab freezes

I/O or memory

Keep the file on a local disk; for a large cell-major .h5ad, write a gene-major copy with prepare()

Large dataset best practices

Fans spin up / laptop throttles

GPU + thermals

Lower quality knobs (smoke/grid, overlays), reduce window size, clear snapshots

Edge cases (performance)

“WebGL context lost” / blank canvas

GPU memory

Reload, then reduce GPU load (no smoke, no snapshots, smaller highlights, lower overlay density)

Troubleshooting (performance)

“It got slower after a change”

Regression

Run a small benchmark loop and compare numbers

Benchmarking methodology and metrics

If you suspect an environment/browser issue (not your data), also read:




Pages in this section#

Performance mental model

How to think about GPU vs CPU vs I/O bottlenecks, and how to triage quickly.

Performance mental model
What gets slow (and why)

The concrete “cost model”: which interactions scale with n_cells, n_views, categories, and overlays.

Performance considerations (what gets slow and why)
Large dataset best practices

A practical, step-by-step workflow for staying fast on very large datasets.

Large dataset best practices
Benchmarking methodology

How to measure load time, FPS/latency, and memory reliably—and compare changes fairly.

Benchmarking methodology and metrics
Benchmark tools

How to use the in-app benchmark tools, plus interpretation and common pitfalls.

Benchmark tools
Edge cases

Surprising “performance cliffs” like category explosion, too many views, GPU memory limits, and huge datasets.

Edge cases (performance)
Troubleshooting

Symptom-based debugging for lag, freezes, context loss, and slow loads.

Troubleshooting (performance)
Verified captures

The benchmark panel, the historical acceptance samples, and what layout shape costs.

Verified performance captures
Reporting bugs

A copy/paste template for reporting performance issues with the right context and metrics.

Reporting performance bugs