Clean up kernel compilation

This MR reorganizes kernels and is a long-overdue cleanup. The changes are all internal:

  • Kernels are now allowed to specify dependencies on utility functions as part of the kernel_id struct. So e.g. oneway_kernel_id::get_deps()[num] returns a std::vector<std::string>& of dependencies of the kernel num. These dependencies are found in the kernels/deps/ directory for each backend. They are primarily reduces.

  • Type-specific functions (e.g. coot_absdiff() and others) that are used in kernels are now stored in the kernels/defs/ directory and are included when the kernel requires it. So, e.g., the twoway equ_array_abs_pre kernel with types float and u16 will have f_defs.cu (or f_defs.cl) and u16_defs.cu (or u16_defs.cl) included during kernel compilation.

  • Macros defined during kernel compilation are cleaned up.

  • The kernel_src.hpp file for both the CUDA and OpenCL backends is now cleaned up significantly.

Merge request reports

Loading