accesstimer
author Paul Crowley <paul@ciphergoth.org>
Sun Dec 28 13:09:37 2008 +0000 (2008-12-28)
changeset 132 8f4d41d003e2
parent 53 001ab356ba3e
permissions -rwxr-xr-x
Save on reallocations
paul@50
     1
#!/usr/bin/env python
paul@6
     2
paul@50
     3
import sys
paul@41
     4
paul@50
     5
sys.path.append("/home/paul/g/fetched/corepy-1.0")
paul@50
     6
paul@50
     7
import time
paul@50
     8
import array
paul@50
     9
paul@53
    10
import corepy.arch.x86.platform as env
paul@53
    11
import corepy.arch.x86.isa as x86
paul@53
    12
import corepy.arch.x86.types.registers as r
paul@53
    13
from corepy.arch.x86.lib.memory import MemRef
paul@50
    14
from corepy.lib.extarray import extarray
paul@50
    15
paul@50
    16
def timecmd(name, cmd, r):
paul@50
    17
    c = 0
paul@50
    18
    total = 0
paul@50
    19
    while total < 2:
paul@50
    20
        t = time.time()
paul@50
    21
        cmd()
paul@50
    22
        d = time.time()
paul@50
    23
        total += d - t
paul@50
    24
        c += 1
paul@57
    25
    print "%s %5.1f" % (name, total*(2.4E9)/(r*c))
paul@53
    26
paul@50
    27
reps = (1<<6)
paul@53
    28
paul@53
    29
code = env.InstructionStream()
paul@53
    30
code.add(x86.nop())
paul@53
    31
def callasm():
paul@53
    32
    for i in range(reps):
paul@53
    33
        params = env.ExecParams()
paul@53
    34
        env.Processor().execute(code)
paul@53
    35
timecmd("callasm", callasm, reps)
paul@53
    36
paul@50
    37
datasize = (1<<14)
paul@41
    38
paul@50
    39
def timeaccess(name, items, mask, store):
paul@50
    40
    def timereps():
paul@51
    41
        for i in xrange(reps):
paul@51
    42
            for j in xrange(items):
paul@50
    43
               store[j] ^= mask
paul@50
    44
    timecmd(name, timereps, datasize*reps)
paul@3
    45
paul@51
    46
timeaccess("snative", datasize>>2, 3, [0] * (datasize >> 2))
paul@50
    47
timeaccess("native", datasize>>2, 0xffffffff, [0] * (datasize >> 2))
paul@51
    48
timeaccess("sarray", datasize>>2, 3, array.array('L', [0] * (datasize >> 2)))
paul@50
    49
timeaccess("array", datasize>>2, 0xfffffff, array.array('L', [0] * (datasize >> 2)))
paul@51
    50
timeaccess("sulongs", datasize>>2, 3,  extarray('L', datasize >> 2))
paul@50
    51
timeaccess("ulongs", datasize>>2, 0xffffffff,  extarray('L', datasize >> 2))
paul@50
    52
timeaccess("ushorts", datasize>>1, 0xffff, extarray('H', datasize >> 1))
paul@5
    53