2009-04-04 9 views
49

私はアルゴリズムをプロファイルして最適化しようとしています。さまざまなプロセッサ上のキャッシュの具体的な影響を理解したいと思います。最近のIntel x86プロセッサ(例えば、Q9300)では、キャッシュ構造に関する詳細情報を見つけることが非常に難しい。特に、ポストプロセッサ仕様にL1キャッシュへの参照が含まれていないほとんどのウェブサイト(Intel.comを含む)は、 L1キャッシュが存在しないか、何らかの理由でこの情報が重要でないと考えられるためですか? L1キャッシュの削除に関する記事やディスカッションはありますか?Intel x86プロセッサのL1メモリキャッシュはどこに文書化されていますか?

[編集] さまざまなテストと診断プログラム(主に以下の回答で説明したもの)を実行した後、私はQ9300に32K L1データキャッシュがあると判断しました。私はまだこの情報が来るのがとても難しい理由について明確な説明を見つけていません。私の現在の作業理論は、L1キャッシュの詳細がインテルの営業秘密として扱われているということです。

+0

これは、以下のコメントにノーマンラムジーによって示されたが、私は彼が一度に何を意味するのか認識していませんでした。 [CPUID](http://en.wikipedia.org/wiki/CPUID)は、キャッシュの詳細をクエリするために使用できるx86命令です。 – nobar

+0

私はちょうどLinuxで 'lscpu'コマンドを見つけました。これは、キャッシュサマリを含め、x86上のCPUデータを非常に見やすく表示します。 – nobar

答えて

58

Intelのキャッシュで仕様を見つけることはほぼ不可能です。私は昨年キャッシュのクラスを教えていたとき、私はインテル(コンパイラグループ内の)との友人にのスペックが見つかりませんでした。

待ってください!Jedは、彼の魂を祝福、Linuxシステム上で私たちのことを伝え、あなたは、カーネルの外に多くの情報を絞ることができます。

grep . /sys/devices/system/cpu/cpu0/cache/index*/* 

これは関連性、セットのサイズ、およびその他の情報の束を与えるだろう(ただし、レイテンシ)。 たとえば、私はAMDが自分の128K L1キャッシュを宣伝していますが、私のAMDマシンは64Kの分割IとDキャッシュを持っていることを知りました。今ジェドのほとんどが廃止されたおかげである


つの提案:

  • AMDは、そのキャッシュに関するより多くの情報を公開し、あなたは、少なくとも現代のキャッシュに関するいくつかの情報を得たことができます。たとえば、昨年のAMD L1キャッシュは、サイクル(ピーク)あたり2ワードを提供しました。

  • オープンソースツールvalgrindには、すべての種類のキャッシュモデルが含まれており、プロファイリングとキャッシュの動作を理解する上で非常に役立ちます。これには、KDE ​​SDKの一部である非常に素晴らしい視覚化ツールkcachegrindが付属しています。例えば


:Q3 2008年、AMD K8/K10 CPUが各L1I/L1Dキャッシュを分割64kBのと、64本のバイトのキャッシュラインを使用します。L1Dは2ウェイ・アソシエイティブでL2と排他的で、3サイクルのレイテンシを持ちます。 L2キャッシュは16ウェイアソシアティブで、レイテンシは約12サイクルです。

AMD Bulldozer-family CPUsクラスタあたり16キロバイトの4ウェイアソシエイティブL1D(コアあたり2個)の分割L1を使用します。

Intel CPUは、ペンティアムMからHaswellからSkylakeまで、それ以降はおそらく多くの世代でL1を同じように保っています。L1Dは8ウェイアソシアティブである32kBのIキャッシュとDキャッシュを分割します。 DDR DRAMのバースト転送サイズと一致する64バイトのキャッシュライン。負荷使用の待ち時間は〜4サイクルです。

パフォーマンスとマイクロアーキテクチャのデータへのリンクについては、タグwikiを参照してください。

+0

私はすでにkcachegrindの使用を試み始めています。私が今までに見つけた限りでは、キャッシュの詳細が何であるかをツールに伝える必要があります。あなたは "キャッシュモデル"を述べました。 valgrindが私が探している詳細を知っているかもしれないと言っているのですか? – nobar

+0

はい、間違いなく--- valgrindはCPUIDを照会し、CPUを認識するとそのCPUのモデルを使用します。 –

+0

Linux(cpuidとx86info)で実行している他のツールのいくつかと同じように、valgrindは私のマシンのキャッシュ設定について混乱しているようです。たぶんこれは私のCPUを認識しないか、インテルが情報を保留していることを示すものに過ぎません。 – nobar

3

L1キャッシュはこれらのプラットフォームに存在します。メモリとフロントサイドバスの速度がCPUの速度を超えるまで、これはほぼ確実に成り立ちますが、これは非常に長いことです。

GetLogicalProcessorInformationを使用すると、ある程度のキャッシュ情報(サイズ、行サイズ、結合性など)を取得できます。Win7のExバージョンは、どのコアがどのキャッシュを共有しているかなど、さらに多くのデータを提供します。 CpuZもこの情報を提供します。

+0

提案していただきありがとうございます。私はCpuZを実行することができました。私のL1データキャッシュは32Kバイト(コアあたり)だったと私に言いました。今私はその情報を信頼するかどうかを判断する必要があります。 – nobar

+0

あなたはそれを信じることができます。 – Michael

+0

なぜCpuZの精度に自信があるのか​​説明できますか?このようなツールが存在するのはいいことですが、強い確信のあるデータを見つけることができないという事実によって私の自信が揺さぶられます。 – nobar

2

Locality of Referenceは、一部のアルゴリズムのパフォーマンスに大きな影響を与えます。 L1、L2(およびより新しいCPU L3)キャッシュのサイズと速度は、この点で明らかに大きな役割を果たします。行列乗算はそのようなアルゴリズムの1つです。

6

開発者の仕様ではなく、消費者の仕様を検討しています。 Here is the documentation you want.キャッシュサイズはプロセッサフ​​ァミリのサブモデルによって異なりますので、通常はIA-32開発マニュアルには含まれていませんが、NewEggなどで簡単に調べることができます。

編集:具体的に:ボリューム3Aの第10章(システム・プログラミング・ガイド)、最適化リファレンス・マニュアルの第7章、および潜在的にTLBのページ・キャッシングマニュアルで何か、私は1つがさらに出ていると仮定しますが、あなたが気にするよりもL1から。

+0

これらのマニュアルでは、実際のキャッシュデータが見つかりませんでした。ボリュームとページ番号を引用できますか? –

+0

「本当の」とはどういう意味なのか分かりませんが、最適化マニュアルの第7章には詳細が記載されています。 TLBとページキャッシングに関するマニュアル全体もあります。 *あなたが探しているものを知るのに役立ちます。 –

+0

システムプログラミングガイド第3A巻第10章もあります。 –

8

もう少し調査しました。チューリッヒのETH Zurichには、memory-performance evaluation toolというグループがあり、少なくともL1とL2のキャッシュのサイズに関する情報を得ることができます。このプログラムは、さまざまな読み取りパターンを実験的に試し、結果として得られるスループットを測定することによって機能します。簡略版はpopular textbook by Bryant and O'Hallaronのために使用されました。

+0

私はこれらを試しました(私も同様のプログラムを書いていました)。結果は、私のQ9300で32Kと3Mで不連続なパフォーマンス結果を示唆しています。助けてくれてありがとう! – nobar

24

このインテルマニュアル:インテル®64およびIA-32アーキテクチャー最適化リファレンス・マニュアルには、キャッシュに関する考慮事項が記載されています。

enter image description here

ページ46、セクション2.2.5.1 Intel® 64 and IA-32 Architectures Optimization Reference Manual

燃えるながらでもMicroSlopは...(キャッシュ使用とパフォーマンスを監視するために、より多くのツールの必要性に目覚め、そしてGetLogicalProcessorInformation() function例を持っていこのプロセスで長い名前の関数名を作成する際の新しいトレイル)私はコード化すると思います。 Hazwellが、それはキャッシュを最大限に活用する方法を重大な疑義があった場合は、Inside the Tock; Haswell's Architecture

から、キャッシュ・ロードのパフォーマンス2Xを向上this presentationクリフでクリックして、以前はアズールの、はず:I

UPDATEあらゆる疑念を払拭する彼の言葉では、 "記憶は新しいディスクです!"

Haswell’s URS (Unified Reservation Station)

UPDATE II:Skylakeマイクロアーキテクチャの大幅に改善キャッシュ性能仕様。

SkyLake Cache Specifications

+0

偉大な発見、非常に有用! – nobar

+0

@nobar、ありがとう、その方向に向かっていたので、私はあなたのためにタクシーを持っているかもしれないと思った。 :) – RocketRoy

+0

@RocketRoyこのキャッシュに関する質問をご覧になれますか? http://stackoverflow.com/questions/30555623/how-many-bits-are-in-the-address-field-for-a-directly-mapped-cache – committedandroider

関連する問題