英語版
このページの英語版を見る

core.cpuid

ホストCPUの特性を識別し、キャッシュサイズやアセンブリの最適化に関する情報を提供する。 キャッシュサイズとアセンブリ最適化のヒントに関する情報を提供する。このモジュールは 主にアセンブリ言語プログラマー向けに提供される。

参考文献 この情報の中には、探し出すのが非常に困難なものもあった。いくつかの 以下の文書のいくつかは、検索エンジンによって保存されたキャッシュされたバージョンでのみ見つかった! このコードは

  • 「Intel(R) 64 and IA-32 Architectures Software Developers Manual、 Volume 2A: Instruction Set Reference, A-M" (2007) に記載されている情報を使用している。
  • "AMD CPUID Specification", Advanced Micro Devices, Rev 2.28 (2008).
  • AMD Processor Recognition Application Note For Processors Prior to AMD 0Fh Processors", Advanced Micro Devices, Rev 2.28 (2008). Family 0Fh Processors", Advanced Micro Devices, Rev 3.13 (2005).
  • 「AMD Geode(TM) GX Processors Data Book"、 Advanced Micro Devices, Publication ID 31505E, (2005).
  • "AMD K6 Processor Code Optimisation", Advanced Micro Devices, Rev D (2000).
  • 「Application note 106: Software Customization for the 6x86 Family"、 サイリックス・コーポレーション、Rev 1.5 (1998)
  • https://www.datasheetcatalog.org/datasheet/nationalsemiconductor/GX1.pdf
  • "Geode(TM) GX1 Processor Series Low Power Integrated X86 Solution"、 ナショナル セミコンダクター、(2002)
  • "The VIA Isaiah Architecture", G. Glenn Henry, Centaur Technology, Inc (2008).
  • https://www.sandpile.org/ia32/cpuid.htm
  • https://www.akkadia.org/drepper/cpumemory.pdf
  • 「プログラマーがメモリについて知っておくべきこと」、 Ulrich Depper, Red Hat, Inc. (2007).
  • 「Windows カーネルによる CPU 識別", G. Chappell (2009). https://www.geoffchappell.com/viewer.htm?doc=studies/windows/km/cpu/cx8.htm
  • Intel(R) Processor Identification and the CPUID Instruction, Application Note 485" (2009). 注釈 485"(2009)。

Bugs:
現在のところ、x86とItanium CPUでのみ動作する。 多くのプロセッサーでは、CPUID命令のマイクロコードにバグがある、 そのため、キャッシュ情報が正しくないことがある。
Authors:
Don Clugston, Tomas Lindquist Olsen <tomas@famolsen.dk>

ソース core/cpuid.d

struct CacheInfo;
キャッシュのサイズと動作
size_t size;
CPUごとのキャッシュのサイズ(キロバイト単位)。 L1ユニファイド(データ+コード)キャッシュの場合、このサイズは物理サイズの半分である。 (通常、データサイズはコードサイズよりはるかに大きいため、サイズが大きい場合は半分にしない。 クリティカルなループでは、データサイズはコードサイズよりはるかに大きいからである)。
ubyte associativity;
連想配列の数:
  • 1 = ダイレクトマップド
  • 2 = 2ウェイセット連想
  • 3 = 3ウェイセット連想
  • ubyte.max=完全な連想。
