Я пытался провести эксперимент с Python, пытаясь выяснить, сколько раз он мог добавить единицу к целому числу за одну минуту.Предполагая, что два компьютера одинаковы, за исключением скорости ЦП, это должно дать оценку того, как быстро могут выполняться некоторые операции ЦП для рассматриваемого компьютера.
Приведенный ниже код является примером теста, предназначенного длявыполнить требования, указанные выше.Эта версия примерно на 20% быстрее, чем с первой попытки, и на 150% быстрее, чем с третьей попытки.Кто-нибудь может сделать какие-либо предложения относительно того, как получить наибольшее количество дополнений за минуту?Желательны более высокие числа.
РЕДАКТИРОВАТЬ 1: Этот эксперимент написан на Python 3.1 и на 15% быстрее, чем четвертая попытка ускорения.
def start(seconds):
import time, _thread
def stop(seconds, signal):
time.sleep(seconds)
signal.pop()
total, signal = 0, [None]
_thread.start_new_thread(stop, (seconds, signal))
while signal:
total += 1
return total
if __name__ == '__main__':
print('Testing the CPU speed ...')
print('Relative speed:', start(60))
EDIT 2: Относительно использования True
вместо 1
в цикле while: не должно быть разницы в скорости.Следующий эксперимент доказывает, что они одинаковы.Сначала создайте файл с именем main.py
и скопируйте в него следующий код.
def test1():
total = 0
while 1:
total += 1
def test2():
total = 0
while True:
total += 1
if __name__ == '__main__':
import dis, main
dis.dis(main)
Запуск кода должен привести к следующему выводу, который показывает, как код был фактически скомпилирован и что сгенерировал PythonИнструкции для виртуальной машины оказались.
Disassembly of test1:
2 0 LOAD_CONST 1 (0)
3 STORE_FAST 0 (total)
3 6 SETUP_LOOP 13 (to 22)
4 >> 9 LOAD_FAST 0 (total)
12 LOAD_CONST 2 (1)
15 INPLACE_ADD
16 STORE_FAST 0 (total)
19 JUMP_ABSOLUTE 9
>> 22 LOAD_CONST 0 (None)
25 RETURN_VALUE
Disassembly of test2:
7 0 LOAD_CONST 1 (0)
3 STORE_FAST 0 (total)
8 6 SETUP_LOOP 13 (to 22)
9 >> 9 LOAD_FAST 0 (total)
12 LOAD_CONST 2 (1)
15 INPLACE_ADD
16 STORE_FAST 0 (total)
19 JUMP_ABSOLUTE 9
>> 22 LOAD_CONST 0 (None)
25 RETURN_VALUE
Излучаемые PVMI (байтовые коды) абсолютно одинаковы, поэтому оба цикла должны работать без разницы в скорости.