为什么两个完全相同的python代码块需要如此不同的时间来完成?
我有以下代码:为什么两个完全相同的python代码块需要如此不同的时间来完成?,python,time,struct,embedded-linux,mmap,Python,Time,Struct,Embedded Linux,Mmap,我有以下代码: from mmap import mmap from struct import unpack from time import time,sleep mmap_offset =0x44c00000 mmap_size =0x48ffffff-mmap_offset DCAN1 =0x481D0000-mmap_offset #DCAN1 registers TIRM 2.1 DCAN1_IF1CMD =0x100+DCAN1 w
from mmap import mmap
from struct import unpack
from time import time,sleep
mmap_offset =0x44c00000
mmap_size =0x48ffffff-mmap_offset
DCAN1 =0x481D0000-mmap_offset #DCAN1 registers TIRM 2.1
DCAN1_IF1CMD =0x100+DCAN1
with open("/dev/mem", "r+b") as f:
testMap=mmap(f.fileno(),mmap_size,offset=mmap_offset)
start1=time()
unpacked1=unpack("<L",testMap[DCAN1_IF1CMD:DCAN1_IF1CMD+4])[0]
end1=time()
start2=time()
unpacked2=unpack("<L",testMap[DCAN1_IF1CMD:DCAN1_IF1CMD+4])[0]
end2=time()
print end2-start2,end1-start1
我不确定这是从哪里来的,我真的很想理解。有什么想法吗?我的版本和CPU信息如下
Linux version 3.2.34 (koen@Angstrom-F16-vm-rpm) (gcc version 4.5.4 20120305 (pre
release) (GCC) ) #1 Wed Nov 21 14:17:11 CET 2012
Processor : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 718.02
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc08
CPU revision : 2
Hardware : am335xevm
Revision : 0000
Serial : 0000000000000000
编辑:
我已经按照以下方式更新了代码以重新运行区块10次:
for i in xrange(10):
start2=time()
unpacked2=unpack("<L",testMap[DCAN1_IF1CMD:DCAN1_IF1CMD+4])[0]
end2=time()
print end2-start2
它似乎在3e-05安顿下来。。。无论我运行它10次还是100次。最有可能的重复加速是由于Python级别以下的缓存效果,即。EPython解释器(可能带有像pypy这样的JIT)、底层库(libc、stdlib等等),甚至处理器缓存。可能是初始化/缓存问题。顺便说一句,我不能复制这个。我的输出是
0.0014169216156 0.00145888328552
。如果执行该代码两次以上,会发生什么情况?第三次、第四次、第五次和第一百次执行的持续时间是多少?@Alfe,我已经用相关信息更新了代码,它似乎在30秒左右就解决了。你不会碰巧使用带有JIT编译器的Python版本(例如pypy)?这就清楚地解释了任何重复加速的原因。但缓存数据等其他方面也解释了加速。为什么这对你来说是个问题?
for i in xrange(10):
start2=time()
unpacked2=unpack("<L",testMap[DCAN1_IF1CMD:DCAN1_IF1CMD+4])[0]
end2=time()
print end2-start2
9.20295715332e-05
6.103515625e-05
3.00407409668e-05
3.09944152832e-05
3.09944152832e-05
3.00407409668e-05
3.09944152832e-05
3.09944152832e-05
2.98023223877e-05
3.09944152832e-05