kokkos portable programming
**Kokkos Performance Portability: C++ Abstraction Layer — enabling single-source code across CUDA, OpenMP, HIP, SYCL backends**
Kokkos is a C++ performance portability framework from Sandia National Laboratories. It abstracts parallelism, memory, and synchronization, enabling code to port across GPUs (CUDA, HIP, SYCL, Intel GPU) and CPUs (OpenMP, Pthreads) via compile-time backend selection.
**Execution Spaces and Memory Spaces**
Execution spaces define where computation occurs (Cuda, OpenMP, Serial, SYCL, HIP, RAJA). Memory spaces define data location (CudaSpace, HostSpace, HBMSpace). Execution policy specifies execution space, work item type (thread/block), and tiling. MDRangePolicy enables 2D/3D parallelism with independent loop bounds; hierarchical policies expose thread teams for multi-level parallelism.
**Kokkos::View Multidimensional Arrays**
Kokkos::View abstracts multidimensional array layouts, memory spaces, and access patterns. Template parameters specify: data type, layout (LayoutLeft/LayoutRight—column/row-major), memory space, access permissions. Layout abstraction enables automatic performance tuning: LayoutLeft suits CUDA (coalesced access), LayoutRight suits CPUs (cache-friendly). Subview creates array slices without copy. Atomicity and reductions are encapsulated.
**Thread Teams and Hierarchical Parallelism**
Team-based policies expose two-level parallelism: coarse-grain teams (thread blocks) and fine-grain team members (threads). Kokkos::parallel_for(team_policy, [](member &team) { team.parallel_for(Kokkos::TeamVectorRange(team, N), [&](int i) { ... }); }) enables nested parallelism portably. Shared team memory simulates GPU shared memory on CPUs via temporary allocations.
**Parallel Operations**
parallel_for executes function over index range. parallel_reduce combines parallel computation with reduction (sum, min, max) per team. parallel_scan (prefix sum) enables cumulative operations. Team-level operations reduce, scan, and barrier-synchronize teams collectively.
**Trilinos Integration**
Trilinos is a large-scale scientific computing library; Kokkos enables GPU acceleration in core packages (linear algebra, graph algorithms, sparse solvers). SNL production codes (ALEGRA, SIERRA) use Kokkos for portability. CMake-based build system enables backend selection at configure time.