OpenCL accelerated volume processing
Project description
gputools - OpenCL accelerated volume processing in Python
GPU accelerated 2D/3D image processing, e.g. for microscopy, via OpenCL (i.e. works on both NVIDIA and non-NVIDIA devices).
- convolutions
- denoising
- synthetic noise
- ffts (simple wrapper around reikna)
- affine transforms
Built on the excellent pyopencl bindings.
Some examples of processing tasks and their respective runtime (tests/benchmark/benchmark.py):
| Task | Image Size/type | CPU[1] | GPU[2] | GPU (w/o transfer) |
|---|---|---|---|---|
| Mean filter 7x7x7 | (128, 1024, 1024) uint8 | 1708 ms | 22 ms | 5 ms |
| Median filter 3x3x3 | (128, 1024, 1024) uint8 | 37591 ms | 49 ms | 31 ms |
| Gaussian filter 5x5x5 | (128, 1024, 1024) float32 | 4536 ms | 86 ms | 19 ms |
| Zoom/Scale 2x2x2 | (128, 1024, 1024) uint8 | 18433 ms | 133 ms | - |
| NLM denoising | (64, 256, 256) float32 | 21109 ms | 105 ms | - |
| FFT (pow2) | (128, 1024, 1024) complex64 | 3418 ms | 156 ms | 21 ms |
[1] AMD Ryzen Threadripper PRO 9965WX
[2] NVIDIA GeForce RTX 5090
Requirements
- Python 3.9+
- a working OpenCL environment (check with
clinfo).
Installation
pip install gputools
Or the development version:
pip install git+https://github.com/maweigert/gputools
Check if basic stuff is working:
python -m gputools
Troubleshooting
If you experience installation issues, this might be due to pyopencl not
being properly installed. The easiest way to get a working pyopencl is via conda:
conda install -c conda-forge pyopencl
Usage
Docs are still to be done ;)
Most of the methods work on both numpy arrays or GPU memory objects (gputools.OCLArrays/OCLImage). The latter saving the memory transfer (which e.g. for simple convolutions accounts for the main run time)
Convolutions
- 2D-3D convolutions
- separable convolutions
- fft based convolution
- spatially varying convolutions
import gputools
d = np.zeros((128,128), np.float32)
d[64,64] = 1.
h = np.ones((17,17))
res = gputools.convolve(d,h)
d = np.zeros((128,128,128), np.float32)
d[64,64,64] = 1.
hx,hy,hz = np.ones(7),np.ones(9),np.ones(11)
res = gputools.convolve_sep3(d,hx,hy,hz)
Denoising
bilateral filter, non local means
...
d = np.zeros((128,128,128), np.float32)
d[50:78,50:78,50:78:2] = 4.
d = d+np.random.normal(0,1,d.shape)
res_nlm = gputools.denoise.nlm3(d,2.,2,3)
res_bilat = gputools.denoise.bilateral3(d,3,4.)
Perlin noise
fast 2d and 3d perlin noise calculations
gputools.perlin3(size = (256,256,256), scale = (10.,10.,10.))
Transforms
scaling, translate, rotate, affine...
gputools.transforms.scale(d,.2)
gputools.transforms.rotate(d,axis = (64,64,64),angle = .3)
gputools.transforms.shift(d,(10,20,30))
...
fft
wraps around reikna
gputools.fft(d)
gputools.fft(d, inverse = True)
Configuration
Some configuration data (e.g. the default OpenCL platform and devic) can be changed in the config file "~/.gputools" (create it if necessary)
#~/.gputools
id_platform = 0
id_device = 1
See
gputools.config.defaults
for available keys and their defaults.
Alternatively, the used OpenCL Device can be set via the environment variables gputools_id_device, gputools_id_platform, and gputools_use_gpu (variables present in the config file will take precendence, however).
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 gputools-0.3.1.tar.gz.
File metadata
- Download URL: gputools-0.3.1.tar.gz
- Upload date:
- Size: 89.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc01a320dbecb022bddf75749467b61ff5bf7abeef50b93de2e06ccd84fe2c02
|
|
| MD5 |
3b826f4918e853e73c87a4a626514f9a
|
|
| BLAKE2b-256 |
4d76a10eb303f8a35fe2a117e260a5d129279f0d18e6fd3eb759500b41b26994
|
File details
Details for the file gputools-0.3.1-py3-none-any.whl.
File metadata
- Download URL: gputools-0.3.1-py3-none-any.whl
- Upload date:
- Size: 117.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
030534191cf6ed8c012403edf1702f797696f0a4b067d8bb19358d8fd2385a8d
|
|
| MD5 |
8f4363cc01dbaf20e9a817c7fad38add
|
|
| BLAKE2b-256 |
2cd2d7e5db97007b741ab9207ae953f93be3968ee7cf9acd61e033728c821a22
|