Scala LMS для написания библиотеки линейной алгебры

Я очень впечатлен библиотекой C++ Eigen, которая использует шаблоны выражений для значительного ускорения вычислений матриц/векторов.

Я хотел бы клонировать эту библиотеку в scala. Насколько я знаю, система типа scalas недостаточно мощна, чтобы делать что-то подобное, но должна быть возможна легкая модульная промежуточная LMS. Кажется, есть несколько проектов (Delight, виртуализация -lms и т. д. ). Что было бы правильно использовать для такого рода проекта с точки зрения надежности и производительности?

Спасибо

Изменить :Я только что наткнулся на макросы в scala 2.10. Может быть, это то, что я хочу использовать здесь.

@om -nom -nom

Важная часть объяснена в http://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html

. Пример поясняет, что сложение векторов

u = v + w

имеет хорошую производительность в (родном )C++, поскольку для добавления создается временная переменная, и переменная this присваивается 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];

, что, очевидно, быстрее и не требует дополнительной переменной.

6
задан Manuel Schmidt 4 May 2012 в 06:33
поделиться