C++ 库 Eigen 给我留下了深刻的印象,它使用表达式模板在矩阵/向量计算中获得了巨大的加速。
我想在 scala 中克隆这个库。据我所知,scalas 类型系统还不够强大,无法做这样的事情,但它应该是可能的轻量级模块化登台 LMS。那里似乎有几个项目(Delight、虚拟化-lms 等)。就可靠性和性能而言,哪种类型的项目适合使用?
谢谢
编辑:我刚刚在 scala 2.10 中遇到了宏。也许这就是我想在这里使用的。
@om-nom-nom
重要部分在http://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html中有解释
该示例解释了向量加法
u = v + w
在(本机)C++ 中确实具有良好的性能,因为为添加创建了一个临时变量,并且这个变量被分配给 u 作为
for(int i = 0; i < size; i++) tmp[i] = v[i] + w[i];
for(int i = 0; i < size; i++) u[i] = tmp[i];
Eigen 使用模板元编程(在上面的链接中逐步解释)在编译时将其减少到
for(int i = 0; i < size; i++) u[i] = v[i] + w[i];
这显然更快,并且不需要额外的变量。