Функция синхронизации в питоне не дает точного результата - PullRequest
1 голос
/ 28 июня 2010

Я разработал схему для шифрования знаков, я хочу проверить время, затраченное на модульное возведение в степень. Я использую приведенный ниже код для шифрования часть

start = time.clock()
gamma  =    pow(g , x, p)
print ('The value of gamma is : '),gamma
Time_signcrypt = time.clock() - start

и для части без шифрования я вычисляю время, затраченное на эту строку кода

start = time.clock()
seed =  (XA + x - XA) 
gamma_new = pow(g , seed, p)
Time_new_gamma = time.clock() - start

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

Signcryption values: 
0.035299674 
0.025940017 

Unsigncryption values: 
0.019342944
0.01727206

Значения должны быть одинаковыми, так как одна и та же функция применяется на обоих концах с одинаковыми параметрами. Еще одна важная вещь заключается в том, что в части без шифрования один шаг является дополнительным, но все же время, затрачиваемое на выполнение, меньше, чем в части шифрования. Я не могу понять, что не так, я проверил почти 35 раз, и результаты меняются в большинстве случаев: (

Пожалуйста, совет, где я иду не так?

Ответы [ 3 ]

4 голосов
/ 28 июня 2010

Для методов времени запускайте их много раз, пока суммарное время не станет равным не менее 10 секунд, а затем разделите время на количество прогонов.

В противном случае время будет очень неточным по разным причинам:

  1. Другие процессы, которые получают процессор
  2. Прерывания, работающие в фоновом режиме
  3. Тепловые эффекты
  4. Космическое излучение
  5. Вы поняли ..; -)
3 голосов
/ 28 июня 2010

Существует модуль timeit , предназначенный именно для этого. Он запускает ваш код несколько раз (по умолчанию 1 миллион) и выдает статистику этого запуска. Гораздо точнее, чем пытаться определить время одного прогона, когда ваш код может быть подвержен всевозможным проблемам.

1 голос
/ 28 июня 2010

Поскольку процессоры постоянно планируют между различными процессами, один и тот же фрагмент кода будет занимать разное время при каждом выполнении.

Первая функция будет в целом медленнее из-за оператора print, который занимает «довольно много» времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...