def TestParams(): # Run this with a stop instruction and examine the registers prgm = Program() code = prgm.get_stream() proc = Processor() #r_sum = code.acquire_register(reg = 1) r_sum = prgm.gp_return r_current = prgm.acquire_register() # Zero the sum code.add(spu.xor(r_sum, r_sum, r_sum)) for param in [spu_param_1, spu_param_2, spu_param_3, spu_param_4, spu_param_5, spu_param_6, spu_param_7, spu_param_8, spu_param_9, spu_param_10]: copy_param(code, r_current, param) code.add(spu.a(r_sum, r_sum, r_current)) code.add(spu.ceqi(r_current, r_sum, 55)) #code.add(spu.ori(code.gp_return, r_current, 0)) code.add(spu.brz(r_current, 2)) code.add(spu.stop(0x200A)) code.add(spu.stop(0x200B)) params = spu_exec.ExecParams() params.p1 = 1 params.p2 = 2 params.p3 = 3 params.p4 = 4 params.p5 = 5 params.p6 = 6 params.p7 = 7 params.p8 = 8 params.p9 = 9 params.p10 = 10 prgm += code r = proc.execute(prgm, params = params, stop = True) assert(r[0] == 55) assert(r[1] == 0x200A) # print 'int result:', r return
def TestParams(): # Run this with a stop instruction and examine the registers code = InstructionStream() proc = Processor() r_sum = code.acquire_register() r_current = code.acquire_register() # Zero the sum code.add(spu.xor(r_sum, r_sum, r_sum)) for param in [ spu_param_1, spu_param_2, spu_param_3, spu_param_4, spu_param_5, spu_param_6, spu_param_7, spu_param_8, spu_param_9, spu_param_10 ]: copy_param(code, r_current, param) code.add(spu.a(r_sum, r_sum, r_current)) code.add(spu.ceqi(r_current, r_sum, 55)) code.add(spu.brz(r_current, 2)) code.add(spu.stop(0x200A)) code.add(spu.stop(0x200B)) params = spu_exec.ExecParams() params.p1 = 1 params.p2 = 2 params.p3 = 3 params.p4 = 4 params.p5 = 5 params.p6 = 6 params.p7 = 7 params.p8 = 8 params.p9 = 9 params.p10 = 10 r = proc.execute(code, params=params) assert (r == 0xA) # print 'int result:', r # while True: # pass return
def _copy_params(params, rank, size): """ Copy params. """ ret = spu_exec.ExecParams() ret.addr = params.addr ret.p1 = rank ret.p2 = size ret.p3 = params.p3 ret.size = params.size ret.p4 = params.p4 ret.p5 = params.p5 ret.p6 = params.p6 ret.p7 = params.p7 ret.p8 = params.p8 ret.p9 = params.p9 ret.p10 = params.p10 return ret
If raw_data_size is present and set on the code object, set the block_size and offset parameters. The parameters for parallel execution are: p1 = rank ($r3.2) p2 = size ($r3.3) p4 = block_size ($r4.2) p5 = offset ($r4.3) """ # Setup the parameter structure if params is None: params = spu_exec.ExecParams() elif type(params) is not self.exec_module.ExecParams: # Backwards compatibility for list-style params _params = self.exec_module.ExecParams() _params.p1, _params.p2, _params.p3 = params params = _params if len(prgm) == 0: return None prgm.cache_code() bi = prgm.render_code.buffer_info() params.addr = bi[0] params.size = bi[1] * prgm.render_code.itemsize