memcpy()の速度を計測してみた

2006年10月06日 20時05分 旧ブログより
memcpy()の性能テスト VC++版

C#版はこちら
インテルコンパイラによるC++版はこちら


今、仕事で、画像処理なんぞをやっており
1メガを超える画像データを、あっちにコピー、こっちにコピーしたり

そのとき、登場するのが、memcpy()命令@C++言語

この実行速度が気になったので、ちょいと計測してみた

CPU : AMD Athlon64x2 3800+(2.0GHz)
Memory : 1GB
OS : Windows XP Pro
C++ : Visual Studio 2005(VC++ 8.0)

テストに使ったソースは、一番最後に。。。
画像データ2000回の
memcpy()を実行
デバッグコンパイル リリースコンパイル
DVサイズ
720 * 480
32ビットピクセル
(1.3MB)
2,766ミリ秒
(999,566 B/ms)
2,719ミリ秒
(1,016,844 B/ms)
ハイビジョンサイズ
1280 * 960
32ビットピクセル
(4.8MB)
10,016ミリ秒
(981,469 B/ms)
9,781ミリ秒
(1,005,050 B/ms)
DVサイズなら、一枚転送するのに 1.3ミリ秒らしい
目いっぱい速くなってるねぇ。。。

って、ハイビジョンサイズだと、さすがに重いか

memcpy()の転送速度情報が、欲しい方へ、参考情報、ってことで。。。


//#define DUMMY_WIDTH  720 
//#define DUMMY_HEIGHT 480 
#define DUMMY_WIDTH  1280 
#define DUMMY_HEIGHT 960     

#define DUMMY_DEPTH  4 
#define DUMMY_BUFLEN     
       (DUMMY_WIDTH * DUMMY_HEIGHT * DUMMY_DEPTH)    

void CtestDlg::OnBnClickedButton1() 
{     

    // TODO: ここにコントロール通知ハンドラ コードを追加します。     

    CStatic *lbl; 
    char   stBuf[64]; 
    CString st;     

    BYTE *buf1 = new BYTE [ DUMMY_BUFLEN]; 
    BYTE *buf2 = new BYTE [ DUMMY_BUFLEN];     

    SYSTEMTIME stm; 
    GetSystemTime(&stm); 
    sprintf(stBuf,"%d_%d_%d_%d",   
            stm.wHour, stm.wMinute, stm.wSecond, stm.wMilliseconds);     

    st = stBuf; 
    lbl = (CStatic*)GetDlgItem(IDC_STATIC_LABEL1); 
    lbl->SetWindowTextW(st);     

    for(int i = 0; i < 2000; i++) 
    { 
        memcpy(buf1, buf2, DUMMY_BUFLEN); 
    }     

    GetSystemTime(&stm); 
    sprintf(stBuf,"%d_%d_%d_%d",  
            stm.wHour, stm.wMinute, stm.wSecond, stm.wMilliseconds);     

    st = stBuf; 
    lbl = (CStatic*)GetDlgItem(IDC_STATIC_LABEL2); 
    lbl->SetWindowTextW(st);     

    delete buf1; 
    delete buf2; 
}