連載1 高速なメモリーコピー その7
アライメント | パソコン1 Athlon | パソコン2 Celeron | ||||
memcpy() | ssememcpy | memcpy() | ssememcpy() | |||
パターン1 (dst+0, src+0) | 888 MB/s | 1442 MB/s | 1076 MB/s | 1554 MB/s | ||
パターン3 (dst+1, src+0) | 881 MB/s | 1350 MB/s | 473 MB/s | 1554 MB/s | ||
パターン3 (dst+0 src+1) | 887 MB/s | 1366 MB/s | 898 MB/s | 1522 MB/s | ||
パターン2 (dst+1, src+1) | 846 MB/s | 1445 MB/s | 709 MB/s | 1554 MB/s | ||
パターン3 (dst+3, src+2) | 845 MB/s | 1349 MB/s | 460 MB/s | 1554 MB/s |
パソコン1 Athlon | パソコン2 Celeron | |
CPU | Athlon64X2 4400+ 2.2GHz Socket 939 | Intel Celeron 420 (Conroe-L) 1.6GHz Socket 775LGA |
Chipset | NVIDIA nForce4 | i945G/GZ |
Memory | DDR400, 2GB(dual) read=3.6GB/s write=1.6GB/s | DDR2, 1GB (single) read=3.3GB/s write=1.2GB/s |
OS | WindowsXP Pro SP2 | Windows2000 Pro SP4 |
補足 | デスクトップPC | デスクトップPC |
全体的に観てssememcpy()がmemcpy()より1.5~3倍程度高速であることが判ります。
また、Athlonではどのパターンのmemcpy()も差が少ないですが、Celeronではアライメントが揃っていないと処理速度が半分以下まで低下する場合があります。これはcore2duoでも同様の傾向がみられました(データを送ってくださった方ありがとうございました)。
それから、ssememcpy()に着目すると、Celeronの方はどのパターンもほぼ同じ結果ですが、AthlonではSSE命令の実行速度が遅いため演算処理を含むパターン3が若干遅くなっています。
Celeronの方はCrystalMarkの書き込みテスト以上の速度が出ているのが少し気になるところですが、それについては不明です。
以上で、メモリーコピー編は終わりです。
- 関連記事
trackback
コメントの投稿
高速なメモリコピーについて
高速なメモリコピーを行う関数をintrinsic命令で実装してみまして、その際にamamanさんのこの記事が大変参考になりました。
この場を借りて御礼申し上げます。
なお、その関数のプログラムは、自分のブログで紹介させて頂いてます。
http://blog.goo.ne.jp/dc1394/e/3e32499e1e2a700e08b4e3e90780b957
ソースコード(プロジェクト)は以下に置いてあります。
https://skydrive.live.com/#cid=706AAA2BAD30EFEA&id=706AAA2BAD30EFEA%21177
何か問題があればすぐに消しますので、よろしくお願いいたします。
Re: 高速なメモリコピーについて
> 高速なメモリコピーを行う関数をintrinsic命令で実装してみまして、その際にamamanさんのこの記事が大変参考になりました。
> この場を借りて御礼申し上げます。
>
> なお、その関数のプログラムは、自分のブログで紹介させて頂いてます。
> http://blog.goo.ne.jp/dc1394/e/3e32499e1e2a700e08b4e3e90780b957
> ソースコード(プロジェクト)は以下に置いてあります。
> https://skydrive.live.com/#cid=706AAA2BAD30EFEA&id=706AAA2BAD30EFEA%21177
>
> 何か問題があればすぐに消しますので、よろしくお願いいたします。
ありがとうございます。どんどんご活用下さい。