我正在尝试在Python中实现大量的矩阵矩阵乘法。最初,我假设NumPy将自动使用我的线程BLAS库,因为我是根据这些库构建它的。但是,当我查看顶部或其他内容时,似乎代码根本不使用线程。有什么想法是错误的,或者我可以做些什么来轻松使用BLAS性能?
3 回答
慕仙森
TA贡献1827条经验 获得超7个赞
并非所有的NumPy都使用BLAS,只有某些功能-特别dot()
是vdot()
,和模块中的innerproduct()
一些功能numpy.linalg
。还要注意,许多NumPy操作受大型阵列的内存带宽限制,因此优化的实现不太可能带来任何改善。如果受到内存带宽的限制,多线程能否提供更好的性能取决于硬件。
慕田峪4524236
TA贡献1875条经验 获得超5个赞
可能是因为Matrix x Matrix乘法受内存限制,所以在同一内存层次结构上添加额外的内核不会给您太多。当然,如果切换到Fortran实施时看到大幅提高,那我可能是不正确的。
我的理解是,对于此类问题,适当的缓存比计算能力更为重要。大概BLAS为您做到了。
对于一个简单的测试,您可以尝试安装Enthought的 python发行版进行比较。它们链接到英特尔的数学内核库,我相信它会利用多个内核(如果有)。
添加回答
举报
0/150
提交
取消