CUDA & HIP
Writing GPU kernels once and running them on both Nvidia and AMD hardware.
HIP deliberately mirrors CUDA's threadIdx/blockIdx/blockDim/gridDim naming so kernel bodies port with near-zero changes — the portability boundary is almost entirely in host-side API calls (memory allocation, launch, stream management), not in the kernel math itself.
hipify handles the mechanical renames (cudaMalloc → hipMalloc, cudaMemcpy → hipMemcpy, etc). What it can't do automatically: library calls that don't have a 1:1 equivalent, warp-size-dependent code (32 vs 64 threads), and anything relying on Nvidia-specific intrinsics like warp shuffle variants that differ between wave32/wave64.