Подтвердить что ты не робот

Что означает "промежуточный результат в кешировании"?

У меня есть набор из n векторов, хранящихся в матрице 3 x n z. Я нахожу внешний продукт с помощью np.einsum. Когда я приурочил его, используя:

%timeit v=np.einsum('i...,j...->ij...',z,z)

Я получил результат:

The slowest run took 7.23 times longer than the fastest. This could mean that an
intermediate result is being cached 
100000 loops, best of 3: 2.9 µs per loop

Что здесь происходит и его можно избежать? Лучшие 3 - 2.9us, но самый медленный, возможно, более типичный.

4b9b3361

Ответ 1

Сообщение "промежуточный результат кэшируется" - это просто слепая догадка в сохраненном сообщении, сообщаемом% timeit. Это может быть или не быть правдой, и вы не должны предполагать, что это правильно.

В частности, одной из наиболее распространенных причин для первого запуска является самый медленный, так это то, что массив находится в кэше CPU только после первого запуска.

CPU автоматически кэширует вещи; вы не можете этого избежать, и вы действительно не хотите этого избежать. Однако оптимизирующие алгоритмы, позволяющие оптимизировать работу кэшей CPU, в настоящее время являются одним из узких мест, которые необходимо учитывать при высокопроизводительных вычислениях.