0

UINT8 マトリックス [16] としてビットの 8x16 マトリックスがあります。

マトリックスを転置し、UINT16 マトリックス 2 [8] として保存します。

これはコードのタイム クリティカルな部分であるため、できるだけ早く実行する必要があります。MIPS プロセッサでこれを実現する賢い方法はありますか?

4

2 に答える 2

0

多分このようなもの:

  lbu $10, matrix
  lbu $11, matrix+1
  lbu $12, matrix+2
  lbu $13, matrix+3
  lbu $14, matrix+4
  lbu $15, matrix+5
  lbu $16, matrix+6
  lbu $17, matrix+7
  lbu $18, matrix+8
  lbu $19, matrix+9
  lbu $20, matrix+10
  lbu $21, matrix+11
  lbu $22, matrix+12
  lbu $23, matrix+13
  lbu $24, matrix+14
  lbu $25, matrix+15

  addiu $2, $0, 8
  addiu $9, $0, 256
loop:
  addiu $2, $2, -1
  srl $9, $9, 1
  addu $27, $0, $0

  and $26, $10, $9
  srlv $26, $26, $2
  or $27, $27, $26

  and $26, $11, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $12, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $13, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $14, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $15, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $16, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $17, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $18, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $19, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $20, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $21, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $22, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $23, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $24, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  and $26, $25, $9
  srlv $26, $26, $2
  sll $27, $27, 1
  or $27, $27, $26

  sll $3, $2, 1
  sh $27, transposed($3)
  bgez  $2, loop
  nop  


.data 0x2000
matrix:  
.byte 0x80
.byte 0x80
.byte 0x40
.byte 0x40
.byte 0x20
.byte 0x20
.byte 0x10
.byte 0x10
.byte 0x08
.byte 0x08
.byte 0x04
.byte 0x04
.byte 0x02
.byte 0x02
.byte 0x01
.byte 0x01

.data 0x3000
transposed:
.half 0
.half 0
.half 0
.half 0
.half 0
.half 0
.half 0
.half 0

入力行列を読み取り、ループを 8 回実行します (転置された行列の行ごとに 1 回)。

于 2011-10-26T19:35:38.080 に答える
0

これに役立つ特別な命令が MIPS 命令セットにあるとは思わないので、C でコーディングすることもできます。プロセッサ RTL にアクセスできる場合は、ユーザー定義命令を作成できます。 ..

于 2011-10-28T18:04:00.643 に答える