Repository navigation
Version 4.0.0 Release
This is a major release that modernizes tsne-cuda for current datacenter GPUs, dramatically improves performance, and streamlines the build for packaging.
Modern GPU & CUDA support
- Optimized architecture support for A100 (sm_80), H100/H200 (sm_90), and B200 (sm_100), plus GB202/RTX 50-series (sm_120), with an embedded PTX fallback for forward compatibility
- Builds under CUDA 11.x, 12.x, and 13.x (the old code emitted removed architectures under CUDA 13)
- Honors an externally supplied
CMAKE_CUDA_ARCHITECTURES(e.g. via conda-forgeCMAKE_ARGS) - Bumped to C++17, as required by modern FAISS
Performance (~6x faster on MNIST)
- Full MNIST (60k points, 1000 iterations) drops from 53s to 8.4s on an A100-SXM4-80GB, with unchanged embedding quality, by eliminating redundant per-iteration host<->device synchronization
- Skips the per-iteration gradient-norm reduction when it is not used (the default), clears buffers with
cudaMemsetAsync, and builds the KNN index on a single GPU instead of sharding across all visible GPUs - New
TSNE_SYNC_KERNELS=1environment variable (or-DTSNE_FORCE_SYNC) restores synchronous mode for debugging and accurate per-phase timing - Kernel launch parameters are now tunable per-architecture (see
cmake/benchmarks/tune_kernels.py)
Streamlined build (breaking changes)
- Removed the vestigial
gflags,gtest, and CPUBLAS/LAPACKdependencies - Removed the standalone C++ CLI (and its
cxxoptssubmodule) and the ZMQ interactive-visualization path -- the Python module is the supported entry point - Together these substantially simplify packaging (see the conda-forge feedstock)
Note: This is a breaking release (major version bump) because the C++ CLI and the ZMQ interactive-visualization feature have been removed. The Python API is unchanged.
Prebuilt wheels
Wheels are attached below, one per CUDA runtime. They are py3-none-any — a single wheel works on any Python 3.x (the library is loaded via ctypes, so it has no Python-ABI dependency). Install the one matching your CUDA toolkit; you also need a GPU build of FAISS available at runtime (e.g. conda install -c conda-forge libfaiss).
| wheel | CUDA | GPUs |
|---|---|---|
tsnecuda-4.0.0+cu118 |
11.8 | A100, H100/H200 |
tsnecuda-4.0.0+cu124 |
12.4 | A100, H100/H200 |
tsnecuda-4.0.0+cu126 |
12.6 | A100, H100/H200 |
tsnecuda-4.0.0+cu129 |
12.9 | A100, H100/H200, B200 |
tsnecuda-4.0.0+cu130 |
13.0 | A100, H100/H200, B200 |
pip install https://github.com/CannyLab/tsne-cuda/releases/download/4.0.0/tsnecuda-4.0.0+cu129-py3-none-any.whlEach wheel was validated by running MNIST (60k points, 1000 iterations) end-to-end on an A100 (~6–8 s, kNN digit-label accuracy ≈ 0.955). The CUDA 13 wheel additionally required a small Thrust/cuFFT compatibility fix (#142) that is not in the tagged 4.0.0 source.