Я пишу программное обеспечение для гиперболических уравнений в частных производных в С++. Почти все обозначения являются векторными и матричными. Кроме того, мне нужен решатель линейной алгебры. И да, размеры векторов и матриц могут значительно различаться (от 1000 до размеров, которые могут быть решены только с помощью вычислений с распределенной памятью, например кластеров или аналогичной архитектуры). Если бы я жил в утопии, у меня был линейный решатель, который отлично масштабируется для кластеров, графических процессоров и многоядерных процессоров.
Когда мы думаем о структуре данных, которые должны представлять переменные, я пришел к boost.ublas и MTL4. Обе библиотеки совместимы с уровнем blas уровня 3, MTL4 реализует разреженный решатель и намного быстрее, чем ublas. Оба они не реализовали поддержку многоядерных процессоров, не говоря уже о распараллеливании вычислений с распределенной памятью. С другой стороны, разработка MTL4 зависит от единственного усилия двух разработчиков (по крайней мере, как я понял), и я уверен, что есть причина, что ublas находится в библиотеке boost. Кроме того, библиотека intel mkl включает пример связывания их структуры с ublas. Я хотел бы привязать свои данные и программное обеспечение к структуре данных, которая будет твердой, развитой и поддерживаемой в течение длительного периода времени.
Наконец, вопрос. Каков ваш опыт использования ublas и/или mtl4, и что вы бы порекомендовали?
спасибо, mightydodol