Skip to content

(GPU Testing Part 4) New GPU test utilities and example.

This introduces three new functions:

// returns kernel(args...) running on the CPU.
Eigen::run_on_cpu(Kernel kernel, Args&&... args);
    
// returns kernel(args...) running on the GPU.
Eigen::run_on_gpu(Kernel kernel, Args&&... args);
Eigen::run_on_gpu_with_hint(size_t buffer_capacity_hint, Kernel kernel, Args&&... args);
    
// returns kernel(args...) running on the GPU if using
//   a GPU compiler, or CPU otherwise.
Eigen::run(Kernel kernel, Args&&... args);
Eigen::run_with_hint(size_t buffer_capacity_hint, Kernel kernel, Args&&... args);

Running on the GPU is accomplished by:

  • Serializing the kernel inputs on the CPU
  • Transferring the inputs to the GPU
  • Passing the kernel and serialized inputs to a GPU kernel
  • Deserializing the inputs on the GPU
  • Running kernel(inputs...) on the GPU
  • Serializing all output parameters and the return value
  • Transferring the serialized outputs back to the CPU
  • Deserializing the outputs and return value on the CPU
  • Returning the deserialized return value

All inputs must be serializable (currently POD types, Eigen::Matrix and Eigen::Array). The kernel must also be POD (though usually contains no actual data).

Tested on CUDA 9.1, 10.2, 11.3, with g++-6, g++-8, g++-10 respectively.

This MR depends on !622 (merged), !623 (merged), !624 (merged).

Edited by Antonio Sánchez

Merge request reports

Loading