Skip to content

Full-field pipeline without needing GPU

Pierre Paleo requested to merge cpu_pipeline into master

This MR is a first step toward a pipeline that does not need GPU at all.

With the current implementation (CudaFullFieldPipeline inheriting from FullFieldPipeline), it is theoretically possible to run a reconstruction without needing Cuda. However:

  • Some steps are still very slow with the numpy backend
  • Reconstructors require cuda in the current state - it should not be!
  • Imports can be sometimes overlooked (crash if cuda is not present in some situations)

This MR focuses on simple solutions (numpy + multithread). OpenCL will be considered later.

To do

  • List the performance bottleneck steps on CPU --> See below
  • FFTW support for CTFPhaseRetrieval
    • Unit test
    • Integration in pipeline
  • Multi-thread support for Histogram
  • Multi-thread support for binning
  • Multi-thread support for Unsharp will be done later
  • Multi-thread support for Log will be done later
  • Pipeline: ensure nabu nabu.conf works even without Cuda installed
  • End-to-end tests, measure the speed of CPU-only pipeline

Bonus:

  • Update CTFPhaseRetrieval so that API follows the design decisions
  • Update test_ctf
  • End-to-end CTF test
  • Update documentation for CTF and get_num_threads behavior
  • Refactor Reconstructors - close #260 (closed)

Close #230 (closed), #261 (closed)

Notes

  • When referring to "CPU-only pipeline", the "backend" terminology should be used to avoid confusion. "CPU-numpy", "CPU-opencl", "GPU-cuda", "GPU-opencl", ...
  • Some steps might still be very slow even with numpy + multi-thread: histogram, backprojection. Only a dedicated implementation (C++/OpenCL) can bring reasonable performances for these.
Edited by Pierre Paleo

Merge request reports