CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

比較テスト(TMS320C30)

マンデルブロ集合計算の同じプログラムを他のCPUボードで動かしてみました

まずはテキサスのDSP TMS320C30です。
久しぶりに動かすのでプログラムのビルド方法をすっかり忘れていましたが
なんとか実装完了。ソース自体はほとんど修正なしでOKでした。

コンパイラはTMS320C30/40用のCL30.EXEで行っていますが
さすが浮動小数DSP用のコンパイラだけあってインラインで専用命令を生成してくれます
たとえばこれは判定関数mandel_chk()部分をコンパイラが吐いたアセンブラコードですが
全くムダがありません

TMS320C30 アセンブラコード
_mandel_chk:        
    push      fp
        ldiu      sp,fp
        ldiu      1,r1
        addi      5,sp
        ldfu      0.0000000000e+00,f0
        sti       r1,*+fp(5)
        cmpi      8192,r1
        bged      L13                   ; Branch
    nop
        stf       f0,*+fp(2)
        stf       f0,*+fp(1)
                                        ; Branch Occurs to L13
L10:        
        ldfu      *+fp(1),f2
        ldfu      *+fp(2),f1
        ldfu      f2,f0
        mpyf      *+fp(2),f1
        mpyf      *+fp(1),f2
        mpyf      2.0000000000e+00,f0
        subrf     f2,f1
        mpyf      *+fp(2),f0
        addf      *-fp(2),f1
        subf      *-fp(3),f0
        stf       f1,*+fp(3)
        stf       f0,*+fp(4)
        ldfu      f0,f1
        ldfu      *+fp(3),f0
        mpyf      *+fp(4),f1
        mpyf      *+fp(3),f0
        addf3     f0,f1,f0
        cmpf      4.0000000000e+00,f0
        bled      L12                   ; Branch
        ldile     1,r2
        ldfle     *+fp(4),f0
        ldfle     *+fp(3),f1
     :
     :

同じ部分を80386ボードで使ったコンパイラLSIC-86が生成したものは
浮動小数点の四則演算するにもわざわざライブラリ内関数を呼びに行くので
コプロがあってもオーバヘッドでかなり食われてしまいます

8086 アセンブラコード
mandel_chk_::
	PUSH	BP
	MOV	BP,SP
	SUB	SP,32
	PUSH	DX
	CALL	_ELDE_I##
	DB	0,0,0,0,0,0,0,0,0,0
;
	LEA	BX,[BP-8]
	CALL	_ESTD_SS##
	LEA	BX,[BP-16]
	CALL	_ESTPD_SS##
;
	MOV	AX,1
	JMP	_1
_2:
	LEA	BX,[BP+4]
	CALL	_ELDD_SS##
;
	LEA	BX,[BP-8]
	CALL	_ELDD_SS##
;
	LEA	BX,[BP-8]
	CALL	_ELDD_SS##
;
	CALL	_EMUL##
	LEA	BX,[BP-16]
	CALL	_ELDD_SS##
;
	LEA	BX,[BP-16]
	CALL	_ELDD_SS##
;
	CALL	_EMUL##
	CALL	_ESUB##
	CALL	_EADD##
	LEA	BX,[BP-24]
	CALL	_ESTPD_SS##
      :
      :

実行中の様子

イメージ 1


結果ですが演算時間は25分(クロック32MHz)。

ハードの違いはありますが、やはり生成されるコードの質による
影響も大きいです