消耗内存时{py}使用系统cpu时间

时间:2017-04-18 12:11:32

标签: python numpy cpu-usage

我注意到当python(可能只是numpy?)占用内存时,系统CPU时间变得非常重要。

例如,运行以下代码时(numpy禁用多线程):

import numpy as np
a = np.random.rand(50, 50, 1000000)

大约88%的正在运行的核心用于用户时间,12%用于系统时间。

但是,运行以下代码时:

for i in range(1000000):
    a = np.random.rand(50, 50)

所有cpu时间都用于用户时间。

我想明白:

(1)为什么会这样?

(2)我是否需要分析我的代码以减少内存使用?请注意,当我说分析时,我并不关心记忆,而且Walltime是我唯一关心的事情。我只是担心太多的系统时间会减慢我的程序。

1 个答案:

答案 0 :(得分:1)

测试代码:

N=10000000
M=10

# Method 1
a=[]
for i in range(N):
    a.append(np.random.rand(M,M))

# Method 2
a = np.random.rand(M,M,N)

# Method 3
for i in range(N):
    a = np.random.rand(M,M)

linux time命令的结果: Fig 1

还有:

Method 3 at M=10 and N=10000000
real  0m15.221s
user  0m15.169s
sys   0m0.016s

结果显示系统调用时间随着方法1中块大小的增加而减小,并且最终将达到与方法2相同的水平。同时系统调用的时间成本比例随着块大小变小而减小,这是由于用户空间时间成本的快速增长。

至于方法3,它省去了分配大量内存的费用,导致系统调用成本极低,这在你的程序中基本上是不真实的(我知道它的作用!)。