【发布时间】:2020-10-25 05:49:06
【问题描述】:
什么时候可以使用英特尔的指令集扩展技术?它到底有什么作用?
我的场景:我想尽可能快地进行大约 500.000 次矩阵向量乘法。
矩阵大小:[4x4] |向量大小:[1x4]
【问题讨论】:
-
只要您需要性能并且您可以控制/知道您的代码将在哪些机器上运行,这都是有意义的。例如在您的家庭桌面或一组特定的服务器上,使用
gcc -O3 -march=native进行编译。或者,如果您真的需要性能,那么即使是运行时 CPU 分派也是值得的。见stackoverflow.com/tags/sse/info。 -
幸运的是,对于matmul,您不需要做很多手动工作,只需使用优化的BLAS库即可。除非您的矩阵很小或形状很奇怪,否则自定义代码可能会有所帮助。 (虽然 Eigen 作为一个 C++ 模板库,可以在编译时利用已知的东西。)
-
您可以考虑为此使用一个或多个 GPU。虽然这是一个全新的词(伤害)。
-
500000个不同大小的矩阵向量积?还是所有相同(可能很小)的尺寸?你能同时做它们吗?它们是否共享相同的矩阵或向量?