heterogeneous computing
**Heterogeneous Computing** — using multiple types of processors (CPU, GPU, FPGA, custom accelerators) within a single system, assigning each workload to the processor best suited for it.
**Why Heterogeneous?**
- No single processor is optimal for all workloads
- CPU: Great for sequential, branch-heavy code. Latency-optimized
- GPU: Great for massively parallel, data-parallel work. Throughput-optimized
- FPGA: Great for custom dataflow, low-latency, bit-manipulation
- Custom ASIC: Maximum efficiency for specific fixed algorithms
**Common Heterogeneous Architectures**
- **CPU + GPU**: Most common. Used in AI training/inference, HPC, graphics
- **CPU + FPGA**: Network processing (SmartNICs), low-latency trading, genomics
- **CPU + AI Accelerator**: Google TPU, Apple Neural Engine, Intel Gaudi
- **SoC**: Mobile chips integrate CPU + GPU + NPU + ISP + DSP (Apple M-series, Qualcomm Snapdragon)
**Programming Models**
- **CUDA**: NVIDIA GPU programming (dominant for AI/HPC)
- **OpenCL**: Cross-vendor GPU/FPGA/CPU programming (portable but less optimized)
- **SYCL/oneAPI**: Intel's cross-architecture programming model
- **ROCm/HIP**: AMD GPU programming (CUDA-compatible API)
- **Vitis/Vivado HLS**: FPGA programming with C++ synthesis
**Challenges**
- Data movement: Transferring data between CPU and accelerator is expensive
- Programming complexity: Different programming models for each device
- Load balancing: Partitioning work optimally across different processors
- Portability: Code written for one accelerator may not run on another
**Heterogeneous computing** defines the future of computing — as Moore's Law slows, specialized accelerators are the primary path to continued performance improvement.