我曾尝试使用tracemalloc跟踪编码的内存使用情况,发现对于浮点32数据和浮点64数据,它们的内存使用峰值相同。为什么?
输出屏幕截图:
浮动64:
import tracemalloc
import numpy as np
tracemalloc.start()
arr = np.zeros((100000000,), dtype=np.float64)
for i in range(100000000):
arr[i] = i
current, peak = tracemalloc.get_traced_memory()
#current memory is the memory the code is currently using and
#peak memory is the maximum space the program used while executing.
tracemalloc.stop()
print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")
输出:
Current memory usage is 800.14981MB; Peak was 800.160145MB
第32条:
import tracemalloc
import numpy as np
tracemalloc.start()
arr = np.zeros((100000000,), dtype=np.float32)
arr = arr.astype(np.float32)
for i in range(100000000):
arr[i] = i
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")
输出:
Current memory usage is 400.149626MB; Peak was 800.149468MB
您可以看到,这两个代码段并不相同。在第二个代码段中有一个附加语句
该语句(即使
arr
已经具有类型np.float32
):arr
因此,峰值内存加倍
相关问题 更多 >
编程相关推荐