uint lineSize;
キャッシュミスが発生したときにキャッシュに読み込まれるバイト数。
CacheInfo[5] datacache;
廃止予定。代わりにdataCaches
pure nothrow @nogc @property @trusted const(CacheInfo)[5] dataCaches();
データキャッシュ。物理キャッシュ・レベルが5より少ない場合、残りのレベルはsize_maxに設定される、 残りのレベルは size_t.max に設定される (== メモリ空間全体)。
pure nothrow @nogc @property @trusted string vendor();
ベンダーの文字列を返す。 機能の決定に使用しないこと! いくつかのCPUは、プログラム可能なvendorIDを持っていることに注釈:。
pure nothrow @nogc @property @trusted string processor();
プロセッサの文字列を返す。
pure nothrow @nogc @property @trusted bool x87onChip();
x87 FPUをオンチップ搭載しているか?
pure nothrow @nogc @property @trusted bool mmx();
MMXはサポートされているか?
pure nothrow @nogc @property @trusted bool sse();
SSEはサポートされているか?
pure nothrow @nogc @property @trusted bool sse2();
SSE2 はサポートされているか?
pure nothrow @nogc @property @trusted bool sse3();
SSE3がサポートされているか?
pure nothrow @nogc @property @trusted bool ssse3();
SSSE3はサポートされているか?
pure nothrow @nogc @property @trusted bool sse41();
SSE4.1はサポートされているか?
pure nothrow @nogc @property @trusted bool sse42();
SSE4.2はサポートされているか?
pure nothrow @nogc @property @trusted bool sse4a();
SSE4aはサポートされているか?
pure nothrow @nogc @property @trusted bool aes();
AES はサポートされているか?
pure nothrow @nogc @property @trusted bool hasPclmulqdq();
pclmulqdq はサポートされているか
pure nothrow @nogc @property @trusted bool hasRdrand();
rdrandはサポートされているか
pure nothrow @nogc @property @trusted bool avx();
AVXがサポートされているか
pure nothrow @nogc @property @trusted bool vaes();
VEX-Encoded AES はサポートされているか?
pure nothrow @nogc @property @trusted bool hasVpclmulqdq();
vpclmulqdq がサポートされている
pure nothrow @nogc @property @trusted bool fma();
FMA がサポートされている
pure nothrow @nogc @property @trusted bool fp16c();
FP16C がサポートされている
pure nothrow @nogc @property @trusted bool avx2();
AVX2がサポートされている
pure nothrow @nogc @property @trusted bool hle();
HLE (ハードウェア・ロック・エリジョン) がサポートされている
pure nothrow @nogc @property @trusted bool rtm();
RTM (制限付きトランザクションメモリ) がサポートされている
pure nothrow @nogc @property @trusted bool avx512f();
AVX512F がサポートされている
pure nothrow @nogc @property @trusted bool hasRdseed();
rdseed がサポートされているか
pure nothrow @nogc @property @trusted bool hasSha();
SHA がサポートされているか
pure nothrow @nogc @property @trusted bool amd3dnow();
AMD 3DNOW はサポートされているか?
pure nothrow @nogc @property @trusted bool amd3dnowExt();
AMD 3DNOW Extはサポートされているか?
pure nothrow @nogc @property @trusted bool amdMmx();
AMDのMMX拡張はサポートされているか?
pure nothrow @nogc @property @trusted bool hasFxsr();
fxsave/fxrstorはサポートされているか?
pure nothrow @nogc @property @trusted bool hasCmov();
cmovはサポートされているか?
pure nothrow @nogc @property @trusted bool hasRdtsc();
rdtscはサポートされているか?
pure nothrow @nogc @property @trusted bool hasCmpxchg8b();
cmpxchg8bはサポートされているか?
pure nothrow @nogc @property @trusted bool hasCmpxchg16b();
cmpxchg8bはサポートされているか?
pure nothrow @nogc @property @trusted bool hasSysEnterSysExit();
SYSENTER/SYSEXITはサポートされているか?
pure nothrow @nogc @property @trusted bool has3dnowPrefetch();
3DNowプリフェッチはサポートされているか?
pure nothrow @nogc @property @trusted bool hasLahfSahf();
LAHFとSAHFは64ビットモードでサポートされているか?
pure nothrow @nogc @property @trusted bool hasPopcnt();
POPCNT はサポートされているか?
pure nothrow @nogc @property @trusted bool hasLzcnt();
LZCNTはサポートされているか?
pure nothrow @nogc @property @trusted bool isX86_64();
これはIntel64かAMD64か?
pure nothrow @nogc @property @trusted bool isItanium();
IA64(Itanium)プロセッサか?
pure nothrow @nogc @property @trusted bool hyperThreading();
ハイパースレッディングはサポートされているか?
pure nothrow @nogc @property @trusted uint threadsPerCPU();
CPUあたりのスレッド数を返す
pure nothrow @nogc @property @trusted uint coresPerCPU();
CPUのコア数を返す
pure nothrow @nogc @property @trusted bool preferAthlon();
アセンブリコードの最適化のヒント
前方互換性のために、CPUは異なるマイクロアーキテクチャと比較される。 マイクロアーキテクチャと比較される。32ビットx86の場合、インテルPPro/PII/PIII/PMファミリーと比較される。 インテル PPro/PII/PIII/PM ファミリーと比較される。
主な32ビットx86マイクロアーキテクチャの「王朝」は以下の通りである:
  • インテルP6(PentiumPro、PII、PIII、PM、Core、Core2)。
  • AMD Athlon(K7、K8、K10)。
  • Intel NetBurst(Pentium 4、Pentium D)。
  • 注文中のペンティアム(ペンティアム1、PMMX、アトム)
その他の初期のCPU(Nx586、AMD K5、K6、Centaur C3、Transmeta、 Cyrix、Rise)はほとんどインオーダーだった。
既存のカテゴリーに当てはまらない新しいプロセッサーもある:
  • Intel Atom 230/330 (ファミリー6、モデル0x1C)はインオーダーコアである。
  • Centaur Isiah = VIA Nano (ファミリー6、モデルF)はアウトオブオーダーコアである。
各ダイナスティにおいて、最適化技術はほぼ同じである。 同じである(例えば、グループ4には命令ペアリングを使用する)。主要な 命令セットの改良は各王朝内で行われている。
このCPUは、PentiumPro.Core2コードよりもAMD K7コードで優れた性能を発揮するか?
pure nothrow @nogc @property @trusted bool preferPentium4();
この CPU は、PentiumPro.Core2 コードよりも Pentium4 コードで優れた性能を発揮するか?
pure nothrow @nogc @property @trusted bool preferPentium1();
このCPUは、Pentium ProのコードよりもPentium Iのコードで優れた性能を発揮するか?
uint stepping;
警告このフィールドは将来のリリースでプロパティになる予定である。
プロセッサー型(ベンダー依存)。 これは表示目的でのみ表示されるべきである。
uint model;
警告:このフィールドは将来のリリースでプロパティ化される予定である。
プロセッサ型(ベンダー依存)。 これは表示目的でのみ表示されるべきである。
uint family;
警告:このフィールドは将来のリリースでプロパティ化される予定である。
プロセッサ型(ベンダー依存)。 これは表示目的でのみ表示されるべきである。
uint numCacheLevels;
このフィールドは廃止された。代わりにcacheLevels
nothrow @nogc @property @trusted uint cacheLevels();
CPUのキャッシュレベル数。