0
我有下面的代碼:爲什麼兩個相同的python代碼塊需要完成不同的時間量?
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
其中重複地(以幾微秒內)給了我下面的輸出:
3.00407409668e-05 0.0001220703125
我不知道在哪裏,這是來自和真的很想明白。有什麼想法嗎?下面是我的版本和CPU信息。
Linux version 3.2.34 ([email protected]) (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
導致:
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
看來定居在3e-05 ......我是否運行它10次或100次。
也許這是一個初始化/緩存問題。順便說一句,我不能重現這一點。我的輸出是'0.0014169216156 0.00145888328552'。 – Alfe 2013-05-08 20:59:44
如果您執行該代碼超過兩次會發生什麼?第三次,第四次,第五次和第一百次執行的持續時間是多少? – Alfe 2013-05-08 21:02:14
@Alfe,我已經用相關信息更新了代碼,看起來好像它在30美元左右穩定 – Chris 2013-05-10 17:55:29