私は、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. AltiVecへのMMX/SSE命令の移植
- 4. SSE命令はどのように使用できますか?
- 5. SSE命令によるクローン作成 - XMMレジスタの拡張
- 6. インラインアセンブリを使用しないgccでのSSE命令の使用
- 7. SSE命令セットが有効になっていません
- 8. DelphiはすべてのMMX/SSE命令をサポートしていますか?
- 9. アレイのすべての要素を追加するためのSSE命令
- 10. は、通常の手順をアウトパフォームするx86-64のSSE命令(ベクトル命令)は、通常の指示を上回るん
- 11. 命令レベルプロファイリング:命令ポインタの意味?
- 12. SSEの "mov"命令の中に浮動小数点値を移動させる命令があるのはなぜですか?
- 13. アセンブラSTRB命令は
- 14. AUSamplerインスタンスのサイズを決定する方法は?
- 15. KerasのDenseメソッドでレイヤーのサイズを決定する方法は?
- 16. AndroidでListViewのセルレイアウトのサイズを決定する方法は?
- 17. ポップ命令を使用せずにトラップフラグを設定する方法
- 18. docker runコマンドの実行中に `不正な命令 'エラーを解決する方法はありますか?
- 19. 命令キャッシュの制限の影響を実証する方法
- 20. llvmで命令を印刷する方法
- 21. コンパイル時にamd_3dnow命令セットを除外する方法openssl
- 22. デコード68k命令
- 23. ドッカーファイルONBUILD命令
- 24. LEA命令?
- 25. MIPSシフト命令
- 26. ストリング命令
- 27. LLVM命令を挿入するには?
- 28. ビジュアルスタジオのプログラムの最初の命令でブレークする方法
- 29. php artisan migrateから結果のmysql命令を得る方法
- 30. アセンブリ命令の保存方法を調べる