点产品 - SSE2与BLAS

时间:2009-07-07 03:34:45

标签: c optimization intrinsics

用于计算具有大量向量y_i的向量x的点积的最佳选择是什么,其中x和y_i的长度大约为10k。

  1. 将y推入矩阵并使用优化的s/dgemv例程?
  2. 或者尝试手动编码SSE2解决方案(根据cpuinfo,我没有SSE3)。
  3. 我只是在这里寻找一般指导,所以任何建议都会有用 是的,我确实需要表现。 感谢任何光明。

5 个答案:

答案 0 :(得分:4)

我认为GPU专门用于快速执行此类操作(以及其他操作)。因此,您可以使用DirectX或OpenGL库来执行向量操作。 D3DXVec2Dot这也可以节省你的CPU时间。

答案 1 :(得分:1)

优化BLAS例程的替代方案:

  • 如果你使用英特尔编译器,你可以 可以访问英特尔MKL
  • 对于其他编译器ATLAS通常提供不错的性能数字

答案 2 :(得分:0)

对SSE2解决方案进行手动编码并不是很困难,并且可以为纯C例程带来更好的加速。这将带来多少BLAS例程必须由你决定。

最大的加速是通过将数据结构化为格式得出的,这样您就可以利用数据并行和对齐。

答案 3 :(得分:0)

我使用Goto BLAS。这是高性能的内核例程。比MKL和BLAS好很多倍。

答案 4 :(得分:0)

以下提供了使用SSE的BLAS 1级(向量运算)例程。

http://www.applied-mathematics.net/miniSSEL1BLAS/miniSSEL1BLAS.html

如果你有一个nVidia显卡,你可以获得cuBLAS,它将在显卡上执行操作。

http://developer.nvidia.com/cublas

适用于ATI(AMD)显卡

http://developer.amd.com/libraries/appmathlibs/pages/default.aspx