Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在消耗内存时使用系统cpu时间_Python_Numpy_Cpu Usage - Fatal编程技术网

python在消耗内存时使用系统cpu时间

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

我注意到,当python(可能只是
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)
linux
time
命令的结果:

而且:

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