![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Get L2 cache [D6, WinME, WinXP]
Delphino © (2004-01-10 23:16:00)Может, несколько "не в тему", но:
function TCpuData.GetL2Cache:word;
var
I: Integer;
l2cache:word;
d:byte;
tte:byte;
CacheDescriptors: array [0..15] of Byte;
begin
asm
@@RepeatCacheQuery:
POP ECX
MOV EAX, 2
DB 0FH
DB 0A2H
INC d
CMP d, 1
JNE @@DoneCacheQuery
MOV tte, AL
CMP AL, 0
@@DoneCacheQuery:
PUSH ECX
MOV CL, d
SUB CL, tte
JNZ @@RepeatCacheQuery
POP ECX
MOV DWORD PTR [CacheDescriptors], EAX
MOV DWORD PTR [CacheDescriptors + 4], EBX
MOV DWORD PTR [CacheDescriptors + 8], ECX
MOV DWORD PTR [CacheDescriptors + 12], EDX
end;
L2Cache := 0;
for I := 1 to 15 do
case CacheDescriptors[I] of
$40:
L2Cache := 0;
$41:
L2Cache := 128;
$42:
L2Cache := 256;
$43:
L2Cache := 512;
$44:
L2Cache := 1024;
$45:
L2Cache := 2048;
end;
Getl2cache:=l2cache;
end;
Работать это должно на процах от Intel.
Q: Это правильно?!
Delphino (2004-01-11 22:10:00) [1]ПИПЛЫ help! Let Me Live! Надо протестить прогу, активно юзающую эту чёртову функцию! http://www.zcommunity.narod.ru/vcpuida48.rar
Помогите PLZ ! С меня ящики виртуального пива!
Delphino (2004-01-11 19:20:00) [2]cr
Слушай, а ты будешь в нете ещё некоторое время? Я достал процедуру, совсем скоро допишу свою прогу и выложу её. Ты не сможешь её проверить? Определит всё!
cr (2004-01-11 17:36:00) [3]да p4 1.7
Двенадцатый дескриптор равен $40
А вообще в десятичном виде:
1-80
2-91
3-102
4-0
5-0
6-0
7-0
8-0
9-0
10-0
11-0
12-64
13-112
14-122
15-0
Delphino (2004-01-11 16:15:00) [4]cr
Но ты почти никогда не сможешь получить на 5-ом проходе 40! Из дескрипторов почти всегда есть только один, если P4 без L3, то это вполне возможно, в противном случае нет. У тебя ведь P4, да? Спасибо тебе, кстати, огромное - я про эту фичу P4 забыл. А не мог бы проверить без опознания дескриптора $40?!
cr (2004-01-11 15:38:00) [5]L2Cache := 0;
for I := 1 to 15 do
case CacheDescriptors[I] of
$40:
L2Cache := 0;
$41:
L2Cache := 128;
$42:
L2Cache := 256;
$43:
L2Cache := 512;
$44:
L2Cache := 1024;
$45:
L2Cache := 2048;
end;
Что-то я не понял - это опрашивает состояние дескрипторов
несколько раз и что ? Если например на 5 проходе ты получиш
$43 а на 6 $40 то L2Cache один черт будет равен 0 :)
cr (2004-01-11 15:32:00) [6]На интеле это тоже 0 дает .:(
Delphino (2004-01-11 14:51:00) [7]дааа... Работа со всеми K7 моей проги отлажена и проверена на 100%. Уже всё протестировано. Эх... ещё бы мне достать бета-тестеров с K8 =)
Intel'овцы, отзовитесь!
jack128 (2004-01-11 14:13:00) [8]к сожелению ничем помочь не могу, сам на дюроне сижу.
Delphino (2004-01-11 13:39:00) [9]Нет, не так. Дескрипторов - гораздо больше. Просто только эти предоставляют нужну мне на данный момент информацию - о кэше 2-го уровня.
Ну а asm... Я конечно понимаю, что форум по Дельфи и всё такое, но asm-то теоретически правильный?! Вообще это моя первая прога с использованием asm... Я в основном пишу на Delphi. И сижу на AMD. Посему выдаёт мне сия функция 0. Это правильно, но вдруг она и на инопроцессорных тачках нолик выдаст?!
Мож всё-таки попробуешь это у себя запустить, если сидишь на Intel'е? Буду УЖАСНО благодарен т.к мне эту шнягу уже завтра сдавать!
jack128 (2004-01-11 13:28:00) [10]
> Кстати, что ты не пробовал эт дело компильнуть?
CacheDescriptors[I] = $40..$45 Так? Никакие другие значения эти дискрипторы не могут принимать? Если так, то получается ты посмотриваешь все дискрипторы, в то время в результате учитываешь значение только последнего (CacheDescriptors[15]). Только из этих соображний я и сказал, что это наверника не правильно.
Delphino (2004-01-11 13:19:00) [11]Есть дескрипторы, и их нужно считать не всегда один раз - количество раз d. Если среди них встречается какой либо из нижеперечисленных, то кэш - такой, какой соответствует дескриптору.
40h no integrated L2 cache (P6 core) or L3 cache (P4 core)
41h code and data L2 cache, 128 KB, 4 ways, 32 byte lines
42h code and data L2 cache, 256 KB, 4 ways, 32 byte lines
43h code and data L2 cache, 512 KB, 4 ways, 32 byte lines
44h code and data L2 cache, 1024 KB, 4 ways, 32 byte lines
45h code and data L2 cache, 2048 KB, 4 ways, 32 byte lines
Так ты уверен, что, если имелось ввиду именно это, то всё же неправильно?
Кстати, что ты не пробовал эт дело компильнуть?
jack128 (2004-01-11 12:25:00) [12]как там дела а асм коде обстоят - не знаю, но вот это
> for I := 1 to 15 do
> case CacheDescriptors[I] of
> $40:
> L2Cache := 0;
> $41:
> L2Cache := 128;
> $42:
> L2Cache := 256;
> $43:
> L2Cache := 512;
> $44:
> L2Cache := 1024;
> $45:
> L2Cache := 2048;
> end;
явно не правильно. Может имелось в виду inc(L2Cache, <128 или 256 или что то там..>
Delphino (2004-01-11 12:03:00) [13]PLZ прочекайте, если не сложно!