Repository navigation
Module_GPU_Policy_zh
结论(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 计算(未完成)」的表述已废止。
这是产品与技术路线上的主动选择,而非暂时搁置。
主库目标是 纯 .NET、可移植、无原生驱动依赖 的高性能数学库。默认用户应能在:
- 无 NVIDIA 显卡的环境
- 服务器 / CI / 边缘设备
- 仅安装 .NET 运行时的机器
上直接 dotnet add package Vorcyc.Mathematics 并完成工作。将 CUDA 绑进主包会违背这一定位。
本库 0.9 的典型场景包括:
- 表格机器学习(树、KNN、Softmax 等)— 无 GPU 收益
- 中小规模自研 DL(XOR、小 CNN、MFCC 分类)— batch 小,PCIe 传输常大于算力收益
- 信号处理与 MFCC — CPU + SIMD / 并行已足够
- 示例与测试 — 以正确性与可复现为主
在此规模下投入 GPU 维护成本,性价比低于继续打磨 ComputingContext 与 CPU 热点。
CudaFFT 源码中曾标注「结果有问题,暂时不用」。保留 ILGPU 依赖会:
- 增大包体积与传递依赖
- 给使用者造成「已支持 GPU」的错误预期
- 分散精力,阻碍 CPU 路径测试与文档统一
因此选择删除实验代码,并在文档中明确说明,而不是继续挂名「未完成」。
要在现有 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。
-
ComputingContext仅描述 CPU 模式(CpuExecutionMode)。 - 枚举
ComputingBackend.GPU等仍为占位,主库运行时不使用。 - 文档中的「GPU / CUDA」均指主包范围外的策略,见本文。
若你认为某一具体场景必须在 Vorcyc 生态内获得 GPU 支持,请附带:数据规模、batch 大小、延迟目标、是否仅推理。便于评估是否值得做扩展包,而非改回主包依赖。
-
- 🔖 ArrayExtension class
- 🔖 BaseConverter class
- 🔖 BitMathExtension class
- 🔖 Combinatorics class
- 🔖 ConstantsFp32 class
- 🔖 NumberMapper class
- 🔖 PinnableArray<T> class
- 🔖 SimpleRNG_Fp32 and SimpleRNG_Fp64 classes
- 🔖 TrigonometryHelper class
- 🔖 VMath class
- 🔖 Pinned buffers (Buffers)
- 🔖 IPinnedBuffer<T> interface
- 🔖 POHBuffer<T> class
- 🔖 NativeBuffer<T> class
-
- 🔖 0.9 classifier walkthrough
- 🔖 KNN<T> class
- 🔖 MultipleLinearRegression<T> class
- 🔖 SimpleLinearRegression<T> class
- 🔖 SupportVectorMachine<TSelf> class
- 🔖 DBSCAN<T> class
- 🔖 ExpectationMaximization<T> class
- 🔖 GMM<T> class
- 🔖 HierarchicalClustering<T> class
- 🔖 KMeansClusterer<T> class
- 🔖 VectorQuantization<T> class
- 🔖 FactorAnalysis<T> class
- 🔖 PCA<TSelf> class
- 🔖 TSNE<T> class
- 🔖 Distance metric classes
-
📒 Examples
-
📒 GPU 策略说明
- 🔖 为何放弃主包 GPU
- 🔖 当前性能路径
- 🔖 若仍需要更强算力
-
📒 计算上下文模块
-
📒 核心模块
-
📒 深度学习模块
-
📒 线性代数模块
-
📒 机器学习模块
- 🔖 0.9 分类器完整示例
- 🔖 KNN<T> 类
- 🔖 MultipleLinearRegression<T> 类
- 🔖 SimpleLinearRegression<T> 类
- 🔖 SupportVectorMachine<TSelf> 类
- 🔖 DBSCAN<T> 类
- 🔖 ExpectationMaximization<T> 类
- 🔖 GMM<T> 类
- 🔖 HierarchicalClustering<T> 类
- 🔖 KMeansClusterer<T> 类
- 🔖 VectorQuantization<T> 类
- 🔖 FactorAnalysis<T> 类
- 🔖 PCA<TSelf> 类
- 🔖 TSNE<T> 类
- 🔖 距离度量类
-
📒 信号处理模块
-
📒 数值模块
-
📒 统计模块
- 🔖 基础统计函数
- 🔖 高级统计函数
- 🔖 稳健统计 / RunningMoments
- 🔖 其它统计函数
- 🔖 分布相关函数
- 🔖 时间序列分析
- 🔖 IComparable 扩展
- 🔖 ExtremeValueFinder
- 🔖 INumber 扩展
-
📒 FFTW 扩展
-
📒 示例