10

对于计算向量 x 与大量向量 y_i 的点积,我最好的选择是什么,其中 x 和 y_i 的长度为 10k 左右。

  1. 将 y 推入矩阵并使用优化的s/dgemv例程?
  2. 或者尝试手动编写 SSE2 解决方案(根据 cpuinfo,我没有 SSE3)。

我只是在这里寻找一般指导,所以任何建议都会很有用。
是的,我确实需要表演。谢谢你的光。

4

5 回答 5

4

我认为 GPU 是专门为快速执行此类操作而设计的(除其他外)。因此,您可能可以使用 DirectX 或 OpenGL 库来执行矢量操作。D3DXVec2Dot这也将节省您的 CPU 时间。

于 2009-07-07T04:31:47.810 回答
1

优化 BLAS 例程的替代方案:

  • 如果您使用 intel 编译器,您可能可以访问 intel MKL
  • 对于其他编译器,ATLAS通常会提供不错的性能数据
于 2009-07-07T16:45:06.573 回答
0

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

于 2009-10-03T10:34:18.077 回答
0

对 SSE2 解决方案进行手工编码并不是很困难,并且会比纯 C 例程带来很好的加速。这将带来多少 BLAS 例程必须由您确定。

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

于 2009-07-07T12:37:42.570 回答
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

于 2012-05-06T20:25:54.073 回答