Skip to content

execution backend selection improvements #1273

@cyrush

Description

@cyrush

Three Goals:

  1. Expand and clarify options for selecting VTK-m and other execution strategies.
  2. Improve about() and info() to make sure they show
  3. 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:

device
openmp
serial

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.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions