Это, кажется, как хорошее место как любой, чтобы отправить это.
Ниже приведен AutoIt скрипт, который позволяет выполнять температуры на основе дросселирования процесса с использованием
. Там есть много возможностей для совершенствования, и я лишь немного очистил его на этот пост, но он служил мне достаточно хорошо «как есть» для подобных задач - в верхней части сценария придется сделать, насколько документация идет.
#cs ************************************************ ****************************
Процесс управления дроссельной заслонкой в зависимости от температуры.
Требуется:
- http://openhardwaremonitor.org/ - Open Hardware Monitor (ОМА)
- http://mion.faireal.net/BES/ - Battle кодировщика Shirase (BES)
Инструкции:
1.
Установите ому и BES.
2.
Run OHM, кликните правой кнопкой мыши по температуре считывания вы хотите контролировать на
левая, выберите «Переименовать» и добавьте «газ» с его именем. RESTART OHM!
3.
Запустите процессор интенсивной программы.
4.
Запуск BES, нажатием на кнопку «тарг», чтобы выбрать процесс душить,
Пресс «Ограничить эту» кнопку, а затем нажмите кнопку «контроль».
5. Оценить этот сценарий, или запустить бинарный файл.
6. Для того, чтобы бросить курить, найти значок AutoIt в трее, правой кнопкой мыши, выберите команду Выход.
(Похоже, синий круг с стилизованной «А» в ней.)
Объяснение:
Это основной AutoIt скрипт, который читает в контроле температуры в
выход через WMI с помощью OHM. Если он выше желаемой температуры, его
движется процесс BES»ограничивающий ползунок вправо, а если ниже, то
перемещает процесс BES»ограничивающий ползунок влево. Это должно привести к
стабильная температура (колебания вокруг центрального значения).
Но не процессоры уже душить?
Да, но они делают это основаны на высоких (пол) фиксированных значения (например, 100 ° С) и
играя с тактовой частотой процессора, в результате чего большая
температурные перепады, потенциально снижение производительности и температуры вы
не может быть комфортно (даже если процессор сам по себе не может
все равно меньше - это будет трудно закрыть, если это действительно «перегревается». )
Ограничения / потенциальные усовершенствования:
Только один датчик температуры и один процесс (первый перечисленных в СЗС)
поддерживается. В идеале, многократная может быть поддержано.
Датчик может быть выбран из списка вместо «дроссельного» имени хака.
Значение ползунка можно установить непосредственно, а не ключевые пресс-писак.
Бес «Предел контроля» должен оставаться открытым (может быть в фоновом режиме).
Температура и дросселирования может быть авторизованы
(Был, но удалены для краткости).
OHM может быть устранен на некоторых системах; Я не мог получить надежный
температурные данные для моей машины, и OHM был переделаны, чтобы работать с
различные аппаратные средства, так могли бы также использовать это.
Только минимальная и грязная проверка ошибок - убеждается OHM и BES работают
на старте
КОНФИГУРАЦИЯ:
Отрегулируйте значения в следующем разделе. Должно быть довольно понятно,
но есть комментарии, на всякий случай.
#ce ************************************************ ****************************
; конфигурация пользователя
Местные $ minTemp = 86
; Температура (в градусах Цельсия), ниже которой процесс будет уделяться больше времени процессора. Должно быть < $ maxTemp
; Примечание: Температура дросселируются к этому значению. Если температура уже ниже его, не дросселирование не применяется.
Местные $ maxTemp = 90
; Температура, выше которой процесс будет уделяться меньше времени процессора. Должно быть > $ minTemp
; Эти значения вместе обеспечивают немного гистерезиса. Рекомендуем Вам держать их близко «вокруг» желаемую температуру.
; Примечание: Если процесс дросселирования на 99% уже, температура по-прежнему может превышать это значение из-за другие процессы, запущенных.
Local $ alertTemp = 99; Если температура достигнет этого значения, будет воспроизведена серия из трех высокого тона звуковых сигналов. Должно быть > $ MaxTemp. Чтобы отключить, просто установить что-то вроде 1000.
Местные $ alertAtLimit = True; Если BES не может быть задушил не дальше, чем на 99%, будут играться серия из трех низких звуковых сигналов основного тона. Должно быть True / False.
Местные $ alertOnError = True; Если Ома / BES / «контроль Limit» окно не открыто, серия из трех уменьшающихся гудков тона будет воспроизводиться на каждом интервале). Должно быть True / False.
; Внутренняя конфигурация
Местные $ sensorTag = "дроссель" ; Датчик Тэг искать.
Местные $ numReadings = 5; Количество отсчетов для усреднения.
; 1 приводит к мгновенной настройки, но датчики температуры редко достаточно стабильны для того, чтобы иметь смысл.
; Рекомендуют 3 <= N <= 10, так как все больше показаний может легко привести к бесконтрольной эскалации температуры
Локальный $ интервал = 1; Интервал в секундах между показаниями.
; Рекомендуют 1 <= N <= 5, так как более длинные длительности могут легко привести к бесконтрольной эскалации температуры
; < 1 не применяется в качестве образцов ОМ на 1 сек.
; ************************************************** ****************************
; Некоторые основные AutoIt конфигурации, включает и внутренние переменные без конфигурации
Opt ("WinTitleMatchMode", 2)
#включают
Местные $ objWMIService
Местные $ currentTemp
Местные $ avgTemp
Местные $ поселились = False
; Проверьте, если все и работает при запуске.
Если (не ProcessExists ("OpenHardwareMonitor.exe")) Затем
МздВох (1,"Ошибка - OHM не работает","Open Hardware Monitor не отображается быть запущен.")
Выход
ElseIf (Не ProcessExists ("BES.exe")) Затем
МздВох (1,"Ошибка - BES не работает","Battle кодировщика Shirase не по всей видимости, работает.")
Выход
ElseIf (Не WinExists ("Ограничитель управления","Целевая Sleep / Awake цикла")) Затем
МздВох (1,"Ошибка - BES управления ограничитель не открыт","Окно Battle Encoder Shirase «Ограничитель управления» не является открытым.")
Выход
еще
; Настройте службу запросов WMI для OHM
$ ObjWMIService = ObjGet ("winmgmts: \\. \ корень \ OpenHardwareMonitor")
Местные $ foundTag = False
Местные $ colItems = $ objWMIService.ExecQuery ("SELECT * FROM Sensor", "WQL", 0x10 + 0x20); wbemFlagReturnImmediately + wbemFlagForwardOnly
За $ objItem в $ colItems
Если (StringInStr ($ objItem.Name, $ sensorTag)) Тогда
$ FoundTag = True
$ CurrentTemp = $ objItem.Value
ExitLoop
EndIf
следующий
Если (не $ FoundTag) Тогда
МздВох (1,"Ошибка - Не удалось найти датчик OHM тег","Датчик тега '" & $ sensorTag & "' не найдено." & @CRLF & "Если вы -just- переименовал его, вы, возможно, забыли перезапустить ОМ.")
Выход
EndIf
EndIf
; Инициализировать показание температуры.
Местные $ tempArray [$ numReadings]
За $ я = 0 в ($ numReadings - 1)
$ TempArray [$ я] = $ currentTemp
следующий
; Начало BES на середине
Местные $ BESthrottle = 50
ControlSend ("Ограничитель управления", "", 1025, "{КОНЕЦ}"); -99% / IDLE
ControlSend ("Ограничитель управления", "", 1025, "{} {PGUP PGUP} {PGUP} {PGUP} {PGUP} {PGUP} {PGUP} {PGUP} {PGUP} {} PGUP"); -49%
ControlSend ("Ограничитель управления", "", 1025, "{ПРАВИЛЬНО}"); -50%
; Преобразовать интервал в секундах, в миллисекундах
$ Интервал * = 1000
; Loop навсегда.
В то время как 1
Если (($ alertOnError) и ((не ProcessExists ("OpenHardwareMonitor.exe")) Или (не ProcessExists ("BES.exe")) Или (не WinExists ("Ограничитель управления","Целевая Sleep / Awake цикла")))) Затем
Звуковой сигнал (3000,250)
Звуковой сигнал (2500,250)
Звуковой сигнал (2000,250)
EndIf
; Получить Ома чтения
Местные $ colItems = $ objWMIService.ExecQuery ("SELECT * FROM Sensor", "WQL", 0x10 + 0x20)
За $ objItem в $ colItems
Если (StringInStr ($ objItem.Name, $ sensorTag)) Тогда
$ CurrentTemp = $ objItem.Value
; Проверьте, если температура пятна выше предупреждения температуры
Если ($ currentTemp >= $ AlertTemp) Тогда
; Процесс Предельное полностью
ControlSend ("Ограничитель управления", "", 1025, "{КОНЕЦ}"); -99% / IDLE
; Оповещение пользователя
Звуковой сигнал (3000,250)
Звуковой сигнал (3000,250)
Звуковой сигнал (3000,250)
EndIf
_ArrayPush ($ tempArray, $ currentTemp, 1)
$ AvgTemp = 0
За $ т в $ tempArray
$ AvgTemp + = $ т
следующий
$ AvgTemp = $ avgTemp / $ numReadings
; Выполните по-температурой дроссельной
$ BESthrottle = ControlGetText ("Ограничитель управления","", 1022)
$ BESthrottle = StringReplace ($ BESthrottle,"%","")
$ BESthrottle = StringRight ($ BESthrottle, 2)
$ BESthrottle = StringReplace ($ BESthrottle," ","")
Если ($ avgTemp > $ MaxTemp) Тогда
Если (($ alertAtLimit) и ($ BESthrottle == 99)) Тогда
Звуковой сигнал (1500,250)
Звуковой сигнал (1500,250)
Звуковой сигнал (1500,250)
еще
ControlSend ("Ограничитель управления", "", 1025, "{ПРАВИЛЬНО}"); Лимит на 1% больше,
EndIf
ElseIf ($ avgTemp >= $ MinTemp) Тогда
$ Поселились = True
Если (ControlGetText ("Ограничитель управления","", 1019) == "Предельные #&1") Затем
ControlSend ("Ограничитель управления","", 1019,"1")
EndIf
ElseIf ($ avgTemp < $ MinTemp) Тогда
Если ((не $ решен) И (ControlGetText ("Ограничитель управления","", 1019) == "Unlimit #&1")) Затем
ControlSend ("Ограничитель управления","", 1019,"1")
EndIf
Если ($ BESthrottle > 1) Тогда
ControlSend ("Ограничитель управления", "", 1025, "{ОСТАВИЛ}"); Лимит на 1% меньше,
EndIf
EndIf
ExitLoop
EndIf
следующий
Sleep ($ интервал)
венед
работает на процессы CPU переплете. Если вы хотите, чтобы задушить GPU минирование / ASIC, проверьте документацию вашего горнорудного приложения - шансы его уже имеют температуру на основе дросселирования в нем. Если нет, то выше скрипт будет работать только для GPU / ASIC дросселирования, если процесс ЦПУ шахтера эффективно контролирует GPU / ASIC использование, а также (что в целом это не так, как большая часть работы имеет тенденцию быть внутренним по отношению к тем процессам).