---
{"title": "Bottleneck vs CuPy in 2026: Pricing, Setup and Features", "description": "Bottleneck, CuPy and PyOverdrive compared on what each does, licence and price, install steps and what to check before you pick a NumPy speed-up tool.", "url": "https://saydeploy.com/bottleneck-vs-cupy/", "date": "2026-10-10"}
---
Bottleneck, CuPy and PyOverdrive compared on what each does, licence and price, install steps and what to check before you pick a NumPy speed-up tool.

Bottleneck is a collection of fast NumPy array functions written in C [^1]. CuPy is an open-source array library for GPU-accelerated computing with Python [^2]. PyOverdrive is a third option that patches supported NumPy functions with one call [^3].

| Option | Licence | Price | Install | Platforms |
|---|---|---|---|---|
| Bottleneck | Simplified BSD license [^1] | not published | Binary wheels on PyPI [^1]; source install needs Python >3.9 and NumPy 1.16.0+ [^1] | Most common platforms [^1] |
| CuPy | Open source, licence name not published [^2] | not published | Wheels [^2] | Linux and Windows [^2] |
| PyOverdrive | MIT License [^3] | not published | pip from the GitHub repository [^3]; Python 3.12 or newer [^3] | OS independent; tested on Windows and Linux x86-64 [^3] |

## The short answer

Bottleneck gives a developer a set of NumPy array functions written in C [^1]. CuPy gives a developer an array library for Python that runs on a GPU [^2]. PyOverdrive lets a developer call one function so that existing NumPy code uses faster paths where it supports them [^3].

On needs, Bottleneck's page says it accelerates arrays of int32, int64, float32 and float64 [^1]. CuPy's page says it is in most cases usable as a drop-in replacement for NumPy and SciPy [^2], and that it speeds up some operations more than 100X [^2]. PyOverdrive's claims cover threaded paths for common math functions on large arrays [^3] and a self check that compares each fast path with stock NumPy on your machine [^3].

## What Bottleneck, CuPy is built for

**Bottleneck.** Its page calls it a collection of fast NumPy array functions written in C [^1]. Only arrays with dtype int32, int64, float32 and float64 are accelerated, and other dtypes use slower unaccelerated functions [^1]. It comes with a benchmark suite [^1]. It is distributed under a Simplified BSD license [^1].

**CuPy.** Its page calls it an open-source array library for GPU-accelerated computing with Python [^2]. It says that in most cases it can be used as a drop-in replacement for NumPy and SciPy [^2]. The page also says CuPy speeds up some operations more than 100X [^2]. It provides wheels, which are precompiled binary packages, for Linux and Windows [^2].

The sources given here say no more about either tool, so this page does not guess at other features.

## What PyOverdrive is built for

PyOverdrive is made by the team that publishes this site.

Calling pyoverdrive.enable() patches supported NumPy functions so your existing code uses faster paths, and calls it does not support run on stock NumPy [^3]. A fast path runs only when a check confirms the input is in its measured range, and anything else goes to stock NumPy [^3].

Threaded paths for np.sin, cos, tan, exp, log, log10 and tanh on C-contiguous float64 and float32 arrays run above a size floor calibrated per op and dtype, from 3e5 to 3e6 elements [^3]. Large np.einsum calls go through NumPy's own optimize=True planner once they pass a measured size threshold [^3]. np.isin on 1-D StringDType or object arrays can use hash-set membership [^3].

You can ask pyoverdrive.explain() which path a call would take and why, without running the call [^3]. You can turn off one fast path with disable_path() or PYOVERDRIVE_DISABLE, or call pyoverdrive.disable() to restore the original NumPy functions [^3].

## Pricing and fees

Bottleneck is distributed under a Simplified BSD license [^1]. Its sources here do not state a price, so a price is not published here.

CuPy is described as open source [^2]. Its sources here do not state a price or a licence name, so those are not published here.

PyOverdrive is open source under the MIT License [^3]. No price is stated in its claims, so a price is not published here. Its version is 1.0.0 and its status is Beta [^3].

None of the three sources lists a paid plan, a card fee or a separate service fee. Check each project's own pages for any costs outside the software, such as hardware, since the facts here do not cover them.

## Setting it up and daily use

