Что нового

Измерить среднюю производительность компьютера с помощью AutoIt

Suppir

Продвинутый
Сообщения
967
Репутация
62
Версия AutoIt: последняя

Описание: Необходима функция, которая автоматом измерит примерную производительность компьютера

Примечания:

0) должна измеряться скорость для операций, характерных для AutoIt.

1) измерение должно быть комплексным:
- несколько математических операций в цикле;
- перебор массивов, сравнение строк;
- чтения и записи во временный файл (скорость винчестера);
- чтение информации с экрана (считать матрицу пикселей рабочего стола и что-нибудь с ней сделать).

скорость работы локальной сети не нужна, скорость интернета не нужна.

2) на любом компьютере (хоть старом Celeron'е) время работы бенчмарка не должно превышать 10 секунд.
Значит, простые операции должны выполняться в цикле, чем больше раз успели провернуть цикл за 10 секунд, тем быстрее компьютер.

3) результат должен быть примерно следующего порядка и вида:
celeron 1800 = 3,2 балла
pentium 3.0 = 7,2 баллов
pentium i7 = 18,7 баллов.

Т.е. из максимум из 2 - 3 цифр с округлением до десятых.

4) никаких настроек не должно требоваться. Просто - запустили функцию и получили примерный результат


OffTopic:
зы. а заодно и производительность своих компов измерим :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Suppir
Можно как-то так попробовать:
Код:
Dim $aResult[6] = [5]
$iResult_1 = 0
$iResult_2 = 0

For $i = 1 To $aResult[0]
	$aResult[$i] = _WriteFile()
	$iResult_1 += $aResult[$i]
Next
$iResult_1 = $iResult_1 / $aResult[0]

For $i = 1 To $aResult[0]
	$aResult[$i] = _Plus()
	$iResult_2 += $aResult[$i]
Next
$iResult_2 = $iResult_2 / $aResult[0]

$iResult = StringFormat('%.1f', ($iResult_1 + $iResult_2) / 2)

MsgBox(0, '', $iResult & '%')

Func _WriteFile()
	Local $iCount = 0
	Local $iStart = TimerInit()
	Local $iMax = 300
	Local $iPersent, $hFile

	While 1
		If TimerDiff($iStart) >= 500 Then ExitLoop
		$hFile = FileOpen(@TempDir & '\Test.txt', 2)
		For $j = 1 To 1000
			FileWriteLine($hFile, $j)
		Next
		FileClose($hFile)
		$iCount += 1
	WEnd
	If $iCount >= $iMax Then
		$iPersent = 100
	Else
		$iPersent = $iCount / 3
	EndIf
	FileDelete(@TempDir & '\Test.txt')
	Return $iPersent
EndFunc   ;==>_WriteFile

Func _Plus()
	Local $iCount = 0
	Local $iStart = TimerInit()
	Local $iMax = 500000
	Local $iPersent
	While 1
		$iCount += 1
		If TimerDiff($iStart) >= 500 Then ExitLoop
	WEnd
	If $iCount >= $iMax Then
		$iPersent = 100
	Else
		$iPersent = $iCount / 5000
	EndIf
	Return $iPersent
EndFunc   ;==>_Plus
С массивами и пикселями мне лень писать функции. ;D
Не знаю, насколько это отражает реальную картину, но у меня:
1. 1 x Mobile Intel Celeron M 360, 1400 MHz - ~19%;
2. 2 x QuadCore Intel Core 2 Quad Q6600, 2400 MHz - ~40%
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
выдает всего 74,6%

MB: Gigаbyte GA-P55A-UD3R
CPU: Intel i5-750 2.66GHz (3.150GHz)
CPU FAN: CoolerMaster Hyper 212+
RAM: 2 по 2x2048Mb Kingston 1333MHz (1500MHz, 8Gb)
VGA: ATI HD5870 1024Mb
HDD: 0.5 Tb Seagate Barracuda ST3500620AS (os)
4 x 1Tb WD Caviar Black WD1001FALS
PSU: Chieftec 750W
OS: Windows 7 x64
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Suppir [?]
Но можно ли сделать так, чтобы результат показывал не в процентах, а в "попугаях" или баллах?
Поменяйте
Код:
;...
MsgBox(0, '', $iResult & '%')
;на
MsgBox(0, '', $iResult)
;или на
;MsgBox(0, '', $iResult & ' баллов')
;MsgBox(0, '', $iResult & ' попугаев')
;и т.д. и т.п.


Тест на 10 секунд:
Код:
Dim $aResult[6] = [5]
$iResult_1 = 0
$iResult_2 = 0
$iResult_3 = 0
$iResult_4 = 0

For $i = 1 To $aResult[0]
	$aResult[$i] = _WriteFile()
	$iResult_1 += $aResult[$i]
Next
$iResult_1 = $iResult_1 / $aResult[0]

For $i = 1 To $aResult[0]
	$aResult[$i] = _Plus()
	$iResult_2 += $aResult[$i]
Next
$iResult_2 = $iResult_2 / $aResult[0]

For $i = 1 To $aResult[0]
	$aResult[$i] = _Pixel()
	$iResult_3 += $aResult[$i]
Next
$iResult_3 = $iResult_3 / $aResult[0]

For $i = 1 To $aResult[0]
	$aResult[$i] = _Array()
	$iResult_4 += $aResult[$i]
Next
$iResult_4 = $iResult_4 / $aResult[0]

$iResult = StringFormat('%.1f', ($iResult_1 + $iResult_2 + $iResult_3 + $iResult_4) / 4)

