我的笔记本电脑和计算群集上安装了numpy
(1.9.3
)和scipy
(0.17.0.dev0+7dd2b91
)的完全相同版本。
当我在笔记本电脑上运行scipy.test
时,它完成没有任何失败。但是,当我在计算群集上运行scipy.test
时,它会在this question中报告单个失败时完成。
我已将此失败的原因追溯到文件scipy/linalg/_decomp_update.so
,这是一个C文件(我相信......或C ++?),而不是Python文件。
因此,我得出结论,我的笔记本电脑上的C软件与集群上的软件不同。
我的问题是,相关的C软件是什么?默认情况下scipy
使用哪个编译器?如何查看已安装的C版本?
请注意,.so
文件已编译。我安装{4}}的Git仓库中的原始文件是scipy
,_decomp_update.c
和_decomp_update.pyx
。
我的笔记本电脑和群集之间的相关差异可能不在C代码中,而是在C和Python之间进行转换的Python包(在这种情况下似乎是_decomp_update.pyx.in
)?< / p>
我的笔记本电脑有cython
个版本cython
。
群集有0.23.2
个版本cython
。
我目前正在更新群集的版本并重新运行测试。
我现在在笔记本电脑和群集上都安装了0.22.1
版本cython
。
群集上的故障仍然存在;它继续发生在我的笔记本电脑上。
因此,差异似乎在C实现本身,而不是在Python或0.23.3
。
因为cython
docs提到cython
作为它使用的标准C编译器,所以检查这个是有意义的。
在群集上,我有gcc
版本gcc
。
在我的笔记本电脑上,我有4.4.7
。
将来我可能想要更新群集的版本并重新运行测试。
我将更新中止到4.8.4
,以便调查群集的LAPACK和BLAS版本是否与笔记本电脑上的版本不同(请参阅下面的评论)。我跟着this answer。
这就是我对笔记本电脑的看法:
gcc
这是我在集群中看到的:
$ cd /usr/local/lib/python2.7/dist-packages/scipy/linalg/
$ ldd cython_lapack.so
linux-gate.so.1 => (0xb7792000)
liblapack.so.3 => /usr/lib/liblapack.so.3 (0xb7159000)
libblas.so.3 => /usr/lib/libblas.so.3 (0xb6a7e000)
libgfortran.so.3 => /usr/lib/i386-linux-gnu/libgfortran.so.3 (0xb697f000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6939000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb691c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb676e000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6752000)
libquadmath.so.0 => /usr/lib/i386-linux-gnu/libquadmath.so.0 (0xb66d6000)
/lib/ld-linux.so.2 (0xb7793000)
这里肯定存在差异,但是有什么重要的区别吗?