0

我的情况是,我必须在 C++ 中使用几乎永远不会改变的矩阵和很多小向量(非常少的 3x3 或 4x4 矩阵和具有 3 个值的向量)执行一些线性代数计算,我正在考虑使用为 x86 32 位、x86 64 位、ARMv5 及更高版本设置了一些 CPU 指令,以加快速度并简化我的数学运算设计。

令人惊讶的是,我还没有找到真正的线性代数集,其中大多数是用于浮点数学的,可以根据需要进行缓存,优化,但是对于矩阵和线性代数来说,没有什么真正的,是只有我还是没有线性代数?

AMD 的新 FMA3 开始看起来很有趣,但在现代 CPU 中仍然很难找到,我想坚持像 x86 上的 SSE 或 ARM 上的 ARMv5 这样流行的东西。

那么有一个流行的指令集用于小而快速的线性代数计算吗?如果速度足够好,我什至可以接受大量错误。

编辑:

我还应该注意,实际上我的编译器是:

  • 海合会
  • 明威
  • 视觉工作室

所以我想在 x86 和 ARM 上都有一个开源产品和一个可移植库。

编辑 2: Eigen 不支持多线程执行,这对我来说是个大问题。

4

2 回答 2

3

您可能已经知道这一点,但是对于 x86 架构,我可以向您推荐 Intel BLAS over 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

于 2013-06-29T15:26:11.913 回答
1

您实际上并不是在寻找完整的线性代数库,而只是在寻找可移植的向量运算。

搜索“便携式 C++ SIMD”会产生大量相关命中。最有希望的之一是

Vc 是一个免费软件库,用于简化 C++ 代码的显式矢量化。它具有直观的 API,并提供不同编译器和编译器版本之间的可移植性以及不同向量指令集之间的可移植性。

于 2013-06-29T20:41:02.047 回答