点积 - SSE2 与 BLAS
计算向量 x 与大量向量 y_i 的点积的最佳选择是什么,其中 x 和 y_i 的长度约为 10k 左右。
- 将 y 放入矩阵中并使用优化的 s/dgemv 例程?
- 或者尝试手动编码 SSE2 解决方案(根据 cpuinfo,我没有 SSE3)。
我只是在这里寻找一般指导,因此任何建议都会有用。
是的,我确实需要表演。 谢谢你的任何光。
What's my best bet for computing the dot product of a vector x with a large number of vectors y_i, where x and y_i are of length 10k or so.
- Shove the y's in a matrix and use an optimized
s/dgemv
routine? - Or maybe try handcoding an SSE2 solution (I don't have SSE3, according to cpuinfo).
I'm just looking for general guidance here, so any suggestions will be useful.
And yes, I do need the performance.
Thanks for any light.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
手动编码 SSE2 解决方案并不是很困难,并且比纯 C 例程带来了很好的加速。 这会给 BLAS 例程带来多少影响,必须由您决定。
通过将数据结构化为一种格式可以获得最大的加速,以便您可以利用数据并行性和对齐。
Handcoding a SSE2 solution is not very difficult and will bring a nice speedup over a pure C routine. How much this will bring over a BLAS routine must be determined by you.
The greatest speedup is derived by structuring the data into a format, so that you can exploit data parallelism and alignment.
我使用GotoBLAS。 这是高性能内核例程。 比MKL和BLAS好很多倍。
I use a GotoBLAS. It's the hight perfomance kernel routines. The many times better than MKL and 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
The following provides BLAS level 1 (vector operations) routines using SSE.
http://www.applied-mathematics.net/miniSSEL1BLAS/miniSSEL1BLAS.html
If you have an nVidia graphics card you can get cuBLAS which will perform the operation on the graphics card.
http://developer.nvidia.com/cublas
For ATI (AMD) graphics cards
http://developer.amd.com/libraries/appmathlibs/pages/default.aspx
我认为 GPU 是专门为快速执行此类操作(以及其他操作)而设计的。 因此,您可以利用 DirectX 或 OpenGL 库来执行矢量运算。 D3DXVec2Dot 这也将节省您的 CPU 时间。
I think GPUs are specifically designed to perform operations like this quickly (among others). So you could probably make use of DirectX or OpenGL libraries to perform the vector operations. D3DXVec2Dot This will also save you CPU time.
优化 BLAS 例程的替代方案:
可以访问intel MKL
Alternatives for optimised BLAS routines:
have access to intel MKL