Three Goals:
- Expand and clarify options for selecting VTK-m and other execution strategies.
- Improve about() and info() to make sure they show
- In addition to forcing a specific strategy, Add a way to specify a precedence list
Naming of "backend" or execution strategies
At a high level, we have three cases:
If you expand this out to include the underlying programing model, we expect to have:
cuda
hip
sycl
openmp
serial
If we enumerate the VTK-m specific options:
vtkm_cuda
vtkm_kokkos_hip
vtkm_kokkos_cuda
vtkm_kokkos_sycl?
vtkm_openmp
vtkm_serial
(vtkm_cuda and kokkos_cuda are different implementations, and users may have a strong reason to choose one or the other)
I propose we support an option that accepts a union of these cases:
device
cuda
hip
sycl
vtkm_cuda
vtkm_kokkos_hip
vtkm_kokkos_cuda
vtkm_kokkos_sycl?
vtkm_openmp
vtkm_serial
openmp
serial
Where device gives you general option that maps to either cuda | hip | sycl with some precedence in the rare case more than one exists.
Additionally, we should support an input list that selects what should be tried and the precedence:
Examples:
execution: ["device","openmp","serial"]
Would try to use a device runtime (cuda or hip or sycl) first, then openmp, then serial
execution: ["cuda","openmp","serial"]
Would try to use cuda first, then openmp, then serial
execution: ["cuda","openmp"]
Would try to use cuda first, then openmp and would not try any others
execution: ["device"] or execution: "device"
Would only try to use a device runtime (cuda or hip or sycl) and no others.
Three Goals:
Naming of "backend" or execution strategies
At a high level, we have three cases:
If you expand this out to include the underlying programing model, we expect to have:
If we enumerate the VTK-m specific options:
(
vtkm_cudaandkokkos_cudaare different implementations, and users may have a strong reason to choose one or the other)I propose we support an option that accepts a union of these cases:
Where
devicegives you general option that maps to eithercuda | hip | syclwith some precedence in the rare case more than one exists.Additionally, we should support an input list that selects what should be tried and the precedence:
Examples:
Would try to use a device runtime (
cudaorhiporsycl) first, thenopenmp, thenserialWould try to use
cudafirst, thenopenmp, thenserialWould try to use
cudafirst, thenopenmpand would not try any othersWould only try to use a device runtime (
cudaorhiporsycl) and no others.