Почему время выполнения двух функций зависит от порядка кода? - PullRequest
0 голосов
/ 07 мая 2019

Я написал две аналогичные функции, которые сводят два клочковых uint16 в один uint32. Я хотел проверить их время выполнения, чтобы увидеть, какой из них быстрее. Результат зависит от того, какая функция запускается первой.

def int32(x):
    return 65536 * x[:, 0] + x[:, 1]

def int32shift(x):
    return np.bitwise_or(np.left_shift(x[:, 0], 8), x[:, 1])

def parsePayloadshift(payload):
    np_payload = np.fromstring(payload, dtype='>u2').reshape((-1, 38))
    flags, t0, t1, data = int32shift(np_payload[:, :2]), int32shift(np_payload[:, 2:4]), int32shift(np_payload[:, 4:6]), np_payload[:, 6:]


def parsePayload(payload):
    np_payload = np.fromstring(payload, dtype='>u2').reshape((-1, 38))
    flags, t0, t1, data = int32(np_payload[:, :2]), int32(np_payload[:,2:4]), int32(np_payload[:, 4:6]), np_payload[:,6:]

#using multiplication

start_time = time.time()
parsePayload(payload)
end_time = time.time()
time_slice = end_time - start_time
print(time_slice)

# using shift

start_time = time.time()
parsePayloadshift(payload)
end_time = time.time()
time_slice2 = end_time - start_time
print(time_slice2)

Я заметил, что функция, которая запускается первой, медленнее. Итак, я запустил код, проверяющий эту последовательность:

сдвиг, умножение, сдвиг

Вот результаты:
0.0002779960632324219 # смена
0,00019311904907226562 # умножение
0.00013971328735351562 # снова сдвиг

Почему этот тест ведет себя таким образом?
Как правильно проверить эти функции, чтобы узнать, какая из них быстрее?

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