У меня есть код, который использует vector<vector<>>
для хранения результатов расчета.C++ векторизация вектора векторов
С помощью бенчмаркинга я обнаружил, что это мешает моему векторизации кода, хотя я обращаюсь к элементам с соответствующим C-шагом.
Я пытаюсь создать структуру данных, которая будет векторизовывать и улучшать производительность моего кода.
Я прочитал несколько сообщений здесь, и некоторые из них упомянули о создании класса, который имеет 2 отдельных вектора внутри: 1 для хранения данных смежно, а другой для хранения индексов, обозначающих начало нового столбца/строки из оригинал 2D vector<vector>
. По сути, он разложил 2D-массив на 1D и использовал бы «вспомогательный» вектор, чтобы обеспечить правильную индексацию.
Я забочусь о том, что я также читал, что векторизация обычно не происходит с косвенным индексированием, подобным этому, например, в общей схеме хранения сжатых строк для разреженных матриц.
Перед тем, как я пройду всю работу по ее реализации, кто-нибудь сталкивался с этой проблемой раньше и решил ее? Любые другие предложения или ресурсы, которые могли бы помочь?
Что вы подразумеваете под «... доступом к элементам с соответствующим C-шагом»? Я не могу представить, как вы могли бы определить шаг для 'vector>'. –
anatolyg
@anatolyg Мне было просто интересно то же самое. Тем не менее, я понятия не имею, что такое C-шаг в целом – user463035818
С помощью C-stride я имею в виду повторение второго индекса, а затем первого. Поэтому я в основном повторяю все элементы одного из внутренних векторов, прежде чем переходить к следующему. Поскольку векторные данные смежны в памяти, и поскольку я перебираю все элементы по порядку, я должен получить векторизация, но я не уверен. Я добавил комментарий шага, потому что несколько сообщений, которые я читал, имели людей, которые неправильно зацикливались и взяли один элемент из каждого внутреннего вектора, что действительно испортило их загрузку кеша. Я хотел избежать того, чтобы люди отвечали на этот вопрос, потому что это не относится ко мне. – BlackBelt2025