私は、SSEプリフェッチ命令のインラインアセンブリを含むコードを扱っています。プリプロセッサ定数は、32,64、または128ビットのプリフェッチの命令を使用するかどうかを決定します。このアプリケーションは多種多様なプラットフォームで使用されていますが、今のところ私はそれぞれのCPUで最適なオプションを調べなければなりませんでした。私はこれがキャッシュラインサイズであることを理解しています。この情報は自動的に得られますか?/proc/cpuinfoには明示的に存在していないようです。SSEプリフェッチ命令サイズを決定する方法は?
3
A
答えて
3
あなたの質問は、このquestionまたはthisと関連していると思います。私は、あなたがOSやライブラリ関数に頼ることができない限り、CPUID命令を使いたいと思うが、質問があなたが探している情報に正確になることは明らかだと思う。もちろん、AMDとIntelの実装は合意する必要はありません。このpageは、Cpuid.1.EBX [15:8](すなわち、BH)を使用してIntelで検索し、80000005hをAMDで使用することを提案しています。また、インテルでは、CPUID.2に関連情報が含まれているようですが、必要な情報を解析するのは本当の苦痛のようです。
私が思うに、私が読んだから、AMDとIntelのCPUID命令の両方がCPUID.1.EBX [15:8]をサポートします、CLFLUSHで使用されるようにクワッドワードに1つのキャッシュラインのサイズを返します。命令(すべてのプロセッサには存在しないため、常にそこに何かがあるかどうかはわかりません)。 したがって、CPUID.1を実行した後、BHに8を掛けて、キャッシュラインサイズをバイト単位で取得する必要があります。これは、CLFLUSHとPREFETCHh命令では、1つのキャッシュラインサイズの定義が常に同じであるという私の暗黙の前提に基づいています(本当に有効かどうかは誰にでも分かりますか?
はまた、IntelのmanualsはPREFETCHhは単なるヒントであると述べているが、それが何かをプリフェッチ場合には、それは常に32バイトの最小になります。
EDIT1: PREFETCHhの最適化された使用についてのもう1つの有用なリソース(質問に直接答えない場合でも)は、Intelの最適化マニュアルhereです。
関連する問題
- 1. ARMのプリフェッチ命令
- 2. SSE命令:Byte + Short
- 3. SSE命令を使ったTensorflowのインストール
- 4. AltiVecへのMMX/SSE命令の移植
- 5. C/Objective CでSSE命令セットを使用するには?
- 6. SSE命令はどのように使用できますか?
- 7. 2バイトごとにスキップできるSSE mov命令ですか?
- 8. SSE命令によるクローン作成 - XMMレジスタの拡張
- 9. Linuxでのプロセッサの命令セットを決定する
- 10. コンパイルされたコードでsse命令とavx命令が使用されているかどうかをチェックする方法は?
- 11. インラインアセンブリを使用しないgccでのSSE命令の使用
- 12. 与えられた命令の次の即時命令を得る方法は?
- 13. SSE命令セットが有効になっていません
- 14. SSEアセンブリ命令を使用してピタゴリアントリプルを見つけるには?
- 15. DelphiはすべてのMMX/SSE命令をサポートしていますか?
- 16. アレイのすべての要素を追加するためのSSE命令
- 17. RDTSCPと命令命令
- 18. は、通常の手順をアウトパフォームするx86-64のSSE命令(ベクトル命令)は、通常の指示を上回るん
- 19. SMLAWy命令の下位32ビットを格納する方法は?
- 20. LLVM IR命令のテキスト表現を取得する方法は?
- 21. LLVM Passで命令を一意に識別する方法は?
- 22. CPUレジスタを含む命令をメモリ命令に変換する
- 23. SSEの "mov"命令の中に浮動小数点値を移動させる命令があるのはなぜですか?
- 24. SVML命令の使用方法
- 25. 表記法をシミュレートするプリプロセッサ命令
- 26. 命令レベルプロファイリング:命令ポインタの意味?
- 27. "out"と "in"命令の特権命令はありますか?
- 28. アセンブラSTRB命令は
- 29. 使い方* LLVM ::命令:: user_back()
- 30. AndroidでListViewのセルレイアウトのサイズを決定する方法は?