线性代数的CPU指令集?
我处于一种情况,我必须用几乎不会改变的矩阵进行一些线性代数计算,并且我正在考虑使用C ++中的很多小向量(极少数3x3或4x4矩阵和带有3个值的向量)一些针对x86 32位,x86 64位,ARMv5以及更高版本的CPU指令可加快速度并简化数学运算的设计。
令人惊讶的是,我还没有找到线性代数的真实集合,其中大部分都是浮点数学,缓存,按照您的要求进行了优化,但对矩阵和线性代数没有任何真正的意义,仅仅是我或者没有为线性代数设置集合?
AMD的新FMA3看起来很有趣,但在现代CPU中仍然非常罕见,我想坚持一个像x86上的SSE或ARM上的ARMv5一样流行的东西。
所以有一个流行的快速线性代数计算指令集? 如果速度足够好,我甚至可以接受很多错误。
编辑:
我还应该注意到,实际上我的编译器是:
所以我想在x86和ARM上都有一个开源产品和一个可移植的库。
编辑2: Eigen不支持多线程执行,对我来说这是一个很大的失败。
可能你已经知道了这一点,但对于x86架构,我可以推荐你通过AVX或AVX2的英特尔BLAS。有关详细信息,请看这里:http://software.intel.com/en-us/articles/optimize-for-intel- avx-using-intel-math-kernel-librarys-basic-linear-algebra-subprograms-blas-with-dgemm-routine or here http://software.intel.com/en-us/articles/intel-math-kernel -library-Intel的MKL-BLAS-cblas和 - LAPACK-compilinglinking函数-FORTRAN和 - CC-呼叫
你实际上并不是在寻找一个完整的线性代数库,而只是寻找可移植的矢量操作。
搜索“便携式C ++ SIMD”会生成大量相关的点击。 其中最有前途的是
Vc是一个免费的软件库,用于简化C ++代码的显式矢量化。 它具有直观的API,并提供不同编译器和编译器版本之间的可移植性,以及不同向量指令集之间的可移植性。
链接地址: http://www.djcxy.com/p/62987.html