Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
    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