Автор темы
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
К курсу →
- Статус
- Закрыто для дальнейших ответов.
Автор темы
Если надо, то могу выслать курсач (делал для одного парня), он на VC++ 6.0 MFC под Win. Только мыло укажи.
Вот кусочек про тактовую частоту:
Что касается вычисления тактовой частоты процессора, то существуют несколько способов.
Первый основывается на том факте, что некоторые инструкции выполняются строго определенное количество машинных тактов. Обычно такая методика применяется на 386 и 486 процессорах. Например, инструкция Bit Scan Forward (BSF) выполняется одинаковое количество тактов на процессорах 386, 486 и Pentium, так что выполнение этой инструкции несколько раз в цикле даст нам известный промежуток времени, из которого может быть вычислена тактовая частота процессора. Пример такого цикла показан в следующем фрагменте:
Этот фрагмент кода выполняется соответственно 115, 47 и 43 такта на процессорах Intel 386, 486 и Pentium. На процессорах семейства Pentium Pro надежность алгоритма падает из-за особенностей архитектуры (динамическое выполнение и распределение ресурсов) и каждый цикл выполняется приблизительно 3.3 машинных такта. Для увеличения надежности метода нужно увеличить количество итераций. После определения количества тактов, необходимых для выполнения итераций, задача вычисления тактовой частоты процессора становится тривиальной.
Второй способ – использование инструкции RDTSC. Измерение скорости процессора, который поддерживает инструкцию RDTSC намного проще, чем у процессора, который ее не поддерживает. Для этого нужен высокопроизводительный таймер с известной частотой. Вы запускаете оба таймера на определенное время. Отсюда может быть вычислена частота таймера RDTSC.
Далее приведен псевдо-код, который выполняет 1000 циклов счетчика, из чего затем определяется частота, на которой работает процессор:
Далее частота процессора может быть вычислена о следующей формуле:
Real time = (1/Частота второго высокопроизводительного таймера) * T_elapsed
Clock speed = RDTSC_elapsed / Real Time
Для определения другой информации о процессоре используется инструкция CPUID
Вот кусочек про тактовую частоту:
Что касается вычисления тактовой частоты процессора, то существуют несколько способов.
Первый основывается на том факте, что некоторые инструкции выполняются строго определенное количество машинных тактов. Обычно такая методика применяется на 386 и 486 процессорах. Например, инструкция Bit Scan Forward (BSF) выполняется одинаковое количество тактов на процессорах 386, 486 и Pentium, так что выполнение этой инструкции несколько раз в цикле даст нам известный промежуток времени, из которого может быть вычислена тактовая частота процессора. Пример такого цикла показан в следующем фрагменте:
Код:
mov eax, 80000000h
mov ebx, 10000
LOOP: bsf ecx,eax
dec ebx
jnz LOOP
Этот фрагмент кода выполняется соответственно 115, 47 и 43 такта на процессорах Intel 386, 486 и Pentium. На процессорах семейства Pentium Pro надежность алгоритма падает из-за особенностей архитектуры (динамическое выполнение и распределение ресурсов) и каждый цикл выполняется приблизительно 3.3 машинных такта. Для увеличения надежности метода нужно увеличить количество итераций. После определения количества тактов, необходимых для выполнения итераций, задача вычисления тактовой частоты процессора становится тривиальной.
Второй способ – использование инструкции RDTSC. Измерение скорости процессора, который поддерживает инструкцию RDTSC намного проще, чем у процессора, который ее не поддерживает. Для этого нужен высокопроизводительный таймер с известной частотой. Вы запускаете оба таймера на определенное время. Отсюда может быть вычислена частота таймера RDTSC.
Далее приведен псевдо-код, который выполняет 1000 циклов счетчика, из чего затем определяется частота, на которой работает процессор:
Код:
T_start = T_end = Значение второго высокопроизводительного таймера
RDTSC_start = Значение инструкции RDTSC
while (T_start - T_end <1000)
{
T_end = Значение второго высокопроизводительного таймера
}
RDTSC_end = Значение инструкции RDTSC
RDTSC_elapsed = RDTSC_end – RDTSC_start;
T_elapsed = T_end – T_start;
Далее частота процессора может быть вычислена о следующей формуле:
Real time = (1/Частота второго высокопроизводительного таймера) * T_elapsed
Clock speed = RDTSC_elapsed / Real Time
Для определения другой информации о процессоре используется инструкция CPUID
2 kagor
Если у тебя NT система, то много сведений тянется из реестра. Причем для каждого процессора отдельно (если мультипроцессорная система).
Если у тебя NT система, то много сведений тянется из реестра. Причем для каждого процессора отдельно (если мультипроцессорная система).
2 ????: kagor@pochta.ru
2 Серёга : Откуда именно тянется (система однопроцессорная)
2 Серёга : Откуда именно тянется (система однопроцессорная)
Еще, для определения информации о процессоре можно использовать WMI (по крайней мере я на это надеюсь) - правдо не знаю как

