В настоящий момент я использую Julia, но у меня есть критически важная функция производительности, которая требует огромного количества повторяющихся матричных операций с небольшими матрицами фиксированного размера (3-х или 4-х мерными). Кажется, что все матричные операции в Julia обрабатываются серверной частью BLAS и LAPACK. Также кажется, что внутри некоторых из этих функций происходит выделение большого количества памяти.
Существует библиотека julia для небольших матриц, которая может похвастаться впечатляющим ускорением для матриц 3x3, но не обновлялась в 3 года. Я подумываю переписать свою критическую для производительности функцию в Eigen
Я знаю, что Eigen утверждает, что он действительно хорош для матриц фиксированного размера, но я все еще пытаюсь судить, стоит ли мне переписывать эту функцию на Eigen или нет. Тесты производительности предназначены для матриц динамического размера. Есть ли у кого-нибудь данные, чтобы предположить, какую производительность можно получить от матриц фиксированного размера? Типы операций, которые я выполняю, - это матрица x матрица, матрица x вектор, положительно определенные линейные решения.
Fixed
. Например, вместо возврата[a,b,c]
из функции вернитеVec((a,b,c))
. Это будет намного быстрее. Частоsetindex!
не требуется, просто замените всю матрицу. (Иногда LLVM реализует это как замену под капотом, но вы не узнаете этого, не глядя.) 23.02.2016x
- этоArray
, вы можете изменитьx[i]
. Вы просто не можете изменятьx[i][j]
. (Но вы можете заменитьx[i]
, что я рекомендую.) 26.02.2016