D 2.0
About Japanese Translation

Last update Sun Dec 19 23:27:21 2010

core.cpuid

実行環境のCPUの特性を調べ また、キャッシュサイズやアセンブラの最適化ヒントになる情報を提供します。

これらの情報のうちいくつかは、把握するのが非常に困難です。 以下の参考文献のうちいくつかは、検索エンジンのキャッシュにしか残っていません! このモジュールのコードは以下の資料に準じて実装されています:

BUGS:
現在は x86 と Itanium のみで動作します。 多くのプロセッサがCPUIDのマイクロコードにバグを抱えているため、 しばしば、キャッシュに関する情報が誤っていることがあります。

License:
Boost License 1.0.

Authors:
Don Clugston, Tomas Lindquist Olsen <tomas@famolsen.dk>

Source:
core/cpuid.d
struct CacheInfo;
キャッシュサイズと動作

uint size;
個々のCPUのキャッシュサイズ(キロバイト単位)。 L1統合(データ + コード)キャッシュでは、このサイズは物理的なキャッシュサイズの半分の値となります (ただしサイズが大きい場合は半分にはしません。 通常、クリティカルループにおいてはデータサイズはコードサイズより遙かに大きいためです)。

ubyte associativity;
キャッシュの associativity のタイプ。例: 1 = direct mapped 2 = 2-way set associative 3 = 3-way set associative ubyte.max = fully associative

uint lineSize;
キャッシュラインのサイズ(バイト単位)

string vendor();
表示用に、ベンダー名文字列を返します。 これは絶対にCPU機能の判定には使わないで下さい! いくつかのCPUはプログラマブルなベンダIDを持っていることにも注意して下さい。

string processor();
表示用に、プロセッサ名文字列を返します。
CacheInfo[5u] datacache;
データキャッシュの情報。キャッシュ階層が5よりも小さいときは、 残りの部分は uint.max (== メモリ空間全体) で埋められます

bool x87onChip();
オンチップのx87 FPUがあるか?

bool mmx();
MMX対応かどうか
bool sse();
SSE対応かどうか
bool sse2();
SSE2対応かどうか
bool sse3();
SSE3対応かどうか
bool ssse3();
SSSE3対応かどうか
bool sse41();
SSE4.1対応かどうか

bool sse42();
SSE4.2対応かどうか

bool sse4a();
SSE4a対応かどうか

bool amd3dnow();
AMD 3DNOW 対応かどうか
bool amd3dnowExt();
AMD 3DNOW Ext 対応かどうか
bool amdMmx();
AMD の MMX 拡張対応かどうか
bool hasFxsr();
fxsave/fxrstor が使えるかどうか
bool hasCmov();
cmov が使えるかどうか
bool hasRdtsc();
rdtsc が使えるかどうか
bool hasCmpxchg8b();
cmpxchg8b が使えるかどうか
bool hasCmpxchg16b();
cmpxchg8b が使えるかどうか
bool hasSysEnterSysExit();
SYSENTER/SYSEXIT が使えるかどうか
bool has3dnowPrefetch();
3DNow の prefetch が使えるかどうか
bool hasLahfSahf();
LAHF と SAHF が 64-bit モードで使えるかどうか
bool hasPopcnt();
POPCNT が使えるかどうか
bool hasLzcnt();
LZCNT が使えるかどうか
bool isX86_64();
Intel64 あるいは AMD 64 かどうか

bool isItanium();
IA64 (Itanium) プロセッサかどうか

bool hyperThreading();
HyperThreading 対応かどうか
uint threadsPerCPU();
CPUごとのスレッド数
uint coresPerCPU();
CPUのコア数
bool preferAthlon();
この CPU は PentiumPro..Core2 用よりも AMD K7 用のコード向きか?

アセンブリコードのための最適化ヒントです。 互換性を考えて、CPUはそのマイクロアーキテクチャに対して分類・比較されています。 32-bit X86 では、比較は Intel PPro/PII/PIII/PM ファミリに対して行われています。

メジャーな 32-bit x86 アーキテクチャの '代' は以下のようでした: (1) Intel P6 (PentiumPro, PII, PIII, PM, Core, Core2). (2) AMD Athlon (K7, K8, K10). (3) Intel NetBurst (Pentium 4, Pentium D). (4) In-order Pentium (Pentium1, PMMX, Atom) そのほかの初期のCPU (Nx586, AMD K5, K6, Centaur C3, Transmeta, Cyrix, Rise) はほぼ in-order 実行です。 新しいプロセッサのいくつかは既存のカテゴリには入りません: Intel Atom 230/330 (family 6, model 0x1C) は in-order コアですが、 Centaur Isiah = VIA Nano (family 6, model F) は out-of-order コアです。

各時代の中では、最適化のテクニックは概ね同じです (例: Group 4 では命令ペアリング). 命令セットの大幅な改善だ、代が変わるときに行われています。

bool preferPentium4();
この CPU は PentiumPro..Core2 用よりも Pentium4 用のコード向きか?

bool preferPentium1();
この CPU は Pentium Pro 用よりも Pentium I 用のコード向きか?

uint stepping;
プロセッサのタイプ(ベンダ依存)。 表示用途以外には使用しないで下さい。

uint model;
プロセッサのタイプ(ベンダ依存)。 表示用途以外には使用しないで下さい。

uint family;
プロセッサのタイプ(ベンダ依存)。 表示用途以外には使用しないで下さい。