niitsuma /
scm2cpp
scm2cpp 是一个把 Scheme 子集翻译成人类可读 C++ 的编译器(Racket 实现,MIT 许可)。它不带运行时:整数变成 int,向量变成 std::vector<double>,类型由整程序推断(Hindley-Milner),推不出来的地方变成 C++ 模板参数。生成的代码可以直接读、直接改。 它还带一个数组代数层和一个"推导"步骤(--derive):写一个朴素的残差形式坐标下降(lasso),编译器会把循环提升成…
niitsuma /
scm2cpp 是一个把 Scheme 子集翻译成人类可读 C++ 的编译器(Racket 实现,MIT 许可)。它不带运行时:整数变成 int,向量变成 std::vector<double>,类型由整程序推断(Hindley-Milner),推不出来的地方变成 C++ 模板参数。生成的代码可以直接读、直接改。 它还带一个数组代数层和一个"推导"步骤(--derive):写一个朴素的残差形式坐标下降(lasso),编译器会把循环提升成…
scm2cpp 是一个把 Scheme 子集翻译成人类可读 C++ 的编译器(Racket 实现,MIT 许可)。它不带运行时:整数变成 int,向量变成 std::vector<double>,类型由整程序推断(Hindley-Milner),推不出来的地方变成 C++ 模板参数。生成的代码可以直接读、直接改。 它还带一个数组代数层和一个"推导"步骤(--derive):写一个朴素的残差形式坐标下降(lasso),编译器会把循环提升成数组表达式,推导出协方差更新形式(Gram 矩阵),并把三个矩阵乘积交给 BLAS / cuBLAS。推导出来的内核和手写的内核在四种数据规模上时间完全一样。 用它翻译出来的 lasso 求解器打包成了 pip install scm2cpp-lasso(不需要 Racket,只要 C++17 编译器;有 nvcc 就顺带编译 GPU 批处理)。在 4096 个 λ 的冷启动网格上(p=200, n=1800,交叉验证的典型形状):sklearn 9.6 s,celer 13.5 s,skglm 14.5 s,cuML 53.6 s,scm2cpp-lasso 单核 0.91 s,GPU 0.044 s,目标函数值一致。
Discuss this product