2017-02-05 3 views
0

Я работаю в научных вычислениях, и я хотел бы проверить улучшения, связанные с std :: vector.Высокопроизводительная альтернатива std :: vector

Прежде всего, я искренне сомневался, что пользовательские контейнеры могут значительно превосходить те, которые были предоставлены в STL, но после того, как он сыграл с Hopscotch Map и лично сравнивал 4-кратное улучшение по сравнению с std :: unordered_map и 30-кратным улучшением по сравнению с std :: map (просто для поиска, потому что я только просматриваю в своем коде), я не могу не задаться вопросом, есть ли альтернативы std :: vector

+1

Настройка производительности - это широкий предмет. Это зависит от того, на что вы пытаетесь оптимизировать. Вы оптимизируете для вставок? читает? удаляет? В каком масштабе вы работаете? – Srikanth

+4

Ваша карта hopscotch предлагает различные функции от 'std :: unordered_map', поэтому неудивительно, что вы получаете разную производительность. Какой аспект 'std :: vector' вы планировали отказаться в обмен на лучшую производительность? –

+0

В крупномасштабных научных вычислениях наибольшая скорость, которую вы можете получить по простому вектору, заключается в использовании специальных функций ОС для выделения вектора для каждого домена NUMA. Или для каждой отдельной системы в кластере. Смерть от производительности зависит от доступа к данным из другой кластерной системы или узла NUMA. –

ответ

2

Основная область для улучшения, когда вектор является подходящей структурой данных, представляет собой кучу распределение. Если вы добавите больше элементов с течением времени, иногда лучше будет deque (чтобы избежать копирования/перемещения). Кроме того, большой вопрос в том, сколько элементов вы будете хранить? Если у вас несколько групп из множества элементов, вектор отличный. Но если у вас много групп из нескольких элементов, что-то на основе std::array плюс отслеживание размера может быть лучше.

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

Смежные вопросы