def run_kernel(src_code, image_src, block_size, args, nr_reg = 8, no_sequencer=True):
	''' Run a kernel, this assumes that the output is in buffer #1 and output is unscaled float. '''
	code = compile_code(src_code, args, block_size, nr_reg, no_sequencer)

	sim = Interpreter(code, image_src, block_size, 4, nr_reg)
	sim.run_kernel()
	return sim.gen_output_image(1, False, False, False)
Esempio n. 2
0
def test_sleep_wakeup2():
    ''' Test sleep and wakeup opcodes. '''
    block_size = (2, 2)
    def test_code_sleep(code, block_size, args):
        yield Sleep()

    code = Code()
    code.set_generator(test_code_sleep, block_size)

    image = zeros(block_size[1], block_size[0])
    sim = Interpreter(code, image, block_size)

    # check if attribute is correct
    assert sim.procs[0][0].is_powerdown() == False
    sim.run_kernel()
    assert sim.procs[0][0].is_powerdown() == True

    # check if attribute is correct after wakeup
    def test_code_sleep_wakeup(code, block_size, args):
        yield Sleep()
        yield WakeUp()
    code2 = Code()
    code2.set_generator(test_code_sleep_wakeup, block_size)

    sim2 = Interpreter(code2, image, block_size)
    assert sim2.procs[0][0].is_powerdown() == False
    sim2.run_kernel()
    assert sim2.procs[0][0].is_powerdown() == False 
Esempio n. 3
0
def test_lid():
    block_size = (2, 2)
    def test_code(code, block_size, args):
        yield Imm(code.r(7), 0)
        yield Lid(code.r(0), code.r(7))
        yield Imm(code.r(6), 1)
        yield Lid(code.r(1), code.r(6))
        yield Imm(code.r(6), block_size[0])
        yield Mul(code.r(0), code.r(0), code.r(6))
        yield Add(code.r(0), code.r(1), code.r(0))
        yield MemW(code.r(0), code.r(0))

    code = Code()
    code.set_generator(test_code, block_size)
    print str(code)

    image = zeros(block_size[1], block_size[0])
    sim = Interpreter(code, image, block_size)
    sim.run_kernel()

    out_image = sim.gen_output_image(0, False)
    width, height = block_size
    for i in xrange(height):
        for j in xrange(width):
            assert out_image[i][j] == (i*width + j)
Esempio n. 4
0
def test_sleep_wakeup():
    ''' Test sleep and wakeup opcodes. '''
    block_size = (2, 2)
    def test_code(code, block_size, args):
        yield Imm(code.r(0), 1)
        yield Sleep()
        yield Imm(code.r(0), 2)
        yield WakeUp()

    code = Code()
    code.set_generator(test_code, block_size)
    print str(code)

    image = zeros(block_size[1], block_size[0])
    sim = Interpreter(code, image, block_size)
    sim.run_kernel()
    # second imm should not be executed
    assert sim.procs[0][0].get_reg_by_name('r0') == 1