我正在寻找洞察我在多处理环境中使用numpy时遇到的棘手问题。最初,几周前,“事情根本不起作用”,并且由于该站点的指导,问题被追溯到需要重新编译以允许多处理的numpy。这已经完成并且乍一看似乎是功能性的,除了现在我可以攻击的问题大小有限制。
当在单处理器模式下使用numpy“作为二进制分发下载”时,我可以使用linalg.pinv和linalg.svd解决大问题而不会抱怨(吞吐量除外)。现在,相对较小的问题失败了。具体来说,当调用linalg.lstsq(它似乎调用svd和/或pinv)时,代码会消耗cpu工作量(如进程监视器所示),但代码永远不会在linalg调用之后执行下一个语句。没有异常,没有给出错误指示,没有产生结果;它只是保释,包含调用的进程被视为已完成,就是这样。
这些矩阵不是那么大:8 x 4096会及时解决并创建结果。 8 x 8192失败,没有错误指示,没有异常引发,也没有产生结果。 numpy的单进程版本解决了12 x 50,000而没有问题。我的平台是一个12核的Mac,运行最新的OS X(10.11.6),64GB物理内存。在这些运行期间,机器上的内存压力最小;太空有足够的空间。在anaconda下Python是2.7.11,使用gcc重新编译numpy用于多处理。
我的地方用尽了;我还没有找到解决这个问题的numpy控件。有没有人对我应该集中精力寻找解决方案有什么指示?
这对我来说是一个阻碍,我必须假设根本原因很简单,但也许并不明显。我对python很陌生,所以我很感激花花公子的任何见解。