Esempio n. 1
0
    def test_runs(self):
        for file in ["test.psm", "test_int.psm"]:
            print("TESTING PSM FILE %s" % file)
            self.a = Assembler(file)
            self.a.parse()
            # print the debug representation of each line in the test file
            for line in self.a.instructions:
                print(repr(line))

            self.proc = Processor()
            self.proc.set_instructions(self.a.convert())

            executed = 0
            start_time = time.time()
            while not self.proc.outside_program():
                self.proc.execute()
                executed += 1
                if (time.time() - start_time) > AssemblerTest.TIMEOUT:
                    raise TimeoutError("Simulation never finished within timeout %.1f" % (time.time() - start_time))

            dur = time.time() - start_time
            ops_per_sec = executed / dur
            eff_khz = 2.0 / 1000.0 * ops_per_sec  # on PicoBlaze, one operation takes two clocks
            print("--- %8.3f seconds, %d ops     ---" % (dur, executed))
            print("--- %8.0f ops per sec ---" % ops_per_sec)
            print("--- %8.1f KHz clock   ---" % eff_khz)

            self.assertTrue(True)
Esempio n. 2
0
class ProcTest(unittest.TestCase):


    def setUp(self):
        self.processor = Processor()
        
    
    def test_readCores_invalidData(self):
        self.assertRaises(InvalidDataError, self.processor._readCores, None)
        self.assertRaises(InvalidDataError, self.processor._readCores, '')
    
    
    def test_readCores(self):
        data = """cpu  2255 34 2290 22625563 6290 127 456
cpu0 1132 34 1441 11311718 3675 127 438
cpu1 1123 0 849 11313845 2614 0 18
intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...]
ctxt 1990473
btime 1062191376
processes 2915
procs_running 1
procs_blocked 0
"""
        self.processor._readCores(data)
        self.assertEquals(len(self.processor.cores), 2)        
        

    def test_readFreqs_invalidData(self):
        self.assertRaises(InvalidDataError, self.processor._readFreqs, None)
        self.assertRaises(InvalidDataError, self.processor._readFreqs, '')
    
    
    def test_readFreqs(self):
        data = """3600000 2089
3400000 136
3200000 34
3000000 67
2800000 172488
"""
        self.processor._readFreqs(data)
        freqs = [2800000, 3000000, 3200000, 3400000, 3600000]
        self.assertEquals(self.processor._availableFreqs, freqs)
Esempio n. 3
0
    def exec(self, processor: Processor):
        # retrieve the memory rows' binary directly without converting to decimal
        reg_row = processor.memory.REGISTERS[self.register].values
        if not self.literal:
            # look up the register binary
            bits = processor.memory.REGISTERS[self.argument].values
        else:
            # retrieve the converted literal as binary
            bits = self.argument.values

        zipped = zip(reg_row, bits)
        bits = list(map(lambda t: self.operator(t[0], t[1]), zipped))
        # set the memory row bits directly
        processor.memory.REGISTERS[self.register].values = bits

        # carry always set to 0 for these ops
        processor.set_carry(False)

        # increment pc
        processor.manager.next()
Esempio n. 4
0
def main():
    proc = Processor()
    proc.detect()
    T_states = get_T_States(
        proc.cores[0])  #assume all cores have the same T-states

    print 'Starting...'

    for i in T_states:
        output = open('T%d.txt' % i, 'w')

        print '-' * 30
        print 'Setting T%d...' % i
        for j in range(proc.getCoreCount()):
            set_T_State(i, j)

        print 'Executing Stress...'
        stress = Stress()
        stress.cmd([
            'stress', '--cpu', '50', '--timeout',
            '%ss' % experiment_interval
        ])
        stress.start()

        total_time = 0.0
        while stress.isAlive():
            t0 = time()
            sleep(1)
            proc.updateTemp()
            elapsed = time() - t0
            total_time += elapsed
            string = ''
            output.write('%d' % int(total_time))
            for core in proc.cores:
                string += 'Core%d: %2.1f ' % (core.number, core.temperature)
                output.write(' %f' % core.temperature)

            output.write('\n')
            print string

        output.close()
        for j in range(proc.getCoreCount()):
            set_T_State(0, j)

        print 'Cooling down...'
        sleep(cooldown_interval)
Esempio n. 5
0
def main():
    proc = Processor()
    proc.detect()
    freqs = proc.availableFreqs()
    uc = UserspaceController(proc)
    uc.setup()

    print 'Starting...'

    for i in freqs:
        output = open('freq%d.txt' % i, 'w')

        print '-' * 30
        print 'Setting Frequency %d...' % i
        uc.setSpeed(i)

        print 'Executing Stress...'
        stress = Stress()
        stress.cmd([
            'stress', '--cpu', '50', '--timeout',
            '%ss' % experiment_interval
        ])
        stress.start()

        total_time = 0.0
        while stress.isAlive():
            t0 = time()
            sleep(1)
            proc.updateTemp()
            elapsed = time() - t0
            total_time += elapsed
            string = ''
            output.write('%d' % int(total_time))
            for core in proc.cores:
                string += 'Core%d: %2.1f ' % (core.number, core.temperature)
                output.write(' %f' % core.temperature)

            output.write('\n')
            print string

        output.close()
        uc.setSpeed(0)

        print 'Cooling down...'
        sleep(cooldown_interval)
Esempio n. 6
0
class ServerTest(unittest.TestCase):

    core = Core()
    proc = Processor()
    proc.cores = [core]
    server = Server()
    server.processor = proc
    server.processor.availableFreqs = [1.0]
    cont = DVFSController(server)
    server.dvfsCont = cont
    server._status = Server.OFF
    server.WAKE_UP_TIME = 0

    def testTurnOn(self):
        self.server.turnOn()
        #if the server is already on, nothing should happen:
        self.server.turnOn()

    def testTurnOff(self):
        self.server._status = Server.ON
        self.server.turnOff()
        #if the server is already off, nothing should happen:
        self.server.turnOff()

    def testSwitching(self):
        '''
        Switching a server ON, then OFF then ON again
        '''
        self.server.turnOn()
        self.server.turnOff()
        self.server.turnOn()

    def testReadSensors(self):
        s = Server()
        core = Core()
        s.processor.cores.append(core)
        core = Core()
        s.processor.cores.append(core)
        s.updateSensors()
        '''
Esempio n. 7
0
def main():
    proc = Processor()
    proc.detect()
    T_states = get_T_States(proc.cores[0]) #assume all cores have the same T-states
    
    print 'Starting...'
    
    for i in T_states:
        output = open('T%d.txt' % i,'w')
        
        print '-' * 30 
        print 'Setting T%d...' % i
        for j in range(proc.getCoreCount()):
            set_T_State(i,j)
            
        print 'Executing Stress...'   
        stress = Stress()
        stress.cmd(['stress', '--cpu', '50', '--timeout', '%ss' % experiment_interval])     
        stress.start()
        
        total_time = 0.0
        while stress.isAlive():
            t0 = time()  
            sleep(1)                      
            proc.updateTemp()
            elapsed = time() - t0
            total_time += elapsed
            string = ''
            output.write('%d' % int(total_time))
            for core in proc.cores:
                string += 'Core%d: %2.1f ' % (core.number,core.temperature)
                output.write(' %f' % core.temperature)
                
            output.write('\n')            
            print string                       
        
        output.close()
        for j in range(proc.getCoreCount()):
            set_T_State(0,j)
        
        print 'Cooling down...'
        sleep(cooldown_interval)
Esempio n. 8
0
 def setUp(self):
     self.proc = Processor()
     self.r = Memory.MEMORY_IMPL(Memory.REGISTER_WIDTH)
Esempio n. 9
0
class OperationTests(unittest.TestCase):
    def setUp(self):
        self.proc = Processor()
        self.r = Memory.MEMORY_IMPL(Memory.REGISTER_WIDTH)

    def test_arithmetic_ops_stress(self):
        for key, o in op.ArithmeticOperation.OPS.items():
            eq = op.ArithmeticOperation.TESTING_EQUIVALENTS[key]
            for i in range(0, ITERATIONS):
                v1 = random.randint(0, MAX)
                v2 = random.randint(0, MAX)
                self.proc.memory.set_register('s1', v1)
                self.proc.memory.set_register('s2', v2)
                op.ArithmeticOperation(o, ['s1', 's2']).exec(self.proc)
                self.assertEqual(self.proc.memory.fetch_register('s1'), make_positive(eq(v1, v2)))

    def test_arithmetic_ops_stress_const(self):
        for key, o in op.ArithmeticOperation.OPS.items():
            eq = op.ArithmeticOperation.TESTING_EQUIVALENTS[key]
            for i in range(0, ITERATIONS):
                v1 = random.randint(0, MAX)
                c1 = random.randint(0, MAX)
                self.proc.memory.set_register('s1', v1)
                op.ArithmeticOperation(o, ['s1', c1]).exec(self.proc)
                self.assertEqual(self.proc.memory.fetch_register('s1'), make_positive(eq(v1, c1)))

    def test_arithmetic_ops_stress_sum(self):
        for key, o in op.ArithmeticOperation.OPS.items():
            eq = op.ArithmeticOperation.TESTING_EQUIVALENTS[key]
            s = random.randint(1, 100)
            self.proc.memory.set_register('s1', s)
            for i in range(0, ITERATIONS):
                v = random.randint(1, 10)
                op.ArithmeticOperation(o, ['s1', v]).exec(self.proc)
                s = make_positive(eq(s, v))
                self.assertEqual(self.proc.memory.fetch_register('s1'), s)

    def test_bitwise_ops_stress(self):
        for o in op.BitwiseOperation.OPS.values():
            for i in range(0, ITERATIONS):
                v1 = random.randint(0, MAX)
                self.proc.memory.set_register('s1', v1)
                self.proc.set_carry(False)
                operation = op.BitwiseOperation(o, ['s1'])
                operation.exec(self.proc)
                r = Memory.MEMORY_IMPL(Memory.REGISTER_WIDTH)
                r.set_value(v1)
                r.values = o(operation, r)
                self.assertEqual(self.proc.memory.fetch_register('s1'), r.value)

    def test_bitwise_ops(self):
        dummy = op.BitwiseOperation(op.BitwiseOperation.OPS["RL"], ["DUMMY"])
        dummy.proc = Processor()
        self.r.set_value(32)
        self.r.values = op.BitwiseOperation.shift_right_zero(dummy, self.r)
        self.assertEqual(self.r.value, 16)

        self.r.set_value(32)
        self.r.values = op.BitwiseOperation.shift_left_zero(dummy, self.r)
        self.assertEqual(self.r.value, 64)

        for i in range(0, ITERATIONS):
            v1 = random.randint(0, MAX)
            c = ((v1 << 1) | ((v1 & 0x80) >> 7)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.rotate_left(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) | ((v1 & 1) << 7))
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.rotate_right(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 << 1) & 0xFE) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_left_zero(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) & 0x7F) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_right_zero(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 << 1) & 0xFE | 1) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_left_one(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) & 0x7F | (1 << 7)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_right_one(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 << 1) & 0xFE | (v1 & 1)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_left_x(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) & 0x7F | (v1 & 0x80)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_right_x(dummy, self.r)
            self.assertEqual(self.r.value, c)

            for b in [True, False]:
                self.proc.set_carry(b)
                c = (((v1 << 1) & 0xFE) | self.proc.external.carry) % (MAX + 1)
                self.proc.memory.set_register('s1', v1)
                o = op.BitwiseOperation(op.BitwiseOperation.OPS["SLA"], ['s1'])
                o.exec(self.proc)
                self.assertEqual(self.proc.memory.fetch_register('s1'), c)

                self.proc.set_carry(b)
                c = (((v1 >> 1) & 0x7F) | (self.proc.external.carry << 7)) % (MAX + 1)
                self.proc.memory.set_register('s1', v1)
                o = op.BitwiseOperation(op.BitwiseOperation.OPS["SRA"], ['s1'])
                o.exec(self.proc)
                self.assertEqual(self.proc.memory.fetch_register('s1'), c)

    def test_call(self):
        o = op.FlowOperation(op.FlowOperation.OPS["CALL"], [0x297])
        o.exec(self.proc)
        self.assertEqual(self.proc.manager.pc, 0x297)

        o = op.FlowOperation(op.FlowOperation.OPS["CALL"], [0x0])
        o.exec(self.proc)
        self.assertEqual(self.proc.manager.pc, 0x0)

        o = op.FlowOperation(op.FlowOperation.OPS["CALL"], [0x3FF])
        o.exec(self.proc)
        self.assertEqual(self.proc.manager.pc, 0x3FF)

        o = op.FlowOperation(op.FlowOperation.OPS["CALL"], [0x400])
        o.exec(self.proc)
        self.assertEqual(self.proc.manager.pc, 0x0)
Esempio n. 10
0
 def setUp(self):
     self.proc = Processor()
Esempio n. 11
0
class ProcessorTests(unittest.TestCase):
    def setUp(self):
        self.proc = Processor()

    def test_performance(self):
        v1 = random.randint(0, MAX)
        v2 = random.randint(0, MAX)
        self.proc.memory.set_register('s1', v1)
        self.proc.memory.set_register('s2', v2)
        self.proc.memory.set_register('s4', v2)
        for o in op.ArithmeticOperation.OPS.values():
            for i in range(0, 330 // len(op.ArithmeticOperation.OPS)):
                instr = op.ArithmeticOperation(o, ['s1', 's2'])
                self.proc.add_instruction(instr)

        for o in op.BitwiseOperation.OPS.values():
            for i in range(0, 330 // len(op.BitwiseOperation.OPS)):
                instr = op.BitwiseOperation(o, ['s1'])
                self.proc.add_instruction(instr)

        for o in op.LogicOperation.OPS.values():
            for i in range(0, 330 // len(op.LogicOperation.OPS)):
                instr = op.LogicOperation(o, ['s4', 's2'])
                self.proc.add_instruction(instr)

        # repeat these ops while s3 is not FF
        self.proc.add_instruction(op.ArithmeticOperation(op.ArithmeticOperation.OPS["ADD"], ['s3', 1]))
        self.proc.add_instruction(op.CompareOperation(op.CompareOperation.OPS["COMPARE"], ['s3', 0xFF]))
        self.proc.add_instruction(op.FlowOperation(op.FlowOperation.OPS["JUMP NZ"], [0x000]))

        executed = 0
        start_time = time.time()
        while not self.proc.outside_program():
            self.proc.execute()
            executed += 1

        dur = time.time() - start_time
        ops_per_sec = executed / dur
        eff_khz = 2.0 / 1000.0 * ops_per_sec  # on PicoBlaze, one operation takes two clocks
        print("--- %8.3f seconds, %d ops     ---" % (dur, executed))
        print("--- %8.0f ops per sec ---" % ops_per_sec)
        print("--- %8.1f KHz clock   ---" % eff_khz)
        self.assertGreater(ops_per_sec, 10000)

    def test_compare_jump(self):
        self.proc.add_instruction(op.ArithmeticOperation(op.ArithmeticOperation.OPS["ADD"], ['s1', 1]))
        self.proc.add_instruction(op.CompareOperation(op.CompareOperation.OPS["COMPARE"], ['s1', 0xFF]))
        self.proc.add_instruction(op.FlowOperation(op.FlowOperation.OPS["JUMP NZ"], [0x000]))

        executed = 0
        while not self.proc.outside_program():
            self.proc.execute()
            executed += 1

        self.assertEqual(executed, 3*0xFF)

    def test_data_ops(self):
        self.proc.add_instruction(op.DataOperation(op.DataOperation.OPS["LOAD"], ['s1', 0xFF]))
        self.proc.add_instruction(op.DataOperation(op.DataOperation.OPS["STORE"], ['s1', 0x10]))
        self.proc.add_instruction(op.DataOperation(op.DataOperation.OPS["FETCH"], ['s2', 0x10]))
        self.proc.add_instruction(op.DataOperation(op.DataOperation.OPS["OUTPUT"], ['s2', 0x10]))

        executed = 0
        while not self.proc.outside_program():
            self.proc.execute()
            executed += 1

        self.assertEqual(self.proc.memory.fetch_register('s1'), 0xFF)
        self.assertEqual(self.proc.memory.fetch_register('s2'), 0xFF)
        self.assertEqual(self.proc.external.port_id, 0x10)
        self.assertEqual(self.proc.external.out_port, 0xFF)

        self.proc.add_instruction(op.DataOperation(op.DataOperation.OPS["INPUT"], ['s3', 0x40]))
        self.proc.external.set_int_port(0x88)
        self.proc.execute()

        self.assertEqual(self.proc.external.port_id, 0x40)
        self.assertEqual(self.proc.memory.fetch_register('s3'), 0x88)
Esempio n. 12
0
    def test_bitwise_ops(self):
        dummy = op.BitwiseOperation(op.BitwiseOperation.OPS["RL"], ["DUMMY"])
        dummy.proc = Processor()
        self.r.set_value(32)
        self.r.values = op.BitwiseOperation.shift_right_zero(dummy, self.r)
        self.assertEqual(self.r.value, 16)

        self.r.set_value(32)
        self.r.values = op.BitwiseOperation.shift_left_zero(dummy, self.r)
        self.assertEqual(self.r.value, 64)

        for i in range(0, ITERATIONS):
            v1 = random.randint(0, MAX)
            c = ((v1 << 1) | ((v1 & 0x80) >> 7)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.rotate_left(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) | ((v1 & 1) << 7))
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.rotate_right(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 << 1) & 0xFE) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_left_zero(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) & 0x7F) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_right_zero(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 << 1) & 0xFE | 1) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_left_one(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) & 0x7F | (1 << 7)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_right_one(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 << 1) & 0xFE | (v1 & 1)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_left_x(dummy, self.r)
            self.assertEqual(self.r.value, c)

            c = ((v1 >> 1) & 0x7F | (v1 & 0x80)) % (MAX + 1)
            self.r.set_value(v1)
            self.r.values = op.BitwiseOperation.shift_right_x(dummy, self.r)
            self.assertEqual(self.r.value, c)

            for b in [True, False]:
                self.proc.set_carry(b)
                c = (((v1 << 1) & 0xFE) | self.proc.external.carry) % (MAX + 1)
                self.proc.memory.set_register('s1', v1)
                o = op.BitwiseOperation(op.BitwiseOperation.OPS["SLA"], ['s1'])
                o.exec(self.proc)
                self.assertEqual(self.proc.memory.fetch_register('s1'), c)

                self.proc.set_carry(b)
                c = (((v1 >> 1) & 0x7F) | (self.proc.external.carry << 7)) % (MAX + 1)
                self.proc.memory.set_register('s1', v1)
                o = op.BitwiseOperation(op.BitwiseOperation.OPS["SRA"], ['s1'])
                o.exec(self.proc)
                self.assertEqual(self.proc.memory.fetch_register('s1'), c)
Esempio n. 13
0
 def setUp(self):
     s = Server()        
     self.proc = Processor()
     s.processor = self.proc
     s.processor.availableFreqs = [1.0]
     self.controller = DVFSController(s)
Esempio n. 14
0
@author: giulio
'''

import sys, os
sys.path.append(os.path.abspath('..'))

from SimpleXMLRPCServer import SimpleXMLRPCServer
from system.processor import Processor

# Create server
server = SimpleXMLRPCServer(("", 8568))

# Registers the XML-RPC introspection functions system.listMethods, system.methodHelp and system.methodSignature
server.register_introspection_functions()

myProc = Processor()


def getInfo():
    myProc.detect()
    print myProc
    return myProc


server.register_function(getInfo, 'getInfo')

try:
    print 'Use Control-C to exit'
    server.serve_forever()
except KeyboardInterrupt:
    print 'Exiting'
Esempio n. 15
0
 def setUp(self):
     self.processor = Processor()