Как улучшить эффективность кэширования при доступе к непрерывным данным компонента, но только отдельные данные нуждаются в обновлении? - PullRequest
0 голосов
/ 29 января 2020

Я использую язык C ++; Я пытаюсь понять структуры данных и компоновку, которые лучше всего могли бы l oop превышать только необходимые данные из vector<dataType> или если другая структура данных могла бы исправить неправильный доступ по индексу, используемому только для получения обновленных компонентов. В моем подходе события прослушиваются классом действия, который сигнализирует обо всех операциях, необходимых для выполнения действия, получившего событие. Сигнал будет отправлен вектору того, какие компоненты необходимо изменить и на сколько нужно выполнить определенную операцию;

  • Например, move(Bbox &bbox, float xAmt, float yAmt)
  • будет вызвано добавлением сигнала к vector<pair<idOfComponent,dataNeeded>>, который удерживается BboxManager
  • . idOfComponent используется для получения индекса в vector<dataType>, который содержит компонент; в этом примере идентификатор bbox для получения индекса данных для операции перемещения.

Мои подходы:

  • Идентификаторы компонентов, которые будут запущены действия, производящие операции, не затронут все компоненты этого типа данных, поэтому итерация всего вектора не будет делать больше, чем необходимо
  • , если к ним обращается их идентификатор, который может быть привязан к индексу в векторе, получить доступ к ним не по порядку, может быть, достаточно далеко друг от друга, чтобы использовать другую строку кэша только для этого поиска.
  • Я мог бы отсортировать возрастающий порядок идентификаторов, но пробелы действительно являются проблемой.
  • Перемещение данных в передняя и единственная итерация, которая по-прежнему будет обращаться к данным для последующего копирования или перемещения на передний план, что будет избыточно, поскольку я уже получил данные.

Вопрос: является ли схема этой (как бы слот-карта превращение идентификаторов в индексы в вектор), что мешает мне эффективно использовать кеш в моем сценарии или есть лучший подход к Нужна только работа с данными без пробелов в памяти?

...