对于计算向量 x 与大量向量 y_i 的点积,我最好的选择是什么,其中 x 和 y_i 的长度为 10k 左右。
- 将 y 推入矩阵并使用优化的
s/dgemv
例程? - 或者尝试手动编写 SSE2 解决方案(根据 cpuinfo,我没有 SSE3)。
我只是在这里寻找一般指导,所以任何建议都会很有用。
是的,我确实需要表演。谢谢你的光。
对于计算向量 x 与大量向量 y_i 的点积,我最好的选择是什么,其中 x 和 y_i 的长度为 10k 左右。
s/dgemv
例程? 我只是在这里寻找一般指导,所以任何建议都会很有用。
是的,我确实需要表演。谢谢你的光。
我认为 GPU 是专门为快速执行此类操作而设计的(除其他外)。因此,您可能可以使用 DirectX 或 OpenGL 库来执行矢量操作。D3DXVec2Dot这也将节省您的 CPU 时间。
我使用 GotoBLAS。这是高性能内核例程。比 MKL 和 BLAS 好很多倍。
对 SSE2 解决方案进行手工编码并不是很困难,并且会比纯 C 例程带来很好的加速。这将带来多少 BLAS 例程必须由您确定。
最大的加速是通过将数据结构化为一种格式来获得的,这样您就可以利用数据并行性和对齐。
下面提供了使用 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