[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: memmove,memset



鈴木(康)です。
<200003231401.OAA17760@atropos.fsn.7n1umj>の記事において
kensyu@y.email.ne.jpさんは書きました。

  | 神木です。
  | わりと脇道ですが、...
  | 
  |    >X-Ml-Count: 2086
  |    >だいたい メモリバンド幅+ α キャッシュ残留分ぐらいで止まるみたいで。
  |    >だから PenII は、520MB/sec ぐらいなんでしょう。
  |    >  | Pentium II 450(?) -O3だと
  |    >  | memcpy       : 268817 k byte/sec
  |    >  | memmove_fwd  : 265251 k byte/sec
  |    >  | memmove_back : 264550 k byte/sec
  |    >  | memset       : 341296 k byte/sec
  |    >  | xmemset      : 338983 k byte/sec
  |    >  | xmemmove_fwd : 221238 k byte/sec
  |    >  | xmemmove_back: 235294 k byte/sec
  | 
  | PenII の↑は もしかしてオンチップの 2nd cache 速度を測ってません?
  | 総転送量は 100kB だから 2nd cache に入りますよね?

あ、かも知れないです。
ちょっと技を使えば、gcc からキャッシュフラッシュが呼ばれる
みたいなんですが、hpcmips では インプリメントされてなくて
リンクエラーになるんでやめました。

ちなみに、bench マークの memmove,memset ちょっとバグっています。
# 比較対象用だから bugfix しなくてよいとは思いますが。

  | ちなみにオンチップ 2nd cache が 256KB あって
  | あからさまに 2nd cache 測ってるだけの K6-III/400 だと
  | こんなん↓になりました。
  | 
  | memcpy       : 492610 k byte/sec
  | memmove_fwd  : 456621 k byte/sec
  | memmove_back : 520833 k byte/sec
  | xmemset      : 769230 k byte/sec
  | xmemmove_fwd : 531914 k byte/sec
  | xmemmove_back: 490196 k byte/sec
  | 
  | 転送量を 1MB にするとここまで落ちます:
  | 
  | memcpy       : 117647 k byte/sec
  | memmove_fwd  : 121951 k byte/sec
  | memmove_back :  77519 k byte/sec
  | memset       : 142857 k byte/sec
  | xmemset      : 135135 k byte/sec
  | xmemmove_fwd :  78740 k byte/sec
  | xmemmove_back:  75187 k byte/sec

ちなみに
一次キャッシュに残るようにすると、それはもうすさまじい値になります。

--
					鈴木 康司 @NEC
					suz@hpc.bs1.fc.nec.co.jp
					TEL 0423-33-5381