это компонент, находящийся глубоко в структуре данных на самом низком уровне, где n равно small , а константа
по маленьким, я предполагаю, что вы имеете в виду меньше, чем L1 CPUразмер кеша где-то меньше 1 МБ или кэш-память второго уровня до 10-20 МБ, в зависимости от вашего процессора, то нет,
Мне интересно, следует ли учитывать расстояние между чтением и памятью записи.
иногда;если все данные могут поместиться в кэш CPU L1, L2, L3, на котором выполняется процесс, то, как вы думаете, произвольный доступ означает, что при применении все это будет иметь одинаковую задержку.Вы можете получить мельчайшие детали и углубиться в различия между кэшем L1, L2, L3, но ради краткости (и я просто принимаю это как должное) в любом месте в пределах памяти граница это все та же задержка для доступа.Так что в вашем случае, когда N мало, и если все это помещается в кэш процессора (первое из многих границ), то это будет способ и эффективность, в которой вы решили перемещать / изменять значения, и сколько раз вы в конечном итоге это делаетекоторый влияет на производительность (время для завершения).
Теперь, если N были большими, например, в системе с 2 или более сокетами (через intel QPI или UPI) и эти данные находились в оперативной памяти DDRкоторый расположен через путь QPI или UPI к памяти, затемняет контроллер памяти другого ЦП, тогда определенно да большой удар по производительности (условно говоря), потому что теперь граница была пересечена, и это было бы то, чтоНЕ мог поместиться в кэш ЦП, на котором выполнялся процесс (который был изначально извлечен из DIMMS LOCAL в этот контроллер памяти ЦП), теперь влечет за собой накладные расходы на общение с другим ЦП по пути QPI или UPI (хотя все еще очень быстро по сравнению спредыдущая архитектура) и этот другой процессор затем извлекает данные из набора памяти DIMMS и отправляет его обратно через QPI или UPI в процессор, на котором выполняется ваш процесс.
Таким образом, когда вы превышаете ограничение кэша L1 в L2, происходит снижение производительности, также как и в кэше L3, все в одном ЦП.когда процесс должен многократно извлекать из своего локального набора диммов больше данных, которые он не может вписать в кэш, то это влияет на производительность.И когда эти данные не находятся на локальных по отношению к диммерам, то процессор = медленнее.И когда эти данные не находятся на одной материнской плате и проходят через какое-то высокоскоростное волокно RDMA = медленнее.Когда через Ethernet еще медленнее ... и т. Д.