<!-- SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<!-- Generated from benchmarks.rst.in; do not edit this file directly. -->

# Performance and Speedups

Zero-code-change acceleration with `cuml.accel` delivers an
**approximately 5.8× median speedup** across training benchmark cases
completed on both CPU and GPU, measured on NVIDIA RTX Pro 6000. Training
performance varies with the estimator, dataset size and shape, and
hyperparameters, but most measured workloads are faster on GPU, with the
largest gains appearing on wider or larger datasets.

## Speedup by operation and workload

Rows are ranked by the median exact speedup. Green indicates a measured gain,
gray is centered at 1×, and warm colors indicate a slowdown. Hatching marks
CPU-timeout lower bounds and unavailable results.

A timeout indicates that the complete isolated CPU benchmark case—not a
single estimator call—exceeded its wall-clock limit. When the GPU
run completed, the displayed value is a conservative lower bound (`≥`), not
an exact speedup.

### Training and combined operations

<div class="benchmark-heatmap" tabindex="0" aria-label="Scrollable training heatmap">
  <object data="../../_static/cuml-accel-benchmarks/training-heatmap.svg" type="image/svg+xml" aria-label="Training speedup heatmap. Operation labels link to estimator details; exact values and timeout labels are present in the graphic and detailed tables.">
    <a href="../../_static/cuml-accel-benchmarks/training-heatmap.svg">Open the training speedup heatmap</a>
  </object>
</div>

PCA performance depends strongly on the requested component rank. The table
below holds the input at 61,035 rows by 4,096
features and varies only `n_components`. The timings show an approximate
crossover from
transfer-dominated low-rank work to positive speedup at higher ranks.