Если узнаю, напишу. Узнает кто-либо другой - напишите тоже.
P.S. Еще можешь посмотреть http://www.rsdn.ru/Forum/?mid=226604
Если узнаю, напишу. Узнает кто-либо другой - напишите тоже.
P.S. Еще можешь посмотреть http://www.rsdn.ru/Forum/?mid=226604
Вот что-то по WMI нашел. А что это не знаю (надеюсь пока)

Win32_Processor
The Win32_Processor WMI class represents a device that can interpret a sequence of machine instructions on a computer running a Windows® operating system. On a multiprocessor machine, one instance of the Win32_Processor class exists for each processor.
Win32_Processor
The Win32_Processor WMI class represents a device that can interpret a sequence of machine instructions on a computer running a Windows® operating system. On a multiprocessor machine, one instance of the Win32_Processor class exists for each processor.
Код:
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)
For Each objItem in colItems
Wscript.Echo "AddressWidth: " & objItem.AddressWidth
Wscript.Echo "Architecture: " & objItem.Architecture
Wscript.Echo "Availability: " & objItem.Availability
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
Wscript.Echo "CpuStatus: " & objItem.CpuStatus
Wscript.Echo "CreationClassName: " & objItem.CreationClassName
Wscript.Echo "CurrentClockSpeed: " & objItem.CurrentClockSpeed
Wscript.Echo "CurrentVoltage: " & objItem.CurrentVoltage
Wscript.Echo "DataWidth: " & objItem.DataWidth
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "DeviceID: " & objItem.DeviceID
Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared
Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription
Wscript.Echo "ExtClock: " & objItem.ExtClock
Wscript.Echo "Family: " & objItem.Family
Wscript.Echo "InstallDate: " & objItem.InstallDate
Wscript.Echo "L2CacheSize: " & objItem.L2CacheSize
Wscript.Echo "L2CacheSpeed: " & objItem.L2CacheSpeed
Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode
Wscript.Echo "Level: " & objItem.Level
Wscript.Echo "LoadPercentage: " & objItem.LoadPercentage
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "MaxClockSpeed: " & objItem.MaxClockSpeed
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "OtherFamilyDescription: " & objItem.OtherFamilyDescription
Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
Wscript.Echo "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities
Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported
Wscript.Echo "ProcessorId: " & objItem.ProcessorId
Wscript.Echo "ProcessorType: " & objItem.ProcessorType
Wscript.Echo "Revision: " & objItem.Revision
Wscript.Echo "Role: " & objItem.Role
Wscript.Echo "SocketDesignation: " & objItem.SocketDesignation
Wscript.Echo "Status: " & objItem.Status
Wscript.Echo "StatusInfo: " & objItem.StatusInfo
Wscript.Echo "Stepping: " & objItem.Stepping
Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName
Wscript.Echo "SystemName: " & objItem.SystemName
Wscript.Echo "UniqueId: " & objItem.UniqueId
Wscript.Echo "UpgradeMethod: " & objItem.UpgradeMethod
Wscript.Echo "Version: " & objItem.Version
Wscript.Echo "VoltageCaps: " & objItem.VoltageCaps
Next
kagor
Я бы не сказал. А асмом в NT системах бывает туговато. А WMI многое решает.
Я бы не сказал. А асмом в NT системах бывает туговато. А WMI многое решает.
Серёга
kagor
С асмом не должно быть туговато нигде
Его юзают везде - и в 9x и в NT. И для NT писать на нем чуть-чуть легче, т.к. если лажанулся - NT зарубит ошибку, а 9x - зарубит сама себя.
kagor
С асмом не должно быть туговато нигде
Его юзают везде - и в 9x и в NT. И для NT писать на нем чуть-чуть легче, т.к. если лажанулся - NT зарубит ошибку, а 9x - зарубит сама себя.
Драйвер! Или сторонние библиотеки (например io.sys).А как же прямой доступ к железу?
А то, что под 98 можно напрямую работать с железом - это глюк системы (защиты), которую используют как особенность
????
Это как посмотреть. При прямом доступе ты не зависишь от чьих-то библиотек и драйверов.
Это как посмотреть. При прямом доступе ты не зависишь от чьих-то библиотек и драйверов.
Ну так пиши драйвер (наслаждайся BSODПри прямом доступе ты не зависишь от чьих-то библиотек и драйверов
kagor
Ну мы еще чуть-чуть пофлеймим и успокоемся
А если хочешь (ты же все-таки создатель вевти), можем тему закрыть
Ну мы еще чуть-чуть пофлеймим и успокоемся
А если хочешь (ты же все-таки создатель вевти), можем тему закрыть
- Статус
- Закрыто для дальнейших ответов.
Ещё по теме
4
Поделиться: