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) |
目いっぱい速くなってるねぇ。。。
って、ハイビジョンサイズだと、さすがに重いか
memcpy()の転送速度情報が、欲しい方へ、参考情報、ってことで。。。
C++:
- //#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;
- }