Bottleneck provides binary wheels on PyPI for all the most common platforms [^1]. A source install requires Python above 3.9 and NumPy 1.16.0 or newer [^1]. For daily use, its page says it comes with a benchmark suite [^1]. The sources here say nothing more about routine use.

CuPy provides wheels for Linux and Windows [^2]. Its page says it can in most cases be used as a drop-in replacement for NumPy and SciPy [^2]. The sources here say nothing more about setup or routine use.

PyOverdrive is installed with pip straight from the GitHub repository [^3]. It needs Python 3.12 or newer [^3]. The package is marked OS independent, and the test suite has been run on Windows and on Linux x86-64 [^3].

Daily, you call pyoverdrive.enable() once [^3]. python -m pyoverdrive --demo times the headline operations with stock NumPy and with PyOverdrive on your machine, in about 20 seconds [^3]. python -m pyoverdrive --calibrate re-times the threaded paths on your CPU and switches off any that do not pay there [^3].

## Things to check before you choose

Check your data types. Bottleneck's page lists int32, int64, float32 and float64 as the accelerated dtypes [^1]. PyOverdrive's threaded paths name float64 and float32 arrays [^3].

Check your hardware. CuPy's page describes an array library for GPU-accelerated computing [^2], so ask whether your machine has a GPU CuPy can use. The facts here do not say which GPUs it supports.

Check your Python version. Bottleneck's source install lists Python above 3.9 [^1], and PyOverdrive needs Python 3.12 or newer [^3].

Check your operating system. CuPy provides wheels for Linux and Windows [^2].

Check maturity. PyOverdrive's status is Beta [^3]. Check the status of the others on their own pages.

Check results on your own data. PyOverdrive offers a self check against stock NumPy [^3]. Ask how you would verify the others.

## How to choose

If you want fast NumPy array functions written in C, Bottleneck's page describes that [^1].

If you want a built-in benchmark suite, Bottleneck's page says it comes with one [^1].

If you want an array library for GPU-accelerated computing that in most cases can be used as a drop-in replacement for NumPy and SciPy, CuPy's page describes that [^2].

If you want one call that patches supported NumPy functions, with unsupported calls running on stock NumPy, PyOverdrive's claims describe that [^3].

If you want to see which path a call would take before running it, PyOverdrive's claims describe pyoverdrive.explain() [^3].

If you want to turn a fast path off or restore the original NumPy functions, PyOverdrive's claims describe that [^3].

## Frequently asked questions

### Is Bottleneck free to use?

Bottleneck is distributed under a Simplified BSD license [^1]. The facts here do not state a price or any paid plan, so a price is not published here. Check the project's own pages if you need to confirm costs, support terms or anything beyond the licence.

### Is CuPy free and open source?

CuPy's page calls it an open-source array library for GPU-accelerated computing with Python [^2]. The facts here give no price and no licence name, so those are not published here. Check CuPy's own pages for licence terms and for any costs tied to the hardware you would run it on.

### How do you install Bottleneck, CuPy and PyOverdrive?

Bottleneck provides binary wheels on PyPI for the most common platforms [^1]. CuPy provides wheels for Linux and Windows [^2]. PyOverdrive is installed with pip straight from the GitHub repository [^3] and needs Python 3.12 or newer [^3].

### Is CuPy a drop-in replacement for NumPy?

CuPy's page says that in most cases it can be used as a drop-in replacement for NumPy and SciPy [^2]. The words in most cases matter, so check the functions your code uses. PyOverdrive instead patches supported NumPy functions, and unsupported calls run on stock NumPy [^3].

### Which dtypes does Bottleneck accelerate?

Bottleneck's page says only arrays with dtype int32, int64, float32 and float64 are accelerated, and other dtypes use slower unaccelerated functions [^1]. PyOverdrive's threaded paths for functions such as np.sin and np.exp name C-contiguous float64 and float32 arrays [^3].

It is open source under the MIT License. [^3] - [Visit PyOverdrive](/go/bottleneck-vs-cupy)

## Sources

[^1]: Bottleneck, github.com/pydata/bottleneck, read 2026-10-07 (https://github.com/pydata/bottleneck)
[^2]: CuPy, cupy.dev, read 2026-10-07 (https://cupy.dev)
[^3]: PyOverdrive's own description of itself (the product of this site's publisher) (/go/bottleneck-vs-cupy)