MsgBox(64, 'Info', 'Write - ' & StringFormat('%.1f', $iResult_1) & @LF & 'Plus - ' & _
		StringFormat('%.1f', $iResult_2) & @LF & 'Pixel - ' & _
		StringFormat('%.1f', $iResult_3) & @LF & 'Array - ' & _
		StringFormat('%.1f', $iResult_4) & @LF & 'Среднее - ' & $iResult)

Func _WriteFile()
	Local $iCount = 0
	Local $iStart = TimerInit()
	Local $iMax = 300
	Local $iPersent, $hFile

	While 1
		If TimerDiff($iStart) >= 500 Then ExitLoop
		$hFile = FileOpen(@TempDir & '\Test.txt', 2)
		For $j = 1 To 1000
			FileWriteLine($hFile, $j)
		Next
		FileClose($hFile)
		$iCount += 1
	WEnd
	If $iCount >= $iMax Then
		$iPersent = 100
	Else
		$iPersent = $iCount / 3
	EndIf
	FileDelete(@TempDir & '\Test.txt')
	Return $iPersent
EndFunc   ;==>_WriteFile

Func _Plus()
	Local $iCount = 0
	Local $iStart = TimerInit()
	Local $iMax = 500000
	Local $iPersent
	While 1
		$iCount += 1
		If TimerDiff($iStart) >= 500 Then ExitLoop
	WEnd
	If $iCount >= $iMax Then
		$iPersent = 100
	Else
		$iPersent = $iCount / ($iMax / 100)
	EndIf
	Return $iPersent
EndFunc   ;==>_Plus

Func _Pixel()
	Local $iCount = 0
	Local $iStart = TimerInit()
	Local $iMax = 400 * 400
	Local $iPersent

	For $i = 1 To 500
		For $j = 1 To 500
			PixelGetColor($i, $j)
			$iCount += 1
			If TimerDiff($iStart) >= 500 Then ExitLoop 2
		Next
	Next
	If $iCount >= $iMax Then
		$iPersent = 100
	Else
		$iPersent = $iCount / ($iMax / 100)
	EndIf
	Return $iPersent
EndFunc   ;==>_Pixel

Func _Array()
	Local $iCount = 0
	Local $iStart = TimerInit()
	Local $iMax = 4000
	Local $iPersent, $aTemp[$iCount + 1]
	While 1
		$iCount += 1
		ReDim $aTemp[$iCount + 1]
		$aTemp[$iCount] = $iCount
		If TimerDiff($iStart) >= 500 Then ExitLoop
	WEnd
	If $iCount >= $iMax Then
		$iPersent = 100
	Else
		$iPersent = $iCount / ($iMax / 100)
	EndIf
	Return $iPersent
EndFunc   ;==>_Array
Только _Pixel() не желает работать на Windows 7 64, выдает 0.

Ваш вопрос
У меня сейчас стоит Celeron 420 (1600 Мгц) - выдает всего 17,7%
Хотя, по идее, должен быть быстрее мобильного M360.
Мой ответ
Не знаю, насколько это отражает реальную картину
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
`p r o x y [?]
выдает всего 74,6%
Я изначально брал на ноутбуке (1 x Mobile Intel Celeron M 360, 1400 MHz) результат, который выдают функции и для $iMax умножал его на 5 и округлял, так что у Вас очень хороший результат. :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Неплохо было бы еще писать, что за процессор выдает 74 и 57% :smile:
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
У меня 14% показало, хз какой процессор(=
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Suppir сказал(а):
Неплохо было бы еще писать, что за процессор выдает 74 и 57% :smile:
Intel(R) Core(TM)2 Extreme CPU Q6850 @ 3.00 GHz 3.00 GHz - 57%
Скопировал то что по пкм => свойства на "компьютер" выдает винда. Покупался проц если память не изменяет в 2007 году.
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
И что ведь интересно, даже если это квад, то используется только один процессор такой быстрый. Представляю себе скорость всех четырех!
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
А как заставить работать все 4?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Э... Хорошо бы еще понять, что собственно измеряет этот тест? Т.к. AutoIt использует только одно ядро (процессор), то, например, на каком-нибудь [email protected] скорость будет больше, чем [email protected] FileWriteLine(), в данном случае, будет работать только с кэшем. Соответственно, если он отключен (ноутбуки), то это уже необъективный тест. Вообще, если нужно измерить производительность какой-нибудь железки, нужно производить манипуляции с ней напрямую (ну, черз драйвер). А так...

У меня QX9650 (3 ГГц) c диском WD VelociRaptor (!) и памятью DDR2 с уменьшенными таймингами выдает всего 48%.

:(
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Belfigor
запустить бенчмарк 4 раза :smile:


Yashied
Да, но AutoIt ведь все равно использует одно ядро. У меня на работе стоит квад и пентиум 8500, кажется. Так вот мои однопоточные скрипты (они у меня все такие :smile:работают быстрее на 8500 за счет более высокой частоты отдельных ядер. Зато если запустить несколько тяжелых программ (БД, редактор и т.д), то ощущается преимущество квада.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
При всех прочих равных условиях, на одноядерном процессоре скорость должна быть больше, чем на одном ядре многоядерного процессора при одинаковых тактовых частотах. А если сюда еще добавить HiperTrading...
 

e-Mike

Новичок
Сообщения
15
Репутация
1
Не понял, почему условные попугаи назвали процентами, ну ладно, главное что работает ;D
Что считает - не суть важно, главное - в Автоите, как и нужно автору.
Если интересно - на CoreDuo E4300 (1,8 Ghz) выдает 24,3.
Чтобы соответствовало озвученным цифрам автора, полученную цифру надо поделить примерно на 2,5-3.
 
Верх