See the [detailed PCA results](#benchmark-pca) for the remaining
workloads.

#### Medium-wide PCA fit-transform by component rank

|   Components | PCA CPU / GPU / result   |
|--------------|--------------------------|
|          128 | 1.42 s / 2.97 s / 0.48×  |
|          256 | 2.15 s / 2.91 s / 0.74×  |
|          512 | 3.34 s / 2.98 s / 1.12×  |
|        1,024 | 8.14 s / 3.1 s / 2.62×   |

### Inference and transforms

The heatmap shows the 10 operations with the
highest median exact speedup.
Detailed estimator tables retain every inference and transform result,
including short operations where dispatch and data-conversion overhead
dominate.

<div class="benchmark-heatmap" tabindex="0" aria-label="Scrollable inference heatmap">
  <object data="../../_static/cuml-accel-benchmarks/inference-heatmap.svg" type="image/svg+xml" aria-label="Inference and transform speedup heatmap. Operation labels link to estimator details; exact values and timeout labels are present in the graphic and detailed tables.">
    <a href="../../_static/cuml-accel-benchmarks/inference-heatmap.svg">Open the inference speedup heatmap</a>
  </object>
</div>

## Detailed benchmark results

Use the workload guide to interpret the heatmaps, then open an estimator for
exact shapes, throughput or wall times, slowdowns, and timeouts. Detailed
results express inference and transform operations as throughput in samples
per second, abbreviated as `M/s`, `k/s`, or `/s`, with one input row
counted as one sample. The wall time used to calculate throughput is shown
below it. Training and combined-operation rows show wall time only.

### Five relative workload categories, from transfer-bound to compute-heavy

Every operation uses the same five relative workload categories, ordered from
smaller or more transfer-sensitive cases to larger or more compute-intensive
cases. Concrete shapes follow operation-family policies, with workload sizes
chosen to complete within reasonable runtime and resource limits. These sizes
are illustrative examples across several workload regimes, not scaling limits
or maximum supported sizes. The same category can therefore represent
different rows, features, and input sizes across operations; exact values
appear in the estimator tables.

#### Workload dimensions and decimal float32 X size

| Label             | Rows              | Features   | Input           |
|-------------------|-------------------|------------|-----------------|
| `small.balanced`  | 2,000–781,250     | 32–1,024   | 0.256 MB–205 MB |
| `medium.thin`     | 8,000–15,625,000  | 8–128      | 0.256 MB–500 MB |
| `medium.balanced` | 8,000–3,906,250   | 32–1,024   | 1.02 MB–2 GB    |
| `medium.wide`     | 8,000–976,563     | 128–4,096  | 8.19 MB–2 GB    |
| `large`           | 32,000–15,625,000 | 32–1,024   | 4.1 MB–10 GB    |

### Results by estimator

Open an estimator for every workload, throughput or wall time, slowdown,
timeout, and actual shape.

<div class="benchmark-detail-controls" aria-label="Estimator detail controls">
  <button type="button" data-benchmark-details="expand">Expand all</button>
  <button type="button" data-benchmark-details="collapse">Collapse all</button>
</div>

### Linear models

### ElasticNet

#### ElasticNet results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 24.4 ms          | 16.2 ms          | 1.51×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 216.7 ms         | 47.7 ms          | 4.55×    |
| `fit`       | `medium.balanced` |   500,000 |        128 | 256 MB   | 388.4 ms         | 314.8 ms         | 1.23×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 2.66 s           | 2.47 s           | 1.08×    |
| `fit`       | `large`           | 5,000,000 |        128 | 2.56 GB  | 3.67 s           | 3.2 s            | 1.15×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 32.1M/s 6.1 ms   | 23.4M/s 8.3 ms   | 0.73×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 251M/s 31.2 ms   | 176M/s 44.3 ms   | 0.70×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 32.6M/s 29.9 ms  | 23.8M/s 41.1 ms  | 0.73×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 4.74M/s 103.0 ms | 3.05M/s 160.0 ms | 0.64×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 41.1M/s 121.6 ms | 24.1M/s 207.2 ms | 0.59×    |

### Lasso

#### Lasso results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 22.6 ms          | 16.7 ms          | 1.35×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 130.2 ms         | 46.7 ms          | 2.79×    |
| `fit`       | `medium.balanced` |   500,000 |        128 | 256 MB   | 398.2 ms         | 322.9 ms         | 1.23×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 2.62 s           | 2.45 s           | 1.07×    |
| `fit`       | `large`           | 5,000,000 |        128 | 2.56 GB  | 3.75 s           | 3.19 s           | 1.17×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 35M/s 5.6 ms     | 23.5M/s 8.3 ms   | 0.67×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 247M/s 31.6 ms   | 176M/s 44.3 ms   | 0.71×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 34.4M/s 28.4 ms  | 23.8M/s 41.1 ms  | 0.69×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 4.9M/s 99.6 ms   | 3.04M/s 160.5 ms | 0.62×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 41.1M/s 121.6 ms | 24M/s 208.0 ms   | 0.58×    |

### LinearRegression

#### LinearRegression results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 54.9 ms          | 7.3 ms           | 7.50×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 223.0 ms         | 17.0 ms          | 13.1×    |
| `fit`       | `medium.balanced` |   500,000 |        128 | 256 MB   | 805.3 ms         | 46.3 ms          | 17.4×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 4.99 s           | 113.0 ms         | 44.2×    |
| `fit`       | `large`           | 5,000,000 |        128 | 2.56 GB  | 10.6 s           | 1.04 s           | 10.2×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 22.7M/s 8.6 ms   | 23M/s 8.5 ms     | 1.01×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 248M/s 31.5 ms   | 178M/s 43.9 ms   | 0.72×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 32.6M/s 30.0 ms  | 23.8M/s 41.0 ms  | 0.73×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 4.87M/s 100.2 ms | 3.05M/s 160.3 ms | 0.63×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 41M/s 121.9 ms   | 24.1M/s 207.2 ms | 0.59×    |

### LogisticRegression

#### LogisticRegression results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 29.4 ms          | 6.3 ms           | 4.64×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 683.6 ms         | 18.0 ms          | 38.0×    |
| `fit`       | `medium.balanced` |   500,000 |        128 | 256 MB   | 369.5 ms         | 29.6 ms          | 12.5×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 533.0 ms         | 96.6 ms          | 5.52×    |
| `fit`       | `large`           | 5,000,000 |        128 | 2.56 GB  | 3.32 s           | 266.2 ms         | 12.5×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 39.2M/s 5.0 ms   | 23.2M/s 8.4 ms   | 0.59×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 188M/s 41.6 ms   | 180M/s 43.4 ms   | 0.96×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 31.7M/s 30.8 ms  | 23.8M/s 41.0 ms  | 0.75×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 3.82M/s 127.9 ms | 3.04M/s 160.7 ms | 0.80×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 38.6M/s 129.5 ms | 24.1M/s 207.4 ms | 0.62×    |

### Ridge

#### Ridge results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU             | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|-----------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 27.6 ms         | 7.1 ms           | 3.86×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 106.0 ms        | 18.4 ms          | 5.75×    |
| `fit`       | `medium.balanced` |   500,000 |        128 | 256 MB   | 221.4 ms        | 49.8 ms          | 4.44×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 537.9 ms        | 129.7 ms         | 4.15×    |
| `fit`       | `large`           | 5,000,000 |        128 | 2.56 GB  | 1.54 s          | 490.0 ms         | 3.15×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 35.1M/s 5.6 ms  | 23.6M/s 8.3 ms   | 0.67×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 253M/s 30.9 ms  | 178M/s 43.8 ms   | 0.71×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 34.1M/s 28.7 ms | 23.8M/s 41.1 ms  | 0.70×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 4.93M/s 99.0 ms | 3.04M/s 160.5 ms | 0.62×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 40M/s 125.1 ms  | 24.2M/s 206.7 ms | 0.61×    |

### Clustering and manifold learning

### DBSCAN

#### DBSCAN results for all measured operations and workloads

| Operation     | Workload          |   Rows |   Features | Input    | CPU      | GPU     | Result   |
|---------------|-------------------|--------|------------|----------|----------|---------|----------|
| `fit_predict` | `small.balanced`  |  2,000 |         32 | 0.256 MB | 5.7 ms   | 1.1 ms  | 5.00×    |
| `fit_predict` | `medium.thin`     |  8,000 |          8 | 0.256 MB | 70.5 ms  | 2.0 ms  | 35.1×    |
| `fit_predict` | `medium.balanced` |  8,000 |         32 | 1.02 MB  | 19.5 ms  | 1.9 ms  | 10.3×    |
| `fit_predict` | `medium.wide`     |  8,000 |        256 | 8.19 MB  | 62.4 ms  | 3.1 ms  | 19.9×    |
| `fit_predict` | `large`           | 32,000 |         32 | 4.1 MB   | 168.5 ms | 13.9 ms | 12.2×    |

### HDBSCAN

#### HDBSCAN results for all measured operations and workloads

| Operation     | Workload          |   Rows |   Features | Input    | CPU      | GPU     | Result   |
|---------------|-------------------|--------|------------|----------|----------|---------|----------|
| `fit_predict` | `small.balanced`  |  2,000 |         32 | 0.256 MB | 40.3 ms  | 7.4 ms  | 5.46×    |
| `fit_predict` | `medium.thin`     |  8,000 |          8 | 0.256 MB | 105.0 ms | 10.2 ms | 10.3×    |
| `fit_predict` | `medium.balanced` |  8,000 |         32 | 1.02 MB  | 211.2 ms | 10.6 ms | 19.9×    |
| `fit_predict` | `medium.wide`     |  8,000 |        256 | 8.19 MB  | 4.76 s   | 14.7 ms | 325×     |
| `fit_predict` | `large`           | 32,000 |         32 | 4.1 MB   | 1.09 s   | 34.3 ms | 31.7×    |

### KMeans

#### KMeans results for all measured operations and workloads

| Operation     | Workload          |      Rows |   Features | Input    | CPU             | GPU              | Result   |
|---------------|-------------------|-----------|------------|----------|-----------------|------------------|----------|
| `fit_predict` | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 66.5 ms         | 24.1 ms          | 2.77×    |
| `fit_predict` | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 492.9 ms        | 81.8 ms          | 6.02×    |
| `fit_predict` | `medium.balanced` |   500,000 |        128 | 256 MB   | 526.2 ms        | 143.4 ms         | 3.67×    |
| `fit_predict` | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 6.8 s           | 477.5 ms         | 14.2×    |
| `fit_predict` | `large`           | 5,000,000 |        128 | 2.56 GB  | 13.5 s          | 1.3 s            | 10.4×    |
| `predict`     | `small.balanced`  |   195,313 |        128 | 100 MB   | 36.1M/s 5.4 ms  | 21.4M/s 9.1 ms   | 0.59×    |
| `predict`     | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 107M/s 72.7 ms  | 150M/s 51.9 ms   | 1.40×    |
| `predict`     | `medium.balanced` |   976,563 |        128 | 500 MB   | 32.9M/s 29.7 ms | 22.9M/s 42.6 ms  | 0.70×    |
| `predict`     | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 5.76M/s 84.8 ms | 3M/s 162.5 ms    | 0.52×    |
| `predict`     | `large`           | 5,000,000 |        128 | 2.56 GB  | 37M/s 135.3 ms  | 23.4M/s 213.8 ms | 0.63×    |

### t-SNE

#### t-SNE results for all measured operations and workloads

| Operation       | Workload          |   Rows |   Features | Input    | CPU    | GPU      | Result   |
|-----------------|-------------------|--------|------------|----------|--------|----------|----------|
| `fit_transform` | `small.balanced`  |  2,000 |         64 | 0.512 MB | 1.62 s | 397.6 ms | 4.07×    |
| `fit_transform` | `medium.thin`     | 10,000 |          8 | 0.32 MB  | 8.88 s | 468.1 ms | 19.0×    |
| `fit_transform` | `medium.balanced` | 10,000 |         64 | 2.56 MB  | 8.71 s | 581.8 ms | 15.0×    |
| `fit_transform` | `medium.wide`     | 10,000 |        512 | 20.5 MB  | 9.26 s | 614.1 ms | 15.1×    |
| `fit_transform` | `large`           | 50,000 |         64 | 12.8 MB  | 44.2 s | 904.7 ms | 48.9×    |

### UMAP

#### UMAP results for all measured operations and workloads

| Operation       | Workload          |       Rows |   Features | Input    | CPU               | GPU              | Result   |
|-----------------|-------------------|------------|------------|----------|-------------------|------------------|----------|
| `fit_transform` | `small.balanced`  |      2,000 |         64 | 0.512 MB | 2.43 s            | 112.2 ms         | 21.7×    |
| `fit_transform` | `medium.thin`     |     10,000 |          8 | 0.32 MB  | 5.27 s            | 108.8 ms         | 48.4×    |
| `fit_transform` | `medium.balanced` |     10,000 |         64 | 2.56 MB  | 5.88 s            | 264.8 ms         | 22.2×    |
| `fit_transform` | `medium.wide`     |     10,000 |        512 | 20.5 MB  | 6.29 s            | 325.4 ms         | 19.3×    |
| `fit_transform` | `large`           |     50,000 |         64 | 12.8 MB  | 13.4 s            | 252.0 ms         | 53.0×    |
| `transform`     | `small.balanced`  |    390,625 |         64 | 100 MB   | Timeout at 70 s   | 2.97M/s 131.3 ms | ≥529×    |
| `transform`     | `medium.thin`     | 15,625,000 |          8 | 500 MB   | Timeout at 100 s  | 8.76M/s 1.78 s   | ≥57.0×   |
| `transform`     | `medium.balanced` |  1,953,125 |         64 | 500 MB   | Timeout at 100 s  | 2.64M/s 739.3 ms | ≥138×    |
| `transform`     | `medium.wide`     |    244,141 |        512 | 500 MB   | Timeout at 100 s  | 369k/s 661.1 ms  | ≥154×    |
| `transform`     | `large`           |  7,812,500 |         64 | 2 GB     | Timeout at 14 min | 1.47M/s 5.32 s   | ≥160×    |

### Neighbors and density estimation

### KNeighborsClassifier

#### KNeighborsClassifier results for all measured operations and workloads

| Operation   | Workload          |   Rows |   Features | Input    | CPU              | GPU             | Result   |
|-------------|-------------------|--------|------------|----------|------------------|-----------------|----------|
| `predict`   | `small.balanced`  |  2,000 |        128 | 1.02 MB  | 146k/s 13.7 ms   | 2.09M/s 0.96 ms | 14.3×    |
| `predict`   | `medium.thin`     |  8,000 |         16 | 0.512 MB | 310k/s 25.8 ms   | 8.35M/s 0.96 ms | 26.9×    |
| `predict`   | `medium.balanced` |  8,000 |        128 | 4.1 MB   | 177k/s 45.1 ms   | 3.64M/s 2.2 ms  | 20.5×    |
| `predict`   | `medium.wide`     |  8,000 |      1,024 | 32.8 MB  | 32.7k/s 244.5 ms | 707k/s 11.3 ms  | 21.6×    |
| `predict`   | `large`           | 32,000 |        128 | 16.4 MB  | 82.2k/s 389.5 ms | 1.8M/s 17.8 ms  | 21.9×    |

### KNeighborsRegressor

#### KNeighborsRegressor results for all measured operations and workloads

| Operation   | Workload          |   Rows |   Features | Input    | CPU              | GPU             | Result   |
|-------------|-------------------|--------|------------|----------|------------------|-----------------|----------|
| `predict`   | `small.balanced`  |  2,000 |        128 | 1.02 MB  | 149k/s 13.4 ms   | 2.74M/s 0.73 ms | 18.4×    |
| `predict`   | `medium.thin`     |  8,000 |         16 | 0.512 MB | 226k/s 35.4 ms   | 12.2M/s 0.66 ms | 54.0×    |
| `predict`   | `medium.balanced` |  8,000 |        128 | 4.1 MB   | 187k/s 42.8 ms   | 4.13M/s 1.9 ms  | 22.1×    |
| `predict`   | `medium.wide`     |  8,000 |      1,024 | 32.8 MB  | 34k/s 235.6 ms   | 730k/s 11.0 ms  | 21.5×    |
| `predict`   | `large`           | 32,000 |        128 | 16.4 MB  | 89.6k/s 357.2 ms | 1.88M/s 17.0 ms | 21.0×    |

### KernelDensity

#### KernelDensity results for all measured operations and workloads

| Operation       | Workload          |   Rows |   Features | Input    | CPU              | GPU             | Result   |
|-----------------|-------------------|--------|------------|----------|------------------|-----------------|----------|
| `score_samples` | `small.balanced`  |  2,000 |        128 | 1.02 MB  | 3.29k/s 608.7 ms | 1.97M/s 1.0 ms  | 599×     |
| `score_samples` | `medium.thin`     |  8,000 |         16 | 0.512 MB | 3.1k/s 2.58 s    | 13.5M/s 0.59 ms | 4372×    |
| `score_samples` | `medium.balanced` |  8,000 |        128 | 4.1 MB   | 831/s 9.62 s     | 4.11M/s 1.9 ms  | 4942×    |
| `score_samples` | `medium.wide`     |  8,000 |      1,024 | 32.8 MB  | Timeout at 100 s | 741k/s 10.8 ms  | ≥9426×   |
| `score_samples` | `large`           | 32,000 |        128 | 16.4 MB  | 168/s 190 s      | 2.18M/s 14.7 ms | 12969×   |

### NearestNeighbors

#### NearestNeighbors results for all measured operations and workloads

| Operation    | Workload          |   Rows |   Features | Input    | CPU              | GPU             | Result   |
|--------------|-------------------|--------|------------|----------|------------------|-----------------|----------|
| `kneighbors` | `small.balanced`  |  2,000 |        128 | 1.02 MB  | 135k/s 14.9 ms   | 2.98M/s 0.67 ms | 22.2×    |
| `kneighbors` | `medium.thin`     |  8,000 |         16 | 0.512 MB | 282k/s 28.4 ms   | 12M/s 0.67 ms   | 42.4×    |
| `kneighbors` | `medium.balanced` |  8,000 |        128 | 4.1 MB   | 207k/s 38.6 ms   | 3.72M/s 2.2 ms  | 17.9×    |
| `kneighbors` | `medium.wide`     |  8,000 |      1,024 | 32.8 MB  | 33.2k/s 241.2 ms | 721k/s 11.1 ms  | 21.7×    |
| `kneighbors` | `large`           | 32,000 |        128 | 16.4 MB  | 88k/s 363.7 ms   | 1.85M/s 17.3 ms | 21.0×    |

### Decomposition

### PCA

#### PCA results for all measured operations and workloads

| Operation       | Workload                           |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-----------------|------------------------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit_transform` | `small.balanced · 256 components`  |    10,000 |      1,024 | 41 MB    | 347.9 ms         | 114.6 ms         | 3.04×    |
| `fit_transform` | `medium.thin · 32 components`      |   195,313 |        128 | 100 MB   | 115.6 ms         | 256.0 ms         | 0.45×    |
| `fit_transform` | `medium.balanced · 256 components` |   100,000 |      1,024 | 410 MB   | 2.19 s           | 1.67 s           | 1.31×    |
| `fit_transform` | `medium.wide · 128 components`     |    61,035 |      4,096 | 1,000 MB | 1.42 s           | 2.97 s           | 0.48×    |
| `fit_transform` | `medium.wide · 256 components`     |    61,035 |      4,096 | 1,000 MB | 2.15 s           | 2.91 s           | 0.74×    |
| `fit_transform` | `medium.wide · 512 components`     |    61,035 |      4,096 | 1,000 MB | 3.34 s           | 2.98 s           | 1.12×    |
| `fit_transform` | `medium.wide · 1,024 components`   |    61,035 |      4,096 | 1,000 MB | 8.14 s           | 3.1 s            | 2.62×    |
| `fit_transform` | `large · 256 components`           | 1,000,000 |      1,024 | 4.1 GB   | 16.7 s           | 20 s             | 0.83×    |
| `transform`     | `small.balanced · 256 components`  |    50,000 |      1,024 | 205 MB   | 1.71M/s 29.3 ms  | 173k/s 289.5 ms  | 0.10×    |
| `transform`     | `medium.thin · 32 components`      |   976,563 |        128 | 500 MB   | 14M/s 69.6 ms    | 1.39M/s 700.9 ms | 0.10×    |
| `transform`     | `medium.balanced · 256 components` |   488,281 |      1,024 | 2 GB     | 2.05M/s 237.9 ms | 89.7k/s 5.44 s   | 0.04×    |
| `transform`     | `medium.wide · 1,024 components`   |   122,070 |      4,096 | 2 GB     | 280k/s 436.5 ms  | 23.2k/s 5.27 s   | 0.08×    |
| `transform`     | `large · 256 components`           | 2,441,406 |      1,024 | 10 GB    | 2.49M/s 982.0 ms | 91k/s 26.8 s     | 0.04×    |

PCA performance depends strongly on both input feature width and the number of retained components; results can vary substantially across these dimensions.

### Ensembles

### RandomForestClassifier

#### RandomForestClassifier results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 439.4 ms         | 140.3 ms         | 3.13×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 7.81 s           | 778.6 ms         | 10.0×    |
| `fit`       | `medium.balanced` |   250,000 |        128 | 128 MB   | 2.25 s           | 284.9 ms         | 7.90×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 7.95 s           | 791.2 ms         | 10.0×    |
| `fit`       | `large`           | 1,953,125 |        128 | 1 GB     | 28.6 s           | 1.12 s           | 25.6×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 6.67M/s 29.3 ms  | 15.8M/s 12.4 ms  | 2.37×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 8.79M/s 888.6 ms | 106M/s 74.0 ms   | 12.0×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 6.91M/s 141.3 ms | 16.5M/s 59.3 ms  | 2.38×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 2.36M/s 206.8 ms | 2.13M/s 229.1 ms | 0.90×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 6.21M/s 804.8 ms | 16.8M/s 297.9 ms | 2.70×    |

### RandomForestRegressor

#### RandomForestRegressor results for all measured operations and workloads

| Operation   | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit`       | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 2.95 s           | 716.6 ms         | 4.12×    |
| `fit`       | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 19.8 s           | 1.63 s           | 12.2×    |
| `fit`       | `medium.balanced` |   250,000 |        128 | 128 MB   | 17.7 s           | 1.8 s            | 9.80×    |
| `fit`       | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | Timeout at 100 s | 10.6 s           | ≥9.59×   |
| `fit`       | `large`           | 1,953,125 |        128 | 1 GB     | 208 s            | 7.6 s            | 27.4×    |
| `predict`   | `small.balanced`  |   195,313 |        128 | 100 MB   | 5.07M/s 38.5 ms  | 16.4M/s 11.9 ms  | 3.23×    |
| `predict`   | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 7.15M/s 1.09 s   | 111M/s 70.3 ms   | 15.5×    |
| `predict`   | `medium.balanced` |   976,563 |        128 | 500 MB   | 5.04M/s 193.9 ms | 16.6M/s 58.7 ms  | 3.30×    |
| `predict`   | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 2.17M/s 224.7 ms | 2.13M/s 229.2 ms | 0.98×    |
| `predict`   | `large`           | 5,000,000 |        128 | 2.56 GB  | 3.91M/s 1.28 s   | 17M/s 293.5 ms   | 4.36×    |

### Preprocessing

### StandardScaler

#### StandardScaler results for all measured operations and workloads

| Operation       | Workload          |      Rows |   Features | Input    | CPU              | GPU              | Result   |
|-----------------|-------------------|-----------|------------|----------|------------------|------------------|----------|
| `fit_transform` | `small.balanced`  |    50,000 |        128 | 25.6 MB  | 21.7 ms          | 11.6 ms          | 1.87×    |
| `fit_transform` | `medium.thin`     | 1,562,500 |         16 | 100 MB   | 142.0 ms         | 76.8 ms          | 1.85×    |
| `fit_transform` | `medium.balanced` |   500,000 |        128 | 256 MB   | 218.2 ms         | 101.0 ms         | 2.16×    |
| `fit_transform` | `medium.wide`     |   244,140 |      1,024 | 1,000 MB | 788.0 ms         | 232.5 ms         | 3.39×    |
| `fit_transform` | `large`           | 5,000,000 |        128 | 2.56 GB  | 2.1 s            | 958.2 ms         | 2.20×    |
| `transform`     | `small.balanced`  |   195,313 |        128 | 100 MB   | 8.73M/s 22.4 ms  | 11M/s 17.8 ms    | 1.25×    |
| `transform`     | `medium.thin`     | 7,812,500 |         16 | 500 MB   | 54.6M/s 143.1 ms | 92.8M/s 84.2 ms  | 1.70×    |
| `transform`     | `medium.balanced` |   976,563 |        128 | 500 MB   | 8.67M/s 112.6 ms | 11.6M/s 83.9 ms  | 1.34×    |
| `transform`     | `medium.wide`     |   488,281 |      1,024 | 2 GB     | 1.14M/s 428.8 ms | 1.47M/s 331.6 ms | 1.29×    |
| `transform`     | `large`           | 5,000,000 |        128 | 2.56 GB  | 8.83M/s 566.3 ms | 11.8M/s 423.1 ms | 1.34×    |

### TargetEncoder

#### TargetEncoder results for all measured operations and workloads

| Operation       | Workload          |       Rows |   Features | Input   | CPU            | GPU              | Result   |
|-----------------|-------------------|------------|------------|---------|----------------|------------------|----------|
| `fit_transform` | `small.balanced`  |    195,313 |         32 | 25 MB   | 541.1 ms       | 5.35 s           | 0.10×    |
| `fit_transform` | `medium.thin`     |  3,125,000 |          8 | 100 MB  | 1.76 s         | 1.49 s           | 1.18×    |
| `fit_transform` | `medium.balanced` |    781,250 |         32 | 100 MB  | 2.53 s         | 5.81 s           | 0.43×    |
| `fit_transform` | `medium.wide`     |    250,000 |        128 | 128 MB  | 3.27 s         | 24 s             | 0.14×    |
| `fit_transform` | `large`           |  7,812,500 |         32 | 1 GB    | 25.6 s         | 8.14 s           | 3.15×    |
| `transform`     | `small.balanced`  |    781,250 |         32 | 100 MB  | 679k/s 1.15 s  | 1.15M/s 679.1 ms | 1.70×    |
| `transform`     | `medium.thin`     | 15,625,000 |          8 | 500 MB  | 4.29M/s 3.64 s | 27.5M/s 568.2 ms | 6.41×    |
| `transform`     | `medium.balanced` |  3,906,250 |         32 | 500 MB  | 673k/s 5.81 s  | 2.23M/s 1.75 s   | 3.31×    |
| `transform`     | `medium.wide`     |    976,563 |        128 | 500 MB  | 158k/s 6.2 s   | 130k/s 7.52 s    | 0.82×    |
| `transform`     | `large`           | 15,625,000 |         32 | 2 GB    | 662k/s 23.6 s  | 2.69M/s 5.82 s   | 4.06×    |

### Kernel methods

### SVC

#### SVC results for all measured operations and workloads

| Operation   | Workload          |   Rows |   Features | Input    | CPU              | GPU             | Result   |
|-------------|-------------------|--------|------------|----------|------------------|-----------------|----------|
| `fit`       | `small.balanced`  |  2,000 |         64 | 0.512 MB | 46.4 ms          | 19.6 ms         | 2.37×    |
| `fit`       | `medium.thin`     |  8,000 |          8 | 0.256 MB | 145.4 ms         | 21.6 ms         | 6.75×    |
| `fit`       | `medium.balanced` |  8,000 |         64 | 2.05 MB  | 502.6 ms         | 32.0 ms         | 15.7×    |
| `fit`       | `medium.wide`     |  8,000 |        512 | 16.4 MB  | 3.42 s           | 60.5 ms         | 56.6×    |
| `fit`       | `large`           | 32,000 |         64 | 8.19 MB  | 8.59 s           | 76.8 ms         | 112×     |
| `predict`   | `small.balanced`  |  2,000 |         64 | 0.512 MB | 26.8k/s 74.6 ms  | 2.33M/s 0.86 ms | 87.0×    |
| `predict`   | `medium.thin`     |  8,000 |          8 | 0.256 MB | 32.6k/s 245.2 ms | 6.12M/s 1.3 ms  | 188×     |
| `predict`   | `medium.balanced` |  8,000 |         64 | 2.05 MB  | 10.7k/s 750.6 ms | 2.86M/s 2.8 ms  | 268×     |
| `predict`   | `medium.wide`     |  8,000 |        512 | 16.4 MB  | 1.26k/s 6.36 s   | 425k/s 18.8 ms  | 338×     |
| `predict`   | `large`           | 32,000 |         64 | 8.19 MB  | 3.97k/s 8.06 s   | 1.59M/s 20.2 ms | 399×     |

## What determines GPU speedup

`cuml.accel` benefits when each estimator call has enough parallel work
to outweigh dispatch and compatibility overhead. Training and
compute-intensive operations usually accelerate more than short
prediction or transformation calls in practice.

Performance depends on feature width, operation, and estimator parameters,
not just total workload size. Similar-sized datasets can produce different
speedups when shapes or configurations differ. We selected workloads to
illustrate these differences.

`cuml.accel` typically ingests and returns NumPy arrays, converting data
for GPU execution and scikit-learn compatibility. Native cuML can reduce
this overhead with GPU-resident arrays, especially when pipelines perform
repeated estimator operations.

## Methodology and reproducibility

These benchmarks compare the corresponding CPU implementations with
`cuml.accel` on NVIDIA RTX Pro 6000 across five relative workload categories.
CPU measurements use the corresponding scikit-learn estimators, except for
UMAP, which uses `umap.UMAP` from `umap-learn`, and HDBSCAN, which uses
`hdbscan.HDBSCAN` from `hdbscan`. Each isolated case used one warmup, the
median of three measured repetitions, operation-appropriate correctness
validation, and a complete-case timeout.

### Test system, validation, and timing policy

**System.** NVIDIA RTX PRO 6000 Blackwell Workstation Edition (102.0 GB), AMD Ryzen Threadripper PRO 7975WX 32-Cores, and
134.1 GB of system memory.

**Timing.** One warmup followed by three measured repetitions; tables use
the median end-to-end wall time. Speedup is CPU median wall time divided by
accelerated median wall time. For `predict`, `transform`,
`score_samples`, and `kneighbors`, throughput is input rows divided by
the same median wall time, with one row counted as one sample.

**Scale and timeout policy.** Algorithm-family-calibrated small, medium, and
large shapes. Each backend ran every case in a separate worker with a
wall-clock limit. The limit covered process startup, data
preparation, estimator setup, one warmup, three measured repetitions, and
correctness validation.

**Execution and correctness.** Successful accelerated measurements were
instrumented to verify GPU-only execution. The benchmark runner applied
each case’s operation-appropriate parity check. A timeout means validation
could not complete.

**Packages.** `cuml 26.10.0a69`, `hdbscan 0.8.44`, `scikit-learn 1.9.0`, `umap-learn 0.5.12`.

**Interpretation.** These measurements describe the tested cases on this
system; results for other workloads and systems will vary.

## Continue with cuml.accel

Installation and zero-code-change usage.

Supported estimators and parameter behavior.

Find GPU execution and fallback behavior.
