菜单

SYCL 后端

相关源文件

SYCL 后端使用 Intel 的 oneAPI SYCL 框架为 GGML 操作提供 GPU 加速。它支持在 Intel GPU(主要目标)、NVIDIA GPU 和实验性的 AMD GPU 上进行跨平台 GPU 计算。该后端实现了标准的 GGML 后端接口,同时利用 SYCL 进行设备抽象和计算内核。

有关 CPU 特定优化,请参阅 CPU 后端。有关 NVIDIA 特定 CUDA 实现,请参阅 CUDA 后端。有关跨后端测试和验证,请参阅 后端测试和验证

架构概述

SYCL 后端采用分层架构,包括设备抽象、内存管理和操作调度

来源: ggml/src/ggml-sycl/ggml-sycl.cpp1-3000 ggml/src/ggml-sycl/common.hpp1-590 ggml/src/ggml-sycl/dpct/helper.hpp1-200

设备发现和初始化

SYCL 后端通过集中的设备管理系统来发现和初始化可用的 SYCL 设备

初始化过程会查询设备能力,并根据检测到的 GPU 架构设置优化功能。像 GGML_SYCL_DEBUGGGML_SYCL_DISABLE_OPT 这样的环境变量会控制运行时行为。

来源: ggml/src/ggml-sycl/ggml-sycl.cpp55-101 ggml/src/ggml-sycl/ggml-sycl.cpp193-254 ggml/src/ggml-sycl/common.hpp194-312

缓冲区管理系统

SYCL 后端实现了一个复杂的缓冲区管理系统,支持单设备和多设备(分割)张量存储

缓冲区类型上下文类目的
单设备ggml_backend_sycl_buffer_context标准的单 GPU 张量存储
分割设备ggml_backend_sycl_split_buffer_context多 GPU 张量分割
缓冲区类型ggml_backend_sycl_buffer_type_context缓冲区类型元数据和流

缓冲区系统包括量化张量的自动填充,以及针对不同 GPU 之间设备到设备内存复制限制的解决方法。

来源: ggml/src/ggml-sycl/ggml-sycl.cpp293-557 ggml/src/ggml-sycl/ggml-sycl.cpp771-942 ggml/src/ggml-sycl/common.hpp281-287

操作调度和内核系统

SYCL 后端通过一个全面的、按操作类型组织的内核系统来调度操作

每个操作模块都包含专门的 SYCL 内核,这些内核针对不同的量化格式和硬件能力进行了优化。

来源: ggml/src/ggml-sycl/ggml-sycl.cpp3000-4000 ggml/src/ggml-sycl/element_wise.cpp1-100 ggml/src/ggml-sycl/gemm.hpp1-50

后端接口实现

SYCL 后端通过函数表和上下文结构实现了标准的 GGML 后端接口

后端维护每个设备的 SYCL 队列和内存池,并支持可选的图执行以提高支持硬件上的性能。

来源: ggml/src/ggml-sycl/ggml-sycl.cpp4000-5000 ggml/src/ggml-sycl/common.hpp315-436

构建配置和目标支持

SYCL 后端构建系统通过 CMake 配置支持多个 GPU 供应商

目标编译器架构支持
IntelicpxIntel oneMKL所有 Intel GPU
NVIDIAicpx 配合 CUDA 目标oneMath + cuBLASsm_* 架构
AMDicpx 配合 HIP 目标oneMath + rocBLASgfx* 架构

构建系统会自动为 NVIDIA/AMD 目标获取 oneMath,并支持 FP16 和 FP32 精度模式,以及相应的硬件特定优化。

来源: ggml/src/ggml-sycl/CMakeLists.txt1-190 ci/run.sh65-78 docs/backend/SYCL.md285-350