質問
知りたいと思い自分がその気にさえなれば周辺にはいくつかの良い例はC++のCPUID実施できるから参照を管理します。純ます。
また、この場合、うする意識のある実装の違いX86およびX64?
を使用したいのでCPUID得情報、機械の私のソフトウェアないようにするには、(crashreportingなど)および上がっていきたいものとして広く対応しています。
主な理由は、私は私計手伝いを書かごろまでにすべての機指示をしたが基本的な知識CPUのレジスタなど...。
前もっと多くの中国人が語るGoogle:この例のオンラインで普段なかったため相互作用から管理コードなの両立を図るX86およびX64.一例が登場するX86固有のものです。
解決
アクセス原CPUID情報というのは実は非常に容易で、ここではC++のクラスではこの作品には、Windows、Linux、OSX:
#ifndef CPUID_H
#define CPUID_H
#ifdef _WIN32
#include <limits.h>
#include <intrin.h>
typedef unsigned __int32 uint32_t;
#else
#include <stdint.h>
#endif
class CPUID {
uint32_t regs[4];
public:
explicit CPUID(unsigned i) {
#ifdef _WIN32
__cpuid((int *)regs, (int)i);
#else
asm volatile
("cpuid" : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
: "a" (i), "c" (0));
// ECX is set to zero for CPUID function 4
#endif
}
const uint32_t &EAX() const {return regs[0];}
const uint32_t &EBX() const {return regs[1];}
const uint32_t &ECX() const {return regs[2];}
const uint32_t &EDX() const {return regs[3];}
};
#endif // CPUID_H
利用でインスタンスを生成クラスのインスタンス負荷のCPUID命令の興味のある調査を行登録する例えば:
#include "CPUID.h"
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]) {
CPUID cpuID(0); // Get CPU vendor
string vendor;
vendor += string((const char *)&cpuID.EBX(), 4);
vendor += string((const char *)&cpuID.EDX(), 4);
vendor += string((const char *)&cpuID.ECX(), 4);
cout << "CPU vendor = " << vendor << endl;
return 0;
}
このWikipediaページが分かるので使用方法CPUID: http://en.wikipedia.org/wiki/CPUID
編集: 追加 #include <intrin.h>
Windowsの場合は、単にコメントなし。
他のヒント
__cpuidについて このMSDNの記事を参照してください。
のVisual Studio 2005またはより良いでコンパイル包括的なサンプルがあります。 Visual Studioの6のために、あなたの代わりに、コンパイラinstrinsic __cpuidのにこれを使用することができます:
void __cpuid(int CPUInfo[4], int InfoType)
{
__asm
{
mov esi, CPUInfo
mov eax, InfoType
xor ecx, ecx
cpuid
mov dword ptr [esi + 0], eax
mov dword ptr [esi + 4], ebx
mov dword ptr [esi + 8], ecx
mov dword ptr [esi + 12], edx
}
}
Visual Studio 2005のために、あなたの代わりに、コンパイラinstrinsic __cpuidexのにこれを使用することができます:
void __cpuidex(int CPUInfo[4], int InfoType, int ECXValue)
{
__asm
{
mov esi, CPUInfo
mov eax, InfoType
mov ecx, ECXValue
cpuid
mov dword ptr [esi + 0], eax
mov dword ptr [esi + 4], ebx
mov dword ptr [esi + 8], ecx
mov dword ptr [esi + 12], edx
}
}
は、あなたが探している正確に何もないかもしれないが、Intelは<のhref = "http://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/を持っています「REL =」nofollowをnoreferrer ">良い記事とサンプルコードのインテル64ビット・プラットフォーム・アーキテクチャ、32ビットx86プロセッサを覆うように思われる(プロセッサ、キャッシュ、等)を列挙するための