Member
Статус: Не в сети Регистрация: 16.04.2004 Откуда: [MSK.RU]
Гы...
Выскажу своё мнение, однако....
(disclaimer: это просто имхо человека, [безуспешно] пытавшегося переплюнуть cpu-z, а также очень любящего получать наиболее полную информацию... Не придирайтесь...)
По поводу HTT.
Во всех четвёртых пнях бит 28 Standart Features Flags =1
Для того, чтобы точно определить наличие НТТ, надо смотреть на Logical Processor Count (cpuid: 0001h EBX[23..16]).
По поводу PSN.
Он есть, кажется, только на Катмаях и каких-то там Трансметах...
SFF bit 18 вам в помощь...
Вообще.
Инструкция cpuid - вещь великая... И пользовать её надо по максимуму.
С Intel очень приятно работать, пока дело не касается определения ЦПУ... С AMD ситуация обратная.
Если найдёте старую версию AMDэшного дока за номером 20734 - будет вам счастье. Последняя, к сожалению, просто бесполезна...
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
По поводу HTT. Во всех четвёртых пнях бит 28 Standart Features Flags =1 Для того, чтобы точно определить наличие НТТ, надо смотреть на Logical Processor Count (cpuid: 0001h EBX[23..16]).
Пару страниц назад я об этом писал, но автор решил игнорировать и опять делать по своему
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Zoom Evstrahiev предлагаю свое видение HT
Код:
function CheckHT:boolean; var EAX, EBX, ECX, EDX: DWord; begin cpuid($1, EAX, EBX, ECX, EDX); if (FlagHT) then //if HT flag is enabled HyperThreadNum:=(EBX shr 16) and $FF else HyperThreadNum:=0; if (HyperThreadNum <= 1) then begin FlagHT:=false; result:=false; end else result:=true; end;
Думаю со всем разберешься PS FlagHT - это тот флаг, по которому ты в данный момент пытаешься определить наличие HT
_________________ Ку ку
Последний раз редактировалось Daemon 01.03.2005 23:09, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Если уж затронули бенчмарки, может кто-нибудь может порекомендовать какой-нибудь математический аппарат, для написания FPU теста с последующей реализацией алгоритма на 3DNow и SSE.
Member
Статус: Не в сети Регистрация: 09.01.2005 Откуда: Питер
Насчёт названия: У всех моих программ стоит лейбл Rulezmaker. Так уж повелось. Но, раз народ просит, будем менять концепцию Anri Хотелось бы лицезреть скрины программы+CPUz
Lord_of_Darkness Ничего не понимаю! Сейчас выложу исходники. Вроде бы BId правильный....
_________________ Rara temporum felicitas, ubi quae velis sentire et quae sentias dicere licet!
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Zoom Evstrahiev ой, бить, точно бить У тебя элементарно не работает код Почему, думаю догадаешься сам.
На всякий случай раскажу, ты делаешь так:
Код:
function TCpuData.CheckCeleron: Boolean; var BId: dword; begin CheckCeleron:=(intelbrandid=($A or $1 or $3 or $7 or $12 or $14 or $17)); end;
В С правильно зделали, там есть "или" логический и "или" арифметический(т.е. || и | или наоборот ). В Delphi приходится пользоватся просто or, и теперь гляди что получается: ты выполняешь арифметические операции на числами в скобках и там получается всегда $1F, ну и естественно неработает Делай так:
Код:
function TCpuData.CheckCeleron: Boolean; var BId: dword; begin result:=false; result:=(intelbrandid in [$A, $1, $3, $7, $12, $14, $17]); end;
И еще одно, ты делаешь так:
Код:
Вот процедура IntelPFN function TCpuData.IntelPFN: string; begin if CheckIthanium=true then IntelPFN:='Intel Ithanium' else if checkceleron=true then IntelPFN:='Intel Celeron(r) 4' else IntelPFN:='Intel Pentium(r) 4';
Intel Celeron(r) 4 - помоему такого нет, так что убирай 4, а вместо r лучше напишы tm
И небольшое пожелание: потом ты сам будешь путатся в своем же коде, так что лучше используй класс и как-то универсализируй код, чтобы было аккуратно и понятно. А то вызов инструкции cpuid раз 20 наверное в коде Ну а пока лучше замени
Код:
push eax push ebx push ecx push edx
На pushad
И
Код:
pop edx pop ecx pop ebx pop eax
На popad
Добавлено спустя 1 минуту, 15 секунд: И насчет космических BrandID, я же тебе давал код
Код:
// for BrandID if (FlagBrand = amd) and (Family = $F) then // for Hammer or later begin if (BrandID = 0) then begin BrandID := (EBX shr 5) and $7; // bit 5-7 if( BrandID = 0 )then begin BrandID := (EBX shr 8) and $7; // bit 8-10 end; BrandIDNN := EBX and $1F; end; end else begin BrandID := EBX and $FF; end;
_________________ Ку ку
Последний раз редактировалось Daemon 03.03.2005 21:15, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения