[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00186] Re: ちょっとしたベンチマーク



 川俣です。

>  確かに、nビットシフトを、1ビットシフトn回でやるCPUと、バレルシフタで1
> 回に何ビットでもシフトできるのがありますね。
>  すっかり忘れてました^^;
>  そうすると、シフト数を変えた場合にベンチマークの数値が変わるかどうかも、
> きちんと調査した方がいいですね。今夜やってみましょう。
 調べました。
 0bitシフトと、7bitシフトを比較しましたが、所要時間に変化は無し。
 シフトするビット数を変えても、ソフトの所要時間は同じと考えていいと思い
ます。とすると、186互換というのは、インストラクションセットの互換だけで、
実行速度に関しては、数世代後のCPUに近い最適化がなされているのかもしれま
せん。

#include <stdio.h>
#include <sys/bios.h>

#define COUNT (1000000L*3)

datetime_t from, to;

typedef struct {
	char dummy;
	int oddData;
} ODD_DATA;

void dump( char far * msg, datetime_t far * from, datetime_t far * to )
{
	int n;
	static char buf[256];
	text_screen_init();
	n = (to->minute*60+to->second)-(from->minute*60+from->second);
	sprintf( buf, "%d sec", n );
	text_put_string(0,0,msg);
	text_put_string(0,1,buf);
	key_wait();
}

void main(int argc, char *argv[])
{
	long l;
	unsigned char x;
	unsigned char n;

	rtc_get_datetime_struct( &from );
	for( l=0L; l<COUNT; l++ ) {
	}
	rtc_get_datetime_struct( &to );
	dump( "NULL LOOP", &from, &to );

	n = 0;
	rtc_get_datetime_struct( &from );
	for( l=0L; l<COUNT; l++ ) {
		x = 1<<n;
	}
	rtc_get_datetime_struct( &to );
	dump( "n=0;", &from, &to );

	n = 7;
	rtc_get_datetime_struct( &from );
	for( l=0L; l<COUNT; l++ ) {
		x = 1<<n;
	}
	rtc_get_datetime_struct( &to );
	dump( "n=7;", &from, &to );
}

(株)ピーデー 川俣 晶 (http://www.autumn.org/ mailto:autumn@piedey.co.jp)



ML Archives