Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.18;
Скачать: CL | DM;

Вниз

WinApi   Найти похожие ветки 

 
AndreySG   (2002-02-15 09:12) [0]

Как узнать сколько кэша на процессоре


 
VuDZ   (2002-02-15 11:44) [1]

static DWORD proc_cache_l1[4] = { 0, 0, 0, 0 };
static DWORD proc_cache_l2[4] = { 0, 0, 0, 0 };

void cache(DWORD &l1, DWORD &l2){
_asm{
mov eax,080000000h ; Check for support of extended functions.
CPUID

; Check which extended functions can be called
cmp eax,080000001h ; Extended Feature Bits
jb $$ ; jump if not supported
cmp eax, 080000004h ; CPU Name string
jb $$ ; jump if not supported
cmp eax, 080000005h ; L1 Cache information
jb $$ ; jump if not supported
cmp eax, 080000006h ; L2 Cache information
jb short just_L1 ; jump if not supported

; Query and save L2 cache information
mov eax,080000006h ; L2 Cache Information
CPUID ; Interpretation is CPU specific, but
; fetching is not.
mov DWORD PTR [proc_cache_l2+0],eax
mov DWORD PTR [proc_cache_l2+4],ebx
mov DWORD PTR [proc_cache_l2+8],ecx
mov DWORD PTR [proc_cache_l2+12],edx


just_L1:
; Query and save L1 cache informatin
mov eax,080000005h ; L1 Cache Information
CPUID ; Interpretation is CPU specific, but
; fetching is not.
mov DWORD PTR [proc_cache_l1+0],eax
mov DWORD PTR [proc_cache_l1+4],ebx
mov DWORD PTR [proc_cache_l1+8],ecx
mov DWORD PTR [proc_cache_l1+12],edx
$$:
}

l2 = (proc_cache_l2[2] >> 16) & 0xffff;
l1 = (proc_cache_l1[2] >> 24) & 0xff;
}

void main()
{
DWORD d1, d2;
cache(d1, d2);
printf("L1 Size - %i\n", d1);
printf("L2 Size - %i\n", d2);
getch();
}


 
AndreySG   (2002-02-15 13:17) [2]

Но ведь это, как бы Си,а мне бы на дельфях, но всеравно спасибо


 
VuDZ   (2002-02-15 13:21) [3]

а что ассемблер сложно на делфи перевести?

пожалуйста


 
Alx2   (2002-02-15 13:49) [4]

Перевел, но не проверил: у меня CPU Name string not supported :(


Type
Word4Array = packed array [0..3] of DWORD;
Const proc_cache_l1 : WORD4Array = ( 0, 0, 0, 0 );
proc_cache_l2 : WORD4Array = ( 0, 0, 0, 0 );

procedure cache(Var l1, l2 : DWord); stdcall;
label just_L1, _exit;
begin
asm
mov eax,080000000h; // Check for support of extended functions.
// CPUID
db $0f
db $a2
// ; Check which extended functions can be called
cmp eax,080000001h //; Extended Feature Bits
jb _exit // jump if not supported
cmp eax, 080000004h // CPU Name string
jb _exit // jump if not supported
cmp eax, 080000005h // L1 Cache information
jb _exit // jump if not supported
cmp eax, 080000006h // L2 Cache information
jb just_L1 // jump if not supported

// Query and save L2 cache information
mov eax,080000006h // L2 Cache Information
// CPUID // Interpretation is CPU specific, but
db $0f
db $a2
// fetching is not.
mov DWORD PTR [proc_cache_l2+0],eax
mov DWORD PTR [proc_cache_l2+4],ebx
mov DWORD PTR [proc_cache_l2+8],ecx
mov DWORD PTR [proc_cache_l2+12],edx


just_L1:
// Query and save L1 cache informatin
mov eax,080000005h // L1 Cache Information
// CPUID // Interpretation is CPU specific, but
db $0f
db $a2
// fetching is not.
mov DWORD PTR [proc_cache_l1+0],eax
mov DWORD PTR [proc_cache_l1+4],ebx
mov DWORD PTR [proc_cache_l1+8],ecx
mov DWORD PTR [proc_cache_l1+12],edx
_exit:
end;

l2 := (proc_cache_l2[2] shr 16) and $ffff;
l1 := (proc_cache_l1[2] shr 24) and $ff;
end;




 
VuDZ   (2002-02-15 16:21) [5]

а просто без проверки, сразу эти строки?
вообще, надо для каждого проца посмотреть. по-моему, это стандартный механизм, но он может поддерживаться не всеми процами

mov eax,080000006h // L2 Cache Information
// CPUID // Interpretation is CPU specific, but
db $0f
db $a2


 
Alx2   (2002-02-15 16:32) [6]

Нули дает в ответе (и Delphi и MSVC 6.0) :(


 
VuDZ   (2002-02-15 16:50) [7]

а что за проц?


 
Alx2   (2002-02-15 16:55) [8]

PIII EB 800Mhz


 
VuDZ   (2002-02-15 18:13) [9]

тогды надо идти к интелу на сайт и брать от туда доку... это метод для K6 & K7



Страницы: 1 вся ветка

Текущий архив: 2002.04.18;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.007 c
1-57791
MaxSit
2002-04-04 20:45
2002.04.18
Передать из DLL большую строку


3-57651
Boo
2002-03-28 17:21
2002.04.18
Есть разница м/у Open и ExecSQL в ADOQuery?


1-57733
Сержжж
2002-04-05 08:15
2002.04.18
Динамические массивы


3-57660
neodiX
2002-03-25 13:04
2002.04.18
Problema v komponente TDataSetTableProducer


4-57911
xpyctuk
2002-02-14 13:06
2002.04.18
Как вытащить выделенный фрагмент текста с других приложений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский