5

インテルイントリンシクスガイドでは、いくつかのイントリンシクスの下部に「レイテンシーとスループット情報」があり、いくつかのCPUIDのパフォーマンスがリストされています。

たとえば、組み込みガイドの表は、組み込み関数について次のようになります_mm_hadd_pd

CPUID(s)               Parameters   Latency   Throughput
0F_03                                    13            4
06_2A                  xmm1, xmm2         5            2
06_25/2C/1A/1E/1F/2E   xmm1, xmm2         5            2
06_17/1D               xmm1, xmm2         6            1
06_0F                  xmm1, xmm2         5            2

今:CPUがどのIDを持っているかをどのように判断しますか?

私はKubuntu12.04を使用していて、Ubuntuパッケージsudo dmidecode -t 4の小さなプログラムを試してみましcpuidたが、それらの出力はあまり役に立ちません。

上記のコマンドの出力のどこにも、組み込みガイドにリストされている文字列が見つかりません。

4

1 に答える 1

1

CPUID命令を使用してその情報を取得できます。

拡張ファミリのビット位置 20 ~ 27 は、プロセッサが Intel386、Intel486、Pentium、Pentium Pro、または Pentium 4 ファミリのプロセッサに属しているかどうかを示すために、ビット位置 8 ~ 11 で指定されるファミリ コードと組み合わせて使用​​されます。P6 ファミリ プロセッサには、Pentium Pro プロセッサ アーキテクチャに基づくすべてのプロセッサが含まれ、00h に等しい拡張ファミリと 06h に等しいファミリ コードがあります。Pentium 4 ファミリ プロセッサには、Intel NetBurst® マイクロアーキテクチャに基づくすべてのプロセッサが含まれ、00h に等しい拡張ファミリと 0Fh に等しいファミリ コードがあります。

ビット位置 16 から 19 で指定された拡張モデルは、ビット 4 から 7 で指定されたモデル番号とともに、プロセッサのファミリ内のプロセッサのモデルを識別するために使用されます。

詳細については、 Intel プロセッサの識別と CPUID 命令の22 ページを参照してください。

実際の CPUID は「family_model」です。次のコードは、仕事をする必要があります。

#include "stdio.h"

int main () {

  int ebx = 0, ecx = 0, edx = 0, eax = 1;
  __asm__ ("cpuid": "=b" (ebx), "=c" (ecx), "=d" (edx), "=a" (eax):"a" (eax));

  int model = (eax & 0x0FF) >> 4;
  int extended_model = (eax & 0xF0000) >> 12;
  int family_code = (eax & 0xF00) >> 8;
  int extended_family_code = (eax & 0xFF00000) >> 16;

  printf ("%x %x %x %x \n", eax, ebx, ecx, edx);
  printf ("CPUID: %02x %x\n", extended_family_code | family_code, extended_model | model);
  return 0;
}

私のコンピューターでは、次のようになります。

CPUID: 06_25

それが役に立てば幸い。

于 2013-05-07T16:16:40.887 に答える