C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.97926 の関連記事表示

<< 0 >>
■97926  Re[4]: 同じコードで実行時間が異なる理由
□投稿者/ しま -(2021/08/10(Tue) 01:10:22)
    No97925 (山善 さん) に返信
    > しまさん
    >
    > ありがとうございます。
    >
    > 2つ目のループに関しては納得しました。
    > このような仕組みになっていたのですね。
    >
    >
    >
    > 3つ目のループに関してですが
    > x86モードでビルドした場合には、違いが見られたのですが
    > x64モードにすると違いは見られなくなりました。
    >
    >
    > しかし、配列のサイズはたったの40MBなので、
    > 32bitの壁である2GBよりかは十分に小さいので関係ないと思います。
    >
    > 主記憶は32GBを使っており、
    > CPUには
    > https://ark.intel.com/content/www/jp/ja/ark/products/94456/intel-core-i7-6950x-processor-extreme-edition-25m-cache-up-to-3-50-ghz.html
    >
    > これを使っています。
    >
    > キャッシュ25MBと書かれてあるので、
    > 40MBに近いですが、わずかに小さいので、
    > 一つ目の配列を宣言した時点でキャッシュは足りなくなって
    > 主記憶を使うため、
    > 二つ目の配列と速度に差異は出なくなると思います。
    >
    > 一体、何が原因でしょうか?
    >

    少し調べてみました(キャッシュはあなたが考えいるように単純ではありません)。
    あまり古くないプロセッサー内部のキャッシュは3階層になっていて、 i7-6950 では次のようになっている様です

    L3: 25 MB
    L2: 256KB
    L1: 32KB

    しかも、キャッシュメモリーの内すべてがデーター領域に割当たっているわけではないので、 25MB のキャッシュ中にどれだけ
    Hai() や Hai2() やが居るかはある瞬間、瞬間で変わってしまうでしょう。

    常に、特定のアプリケーションだけが、キャッシュ中に存在するわけではないことを忘れてはいけないと思います。
    OS や サービスやアプリケーションなどがキャッシュに同居しているのですから。
記事No.97921 のレス /過去ログ170より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -