python在消耗内存时使用系统cpu时间
我注意到,当python(可能只是python在消耗内存时使用系统cpu时间,python,numpy,cpu-usage,Python,Numpy,Cpu Usage,我注意到,当python(可能只是numpy?)占用内存时,系统cpu时间变得非常重要 例如,运行以下代码时(numpy多线程被禁用): 大约88%的运行内核用于用户时间,12%用于系统时间 但是,在运行以下代码时: for i in range(1000000): a = np.random.rand(50, 50) 所有cpu时间都用于用户时间 我想了解: (1) 为什么会发生这种情况 (2) 我是否需要分析代码以使用更少的内存?请注意,当我说评测时,我并不关心内存,而wallti
numpy
?)占用内存时,系统cpu时间变得非常重要
例如,运行以下代码时(numpy
多线程被禁用):
大约88%的运行内核用于用户时间,12%用于系统时间
但是,在运行以下代码时:
for i in range(1000000):
a = np.random.rand(50, 50)
所有cpu时间都用于用户时间
我想了解:
(1) 为什么会发生这种情况
(2) 我是否需要分析代码以使用更少的内存?请注意,当我说评测时,我并不关心内存,而walltime是我唯一关心的。我只是担心太多的系统时间会减慢我的程序。测试代码:
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)
linuxtime
命令的结果:
而且:
Method 3 at M=10 and N=10000000
real 0m15.221s
user 0m15.169s
sys 0m0.016s
结果表明,在方法1中,系统调用时间随着块大小的增加而减少,并最终达到与方法2中相同的水平。同时,由于用户空间时间成本的快速增长,系统调用时间成本的比例随着块大小的减小而减小
至于方法3,它省去了分配大量内存的开销,导致系统调用的开销非常小,这在您的程序中基本上是不真实的(我知道它是做什么的!)。总处理使用量是否也更大?您的问题暗示了这一点。不,我没有比较它们,因为这两个代码段做的事情不一样。
Method 3 at M=10 and N=10000000
real 0m15.221s
user 0m15.169s
sys 0m0.016s