Я нахожусь в ситуации, когда мне нужно выполнить некоторые вычисления линейной алгебры с матрицей, которая почти никогда не меняется, и с множеством маленьких векторов (очень мало матриц 3×3 или 4×4 и векторов с 3 значениями) в C ++, я думал об использовании некоторые инструкции процессора установлены для 32-разрядных x86, 64-разрядных x86, ARMv5 и выше, чтобы ускорить процесс и упростить разработку моих математических операций.
Удивительно, но я не нашел реального набора для линейной алгебры, большинство из них для математики с плавающей запятой, кешируется, оптимизируется так, как вы хотите, но на самом деле ничего не подходит для матриц и линейной алгебры, это только я или нет набора для линейной алгебры. ?
Новый FMA3 от AMD выглядит интересным для начала, но его все еще слишком редко можно встретить в современных процессорах. Я бы хотел остановиться на чем-то столь же популярном, как SSE на x86 или ARMv5 на ARM.
Таким образом, есть популярный набор инструкций для небольших и быстрых вычислений линейной алгебры? Я мог бы даже принять большое количество ошибок, если скорость достаточно хорошая.
РЕДАКТИРОВАТЬ:
Следует также отметить, что на практике мои компиляторы:
поэтому я хотел бы иметь продукт с открытым исходным кодом и портативную библиотеку как для x86, так и для ARM.
РЕДАКТИРОВАТЬ 2:
Eigen не поддерживает многопоточное выполнение, для меня это большой недостаток.
Возможно, вы уже знаете об этом, но для архитектуры x86 я могу порекомендовать вам Intel BLAS поверх AVX или AVX2.Для подробностей смотрите здесь: http://software.intel.com/en-us/articles/optimize-for-intel-avx-using-intel-math-kernel-librarys-basic-linear-algebra-subprograms-blas-with-dgemm-routine или здесь http://software.intel.com/en-us/articles/intel-math-kernel-library-intel-mkl-blas-cblas-and-lapack-compilinglinking-functions-fortran-and-cc-calls
На самом деле вы ищете не полную библиотеку линейной алгебры, а просто переносимые векторные операции.
Поиск «портативный C ++ SIMD» генерирует множество релевантных хитов. Одним из наиболее перспективных является
Vc — это свободная программная библиотека, облегчающая явную векторизацию кода C ++. Он имеет интуитивно понятный API и обеспечивает переносимость между различными компиляторами и версиями компилятора, а также переносимость между различными наборами векторных команд.