我有一个简单的问题:用一个矩阵乘以一个向量。然而,乘法的实现很复杂,因为矩阵是18gb(3000^2×500)。在
一些信息:
现在我有一个单线程实现,其中python代码一次读入矩阵几千行并执行乘法运算。然而,这对我的程序来说是一个重要的瓶颈,因为它需要很长时间。我想用多线程来加快速度。在
我想知道python处理多线程并继续使用numpy操作来进行乘法,还是用C语言编写MV乘法函数,并用cytype绑定它,是否会更快(计算时间方面,而不是实现时间)。在
我可能会同时做这两件事,并对它们进行计时,因为从一个非常长的运行程序中削减时间是很重要的。不过,我想知道是否有人以前遇到过这种情况,并且有什么见解(或者其他建议?)在
作为一个附带问题,我只能找到对nxn矩阵进行m-v乘法的算法改进。有人知道一个可以在mxn矩阵上使用的吗?在
硬件
正如svenmarnach在评论中所写的,您的问题很可能是I/O受限,因为磁盘访问比RAM访问慢几个数量级。在
因此,最快的方法可能是有一个有足够内存的机器来保存整个矩阵乘法和结果在RAM中。如果你只读一次矩阵,会节省很多时间。在
用固态硬盘替换硬盘也会有所帮助,因为这样读写速度更快。在
软件
除此之外,为了加快磁盘读取速度,可以使用
mmap
模块。这应该会有所帮助,尤其是当操作系统发现你在反复读取同一文件的片段并开始将其保存在缓存中时。在由于计算可以按行进行,因此使用
numpy
和multiprocessing.Pool
进行计算,您可能会从中受益。但只有当一个进程不能使用所有可用的磁盘读带时才可以。在相关问题 更多 >
编程相关推荐