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)
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
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)
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