1

使用 python 运行脚本时出现问题。我没有在 python 中进行任何并行化,也没有调用任何 mpi 来运行脚本。我只是执行“python myscript.py”,它应该只使用 1 个 cpu。

但是,当我查看命令“top”的结果时,我发现 python 正在使用我几乎 390% 的 cpu。我有一个四核,所以 8 个线程。我不认为这有助于我的脚本运行得更快。所以,我想了解为什么 python 使用多个 cpu,并阻止它这样做。

有趣的是,当我运行第二个脚本时,那个脚本也占了 390%。如果我运行第三个脚本,它们每个的 cpu 使用率都会下降到 250%。前段时间我用matlab遇到过类似的问题,我解决的方法是用-singlecompthread启动matlab,但是不知道用python怎么办。

如果有帮助,我将在我的脚本中求解泊松方程(根本没有并行化)。


更新:我的朋友在他自己的电脑上运行代码,它只需要 100% cpu。我不使用任何 BLAS、MKL 或任何其他东西。我仍然不知道 400% cpu 使用率的原因是什么。SLATEC 库中有一个 fortran 算法,它解决了 Ax=b 系统。我认为那部分使用了大量的cpu。

4

3 回答 3

2

您的代码可能正在调用一些使用 C/C++/等的函数。下。在这种情况下,可以使用多个线程。

您是否正在调用任何仅将 python 绑定到一些更有效实现的函数的库?

于 2012-05-03T09:00:53.973 回答
1

您的代码是否使用了 SciPy 或其他 Python 数字库,这些库与英特尔 MKL 或其他供应商提供的使用 OpenMP 的库相关联?如果底层 C/C++ 代码使用 OpenMP 并行化,则可以通过将环境变量设置为 1 将其限制为单个线程OMP_NUM_THREADS

OMP_NUM_THREADS=1 python myscript.py

如果与相应的并行驱动程序链接(默认链接行为),英特尔 MKL 在许多地方(LAPACK、BLAS 和 FFT 函数)肯定是并行的,并且默认启动与可用 CPU 内核数量一样多的计算线程。

于 2012-05-04T09:01:51.113 回答
1

您始终可以设置您的进程亲和性,使其仅在一个 cpu 上运行。在 Linux 上使用“taskset”命令,或在 Windows 上使用进程资源管理器。

这样,您应该能够知道您的脚本使用一个或多个 cpu 是否具有相同的性能。

于 2012-05-03T10:13:40.037 回答