« HISTORY OF COCA-COLA AND MCDONALD'S | トップページ | やわらかパン屋さん♪ »

2008年12月12日 (金)

先生!何となく桁外れに遅くなります~!

メモリクリアしているだけなのに特定のPCだと
めちゃめちゃ遅くなるのはどう言う訳?

色々調べても単に転送速度と言うには、遅くなり過ぎる…。

と言う事で、試しに以下のプログラムを動作させてみる。

----------------------------------------
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define _SIZE 256*256
char buffer[_SIZE*4*4];
void main( void )
{
    int    i;
    DWORD    start, end;

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*1);
    end        = GetTickCount( );
    printf( "256*256*1   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*2);
    end        = GetTickCount( );
    printf( "256*256*2   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*3);
    end        = GetTickCount( );
    printf( "256*256*3   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*4);
    end        = GetTickCount( );
    printf( "256*256*4   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*5);
    end        = GetTickCount( );
    printf( "256*256*5   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*6);
    end        = GetTickCount( );
    printf( "256*256*6   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*7);
    end        = GetTickCount( );
    printf( "256*256*7   : %5d\n", end - start );

    start    = GetTickCount( );
    for(i=0;i<1000;i++)
        memset(buffer,0,_SIZE*8);
    end        = GetTickCount( );
    printf( "256*256*8   : %5d\n", end - start );

    printf( "push any key.\n" );    _getch( );
}
----------------------------------------

結果は以下の通り…。

>256*256*1   :    10
>256*256*2   :    30
>256*256*3   :    50
>256*256*4   :    81
>256*256*5   :   480
>256*256*6   :   882
>256*256*7   :  1241
>256*256*8   :  1723
>push any key.

若干と言うかかなり誤差があると思うけど…
知りたい事が分かったのでよしとする!

「256*256*1~4」は、間隔が「20」ぐらいですが…
「256*256*5~8」は、間隔が「400」ぐらいになります…。

「256*256*4~5」を堺に20倍遅くなってる…!?

ちなみにこの遅くなるPCのCPUは、「Pentium III 1GHz」だ。

「Pentium III」のキャッシュって「256KB」…
それをバイトで書き直すと「262,144BYTE」…
って事は、丁度「=256*256*4BYTE」…
って事は、キャッシュに丁度収まったから高速…
って事らしい…。

キャッシュ恐るべし!

ちなみに、昔キャッシュの効力を確認するために
BIOSでキャッシュを全て切って起動すると
数十分たたないとたってもディスクトップに辿り着けません…。(汗)

キャッシュ恐るべし!

でも最近のCPUは、キャッシュが6MBとかあるので
およそ足りなくなることは無いかと…。

…多分…。

2008年12月15日------------------
ちょこっと修正。

|

« HISTORY OF COCA-COLA AND MCDONALD'S | トップページ | やわらかパン屋さん♪ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/43394291

この記事へのトラックバック一覧です: 先生!何となく桁外れに遅くなります~! :

« HISTORY OF COCA-COLA AND MCDONALD'S | トップページ | やわらかパン屋さん♪ »