Самый ценный инструмент при поиске узких мест производительности - измерение .Вам нужно выяснить, в каком коде возникла проблема, а затем измерить ее на отсутствие кеша, если это действительно является проблемой.
Что касается общих идей, вам нужно будет уменьшитьмисс скорость.Поэтому, когда вы извлекаете данные в память, вам нужно как можно больше работать с ними, прежде чем снова их покинуть, а не передавать данные.Сравните, например,
for i in data:
f(i)
for i in data:
g(i)
for i in data:
h(i)
, который перебирает список три раза.Можно записать это следующим образом:
for i in data:
h(g(f(i)))
понижение хода только до одного раза, что обычно приводит к меньшему количеству пропусков.
Еще один полезный прием - подумать о структуре данных.Шаблоны доступа двоичного дерева сильно отличаются от шаблонов хеш-таблицы.Но сначала установите измерение, чтобы вы могли быть уверены, что вы упустили промахи - и что именно промахи являются вашей проблемой.
Наконец, даже при низкой частоте промахов вы можете посмотреть на снижение пропускной способности памяти в целом.Если вы перемещаете много-много данных, они, как правило, будут медленными, поскольку скорости памяти растут с гораздо меньшей скоростью по сравнению с количеством транзисторов.