[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[WitchTech 00143] ちょっとしたベンチマーク (Re: graph lib)
- Subject: [WitchTech 00143] ちょっとしたベンチマーク (Re: graph lib)
- From: Akira Kawamata <autumn@piedey.co.jp>
- Date: Fri, 28 Jul 2000 22:24:49 +0900
川俣です。
ちょっと気になったので、ベンチマークしてみました。
1) IRAMとSRAMのスピードの差は?
2) 8bitアクセスと16bitアクセスの差は?
3) 前述のビットシフトパターン、どれが本当に速い?
条件はTurbo-C 2.0の最適化無し。
言うまでもなく、このベンチマークは、ある状況での結果であって、状況が変
化すれば、結果も変わる可能性があります。念のため。
以下のテストの中でNULL LOOPは何もしない繰り返しだけのテスト。他のテス
トからこれの経過時間を引くと、ループ処理に関する時間を差し引いた処理のみ
の時間らしきものが得られるという仕組みです。
結果は以下の通り。
テスト名 秒 NULL LOOPの値を引いた値
NULL LOOP 4
IRAM 16bit 6 2
IRAM 8bit 6 2
SRAM 16bit 8 4
SRAM 8bit 7 3
x=1<<n; 7 3
x=bit[n]; 9 5
x=bit16[n]; 9 5
考察:
IRAMは16bitと8bitで速度に差はない。
SRAMは16bitと8bitで速度に差が出る。つまりSRAMに確保する場合は、8bitで
充分の変数は、intよりcharで確保すると有利。
IRAMはSRAMより高速。最大2倍程度の差が出ている。8bitなら差は小さいが
16bitは差が大きい。つまり、アクセス速度とバス幅の双方に差があると考えら
れる。
ビットシフトパターンは、やはり、x=1<<n;がもっとも高速。メモリ(IRAM)に
アクセスするよりもレジスタ内で処理する方が高速という、常識的な結論と言え
る。テストしていないがSRAM上なら、x=bit[n];はx=bit16[n];より速いと推測さ
れる。
使用したプログラムは以下の通り。
#include <stdio.h>
#include <sys/bios.h>
#define COUNT (1000000L)
datetime_t from, to;
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;
int iram16;
char iram8;
static int sram16;
static char sram8;
static unsigned char bit[8] = {1,2,4,8,16,32,64,128};
static unsigned int bit16[8] = {1,2,4,8,16,32,64,128};
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
}
rtc_get_datetime_struct( &to );
dump( "NULL LOOP", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
iram16++;
}
rtc_get_datetime_struct( &to );
dump( "IRAM 16bit access", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
iram8++;
}
rtc_get_datetime_struct( &to );
dump( "IRAM 8bit access", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
sram16++;
}
rtc_get_datetime_struct( &to );
dump( "SRAM 16bit access", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
sram8++;
}
rtc_get_datetime_struct( &to );
dump( "SRAM 8bit access", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
unsigned char x;
unsigned char n;
x = 1<<n;
}
rtc_get_datetime_struct( &to );
dump( "x = 1<<n;", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
unsigned char x;
unsigned char n;
x = bit[n];
}
rtc_get_datetime_struct( &to );
dump( "x = bit[n];", &from, &to );
rtc_get_datetime_struct( &from );
for( l=0L; l<COUNT; l++ ) {
unsigned int x;
unsigned int n;
x = bit16[n];
}
rtc_get_datetime_struct( &to );
dump( "x = bit16[n];", &from, &to );
}
(株)ピーデー 川俣 晶 (http://www.autumn.org/ mailto:autumn@piedey.co.jp)
ML Archives