Проблемы с расчетом cpu usage для HyperThreading.

Тема в разделе "WASM.WIN32", создана пользователем NoMD, 25 дек 2004.

  1. NoMD

    NoMD New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    18
    Адрес:
    Russia
    Код (Text):
    1. double dSystemTime,dIdleTime,cpuIdleTime,cpuUsage;
    2. unsigned __int64 oldIdleTm,oldCurTm,newIdleTm,newCurTm;
    3.  
    4. newIdleTm=SystemProcessorTimes->IdleTime.QuadPart;
    5. newCurTm=SystemTimeOfDayInformation->CurrentTime.QuadPart;
    6. if(oldIdleTm!=0){
    7.  dIdleTime=newIdleTm-oldIdleTm;
    8.  dSystemTime=newCurTm-oldCurTm;
    9.  if(dSystemTime!=0){
    10.   cpuIdleTime=dIdleTime/dSystemTime;
    11.   cpuUsage=(1.0 - cpuIdleTime/(double)(SystemBasicInformation->NumberProcessors) )*100.0;
    12.  }
    13. }
    14. oldIdleTm=newIdleTm;
    15. oldCurTm=newCurTm;




    Этот код нормально работает с 1 cpu, но появляются проблемы с HyperThreading (выдает ~51% usage).

    Может правильнее брать ActiveProcessors ?



    p.s. возможности самому посидеть за компом с hyperthreading пока нету, такчто не судите строго...
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    2NoMD

    Если будет возможность глянь Диспетчер задач на таком компе при загрузке проца одной прогой.
     
  3. NoMD

    NoMD New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    18
    Адрес:
    Russia
    Если б была возможность потыкать на таком компе, я б наковырял.



    Может кто знает какие-нибудь доки как считать cpu, а то что-то нужное не найду никак.
     
  4. NoMD

    NoMD New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    18
    Адрес:
    Russia
    Я тут переделал кое-что. Посмотрите кто-нибудь с HyperThreading процессором будет ли это работать:



    newIdleTm=SystemPerformanceInformation->IdleTime.QuadPart;

    newCurTm=SystemTimeOfDayInformation->CurrentTime.QuadPart;

    if(oldIdleTm!=0){

    cpuIdleTime=newIdleTm; cpuIdleTime-=oldIdleTm;

    dbSystemTime=newCurTm; dbSystemTime-=oldCurTm;

    if(dbSystemTime){

    cpuIdleTime/=dbSystemTime;// CurrentCpuIdle = IdleTime / SystemTime

    cpuUsage=1.0-cpuIdleTime; cpuUsage*=100.0;

    }

    }

    oldIdleTm=newIdleTm;

    oldCurTm=newCurTm;
     
  5. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    Посмотрю, если приатачишь экзешник, а то компилить нечем.