Intel Atom Processors CPUID

Для программистов и биосоковырятелей немного справочной информации по процессорам Интел Атом:

Intel® Atom™ Processor Series

Devices

64-bit Support

Hyper-threading

N270, N280

Netbooks

No

Yes

N4xx series , N5xx series

Netbooks

Yes

Yes

D4xx series, D5xx series

Entry level desktops (e.g. nettops)

Yes

Yes

230, 330

Entry level desktops (e.g. nettops)

Yes

Yes

Z5xx

Mobile Internet Devices (MIDs), some netbooks

No

Yes (except Z510)

Z6xx

Mobile Internet Devices (MIDs), some netbooks

No

Yes

CE4100

Consumer Electronics (e.g. Internet TV)

No

Yes

E-series

Embedded

No

Yes

 

Extended Family

Extended Model

Type

Family Code

Model No.

00000000

0001

00

0110

1100

 

Процедура определения процессора:

struct CPUInfoStruct
{
union {
char CPUBrandString[48];
__int32 nCPUBrandString[16*3];
};
int nSteppingID;
int nModel;
int nFamily;
int nProcessorType;
int nBasicProcessorID;
int nExtendedModel;
int nExtendedFamily;
bool bAtomProcessor;
bool bHyperThreading;
char CPUString[13];
};
bool isAtom( const CPUInfoStruct& info)
{
// firstChar is beginning pointer, c is end minus the string
// length we're looking for
char const * firstChar = info.CPUBrandString;
// Atom(TM) = 8 chars
char const * c =
info.CPUBrandString + sizeof(info.CPUBrandString)/sizeof(char) - 8;
// search backwards, looking for 'A' 't' 'o' 'm' '(' 'T' 'M' ')' or till
// we hit decrement past firstChar
while ( c >= firstChar )
{
if ( c[0] == 'A' &&
c[1] == 't' &&
c[2] == 'o' &&
c[3] == 'm' &&
c[4] == '(' &&
c[5] == 'T' &&
c[6] == 'M' &&
c[7] == ')' )
{
return true;
}
--c;
}
return false;
}
// This function fills up the CPU Info Struct for us.
// multiple CPUID calls are necessary to get all the information and
// each call gives you more information about the depth of calls you can make.
void fillCPUInfo(CPUInfoStruct& info)
{
__int32 CPUInfo[4] = {0};
::memset(&info, 0, sizeof(CPUInfoStruct));
// cpuid intrinsic calls the cpuid instruction and returns 4 32bit values
// the results depend upon the InfoType parameter passed in
// Get the number of maximum InfoType value we can call for this
// processor and also get the ID string
::__cpuid(CPUInfo, 0);
// Swap last two to put in readable form
int temp = CPUInfo[2];
CPUInfo[2] = CPUInfo[3];
CPUInfo[3] = temp;
// Copy 12 characters
::memcpy(info.CPUString, &(CPUInfo[1]), 12 ); // 13th position is zero
// Check to see if we can make the next call
if( CPUInfo[0] < 1 )
{
return;
}
// Call with InfoType == 1
// CPUInfo will be set to the following:
// 0: Bits 0-3: Stepping ID
// 0: Bits 4-7: Model Number
// 0: Bits 8-11: FamilyCode
// 0: Bits 12-13: Processor Type
// 0: Bits 14-15: Reserved
// 0: Bits 16-19: Extended Model
// 0: Bits 20-27: Extended Family
// 0: Bits 28-31: Reserved
// 3: Bit 28: Hyper-threading technology
::__cpuid(CPUInfo, 1);
info.nSteppingID = CPUInfo[0] & 0xf; // bits 0-3
info.nModel = (CPUInfo[0] >> 4) & 0xf; // bits 4-7
info.nFamily = (CPUInfo[0] >> 8) & 0xf; // bits 8-11
info.nProcessorType = (CPUInfo[0] >> 12) & 0x3; // bits 12-13
info.nExtendedModel = (CPUInfo[0] >> 16) & 0xf; // bits 16-19
info.nExtendedFamily = (CPUInfo[0] >> 20) & 0xff;// bits 20-27
info.bHyperThreading = (CPUInfo[3] & 0x10000000) != 0;// bit 28
// Check to see if we can get the Processor Brand String
// Call with InfoType == 0x80000000
::__cpuid(CPUInfo, 0x80000000);
if( CPUInfo[0] < 0x80000004 ) // extended info supported up to 4?
{
return;
}
// Yes, make the 3 calls (16 chars each or 4 ints each)
// to make up the brand string - it's null terminated
::__cpuid(info.nCPUBrandString + 0, 0x80000002);
::__cpuid(info.nCPUBrandString + 4, 0x80000003);
::__cpuid(info.nCPUBrandString + 8, 0x80000004);
// Now we can check for Atom(TM) processors
info.bAtomProcessor = isAtom( info );
}
int _tmain(int argc, _TCHAR* argv[])
{
// This is how to use the code
CPUInfoStruct info; // Create the struct
fillCPUInfo(info); // Fill it
// Query the bits
printf_s("CPUString : %s\n", info.CPUString);
printf_s("Brand String : %s\n", info.CPUBrandString);
printf_s("Hyperthreaded?: %s\n", info.bHyperThreading ? "Yes": "No");
printf_s("is it an Atom : %s\n", info.bAtomProcessor ? "Yes": "No");
return 0;
}

 

ВложениеРазмер
Intel-Atom-Block-Diagram.png231 КБ

у меня по етому поводу два вопроса :
- какими из открытых источников вы пользуетесь
- присутствует ли в Атомах - АМТ, или планируется ли

с уважением
судосборщик, ЧСЗ

... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки

Аватар пользователя apple_rom
  • В Атомах технология AMT отсутствует и (пока/официально) не планируется.
  • Источники всегда открытые, хотя, бывает, использую дырки в сайтах AMD и Intel, где периодически попадаются confidential даташиты (которые, опять же, как правило после всё равно появляются и в "открытом" доступе).

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей