Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 14. květen 2009, 19:01:10 Předmět: Detekce frekvence CPU |
|
|
Ahoj, nevite o nejakym spolehlivym zpusobu jak zjistit frekvenci CPU? Vyzkousel sem uz par ruznejch zpusobu vjetsina pouziva asm RDTSC a funguje pekne, ale nejsou spolehlivy, obcas to vyflusne "kravinu". Nemusi to byt multiplatformni, staci pro Windows. Potrebuju to kvuli co nejpresnejsimu casovaci na "profilovani" kodu. |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 14. květen 2009, 19:24:48 Předmět: |
|
|
Podivej se na funkce QueryPerformanceCounter a QueryPerformanceFrequency z winapi, ty jsou urcene pro presne profilovani. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 14. květen 2009, 23:43:59 Předmět: |
|
|
Ale performance counter může vyžadovat svázání vlákna s jedním z CPU. Viz SetThreadAffinityMask. Je možné, že toto už v novějších Windows nebude potřeba...
Instrukce RDTSC vyžaduje to samé. Problém je v tom, že vlákno ti může skákat mezi dvěma CPU a každý z nich ti může dát jiný hodnoty. Nedivil bych se, kdyby performance counter byl implementován právě pomocí této instrukce. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 15. květen 2009, 06:58:07 Předmět: |
|
|
Jo asi to bude ono, pak to zkusim... Jisty je ze na ty hodnoty mneli vliv zmnely prioryty procesu, civ vyzsi priorita tim min chyb... Takze to bude bud tim (zkousim to na Athlonu X2) a nebo ze se pri tom mnereni pozastavi to vlakno. |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 15. květen 2009, 12:32:52 Předmět: |
|
|
Ono mozna nejjistejsi bude pouzit starou dobrou metodu mereni, kdy danou cast das to forcyklu a pustis ji treba 1000x  _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 15. květen 2009, 13:08:04 Předmět: |
|
|
Bacha na to, co pisal Eosie. Ak chces pouzivat performance counter, musis nastavit pre istotu (process/thread) affinity mask tak, aby to bezalo len na jednom CPU. Mam skusenosti z Win 2003 x64 aj Win xp x64 na roznych dualcore Athlonoch, ze ti dve volania QueryPerformanceCounter vratia hodnoty, kde druha bude mensia (cize zaporny casovy rozdiel). To prave vtedy, ked nechas scheduler aby ti to vlakno prehadzoval po jadrach ako sa mu zachce. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 15. květen 2009, 14:10:24 Předmět: |
|
|
Jo, bylo to tim, hodil sem to jen na jedno CPU a vali to vyborne. dik.
Takze to stejne dela i na Win XP x86. |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 16. květen 2009, 18:57:31 Předmět: |
|
|
S performance countery je to trochu problém. Četl jsem na blogu některého z vývojářů jádra Windows, že po dodavateli ovladače k desce/procesoru vyžadují aby prostředky, nad kterými toto stojí, vracely konstantní frekvenci, bez ohledu na plynule měněnou frekvenci procesoru a stejné hodnoty, bez ohledu na kterém jádře vlákno právě běží, ale bohužel většina jich nesplňuje ani jednu z těchto podmínek. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
|