Skip to content

Module_GPU_Policy_zh

cyclone_dll edited this page Oct 1, 2026 · 7 revisions

当前位置 : 首页/GPU 策略说明

GPU / CUDA 策略说明

结论(0.9+):Vorcyc.Mathematics 主 NuGet 包不包含、也不计划内置 GPU / CUDA 加速。历史 ILGPU 依赖与 CudaFFT 实验代码已移除。数值计算统一在 CPU 上完成,执行策略由 ComputingContext 提供(标量 / SIMD / 多线程并行)。


📒目录


移除的内容

项 说明
NuGet 依赖 ILGPU、ILGPU.Algorithms 已从 dotNET10_Portable 移除
源代码 CudaFFT、CudaFastFourierTransform、CUDA_FFT 已删除(长期未维护,结果不正确)
公开 API 主包不再提供 CudaFFT 等 CUDA FFT 类型
测试 CuFFT_test 已删除

上述能力从未作为稳定公开特性发布;文档与 README 中「GPU 计算(未完成)」的表述已废止。


为何放弃主包 GPU

这是产品与技术路线上的主动选择,而非暂时搁置。

1. 与库定位一致

主库目标是 纯 .NET、可移植、无原生驱动依赖 的高性能数学库。默认用户应能在:

  • 无 NVIDIA 显卡的环境
  • 服务器 / CI / 边缘设备
  • 仅安装 .NET 运行时的机器

上直接 dotnet add package Vorcyc.Mathematics 并完成工作。将 CUDA 绑进主包会违背这一定位。

2. 当前工作负载在 CPU 上更合适

本库 0.9 的典型场景包括:

  • 表格机器学习(树、KNN、Softmax 等)— 无 GPU 收益
  • 中小规模自研 DL(XOR、小 CNN、MFCC 分类)— batch 小,PCIe 传输常大于算力收益
  • 信号处理与 MFCC — CPU + SIMD / 并行已足够
  • 示例与测试 — 以正确性与可复现为主

在此规模下投入 GPU 维护成本,性价比低于继续打磨 ComputingContext 与 CPU 热点。

3. 历史 GPU 代码未达生产质量

CudaFFT 源码中曾标注「结果有问题,暂时不用」。保留 ILGPU 依赖会:

  • 增大包体积与传递依赖
  • 给使用者造成「已支持 GPU」的错误预期
  • 分散精力,阻碍 CPU 路径测试与文档统一

因此选择删除实验代码,并在文档中明确说明,而不是继续挂名「未完成」。

4. 自研 DL 栈的 GPU 训练成本过高

要在现有 Trainer + 手写 Backward 上接完整 GPU 训练,需要:

  • 设备内存模型(DeviceTensor)
  • 前向 / 反向 kernel 或 cuDNN 集成
  • CPU/GPU 数值对齐测试

工程量接近另一条产品线。在尚无明确大模型训练需求前,不作为主库目标。


当前性能路径

主包统一使用 CPU 执行策略:

机制 说明
ComputingContext Normal / Simd / Parallel / Auto
ComputingScope 代码块级默认策略
热点覆盖 FFT、统计归约、矩阵乘、VectorSpan、批 DL 前向、MFCC 并行、训练入口等

推荐用法:

using (ComputingScope.Enter(ComputingContext.Parallel))
{
    // 作用域内 context:null 的 API 将使用 Parallel
}

values.Sum(ComputingContext.Simd);
MatrixFp32.Multiply(a, b, ComputingContext.Parallel);
trainer.FitBatchSequential(..., computingContext: ComputingContext.Parallel);

详见 计算上下文手册 与「验证与测试」章节。


若仍需要更强算力

按场景选择 主库之外的方案,而不是期待主包内置 CUDA:

需求 建议
更快 FFT(CPU 原生库) 可选包 Vorcyc.Mathematics.Extensions.FFTW
大模型 / 大批量 DL 推理 将模型导出为 ONNX 等格式,使用 ONNX Runtime(含 CUDA EP)等运行时
大 batch 训练 使用 PyTorch / TensorFlow 等成熟框架;本库 DL 模块侧重教学与小规模可微分实验
必须在本解决方案内做 NVIDIA 加速 等待或自行实现 可选扩展包(见下文);不要假设主包会默认启用 GPU

未来可能方向

若将来出现明确产品需求(例如大批量推理、客户强制要求 NVIDIA),GPU 能力将以 可选扩展包 形式提供,模式与 FFTW 扩展一致:

Vorcyc.Mathematics              ← 主包,CPU only,零 CUDA 依赖
Vorcyc.Mathematics.Extensions.FFTW
Vorcyc.Mathematics.Extensions.*   ← 未来若有:CUDA / 其他原生后端(单独安装)

原则:

  • 默认安装主包的用户不背负 CUDA 运行时、cufft/cublas DLL、驱动版本问题
  • 扩展包显式引用、显式 API 或 ComputingContext 的 Backend=Gpu(尚未实现)
  • 主包 API 与测试以 CPU 为唯一基线

当前版本未提供任何 GPU 扩展包;本文档仅说明架构原则,不构成发布承诺。


对使用者的影响

升级自早期内部 / 文档版本

  • 请勿再引用 CudaFFT、ILGPU 相关类型;编译将失败。
  • FFT 请使用 FastFourierTransform + ComputingContext,或 FFTW 扩展。
  • README「依赖项」中不再列出 ILGPU。

API 设计

  • ComputingContext 仅描述 CPU 模式(CpuExecutionMode)。
  • 枚举 ComputingBackend.GPU 等仍为占位,主库运行时不使用。
  • 文档中的「GPU / CUDA」均指主包范围外的策略,见本文。

问题反馈

若你认为某一具体场景必须在 Vorcyc 生态内获得 GPU 支持,请附带:数据规模、batch 大小、延迟目标、是否仅推理。便于评估是否值得做扩展包,而非改回主包依赖。


返回首页 · ComputingContext 手册

Language / 语言: English · 简体中文


Home


首页

Clone this wiki locally