Низкая производительность с большим стеком и разреженным хешем

У меня есть большой стек беззнаковых длинных длинных (100M +), которые я пытаюсь вставить в SparseHash, но производительность очень низкая, так как для каждых 1К записей это занимает ~ 4-6 секунд на MacBook Pro с 16 ГБ оперативной памяти ,

    while (stackUI.size()>0) {
Set.insert(stackUI.top());
stackUI.pop();
if (stackUI.size()%1000==0) {
cout<<stackUI.size()<<" "<<time(0)<<endl;
}
}

Я делаю что-то не так в своей реализации, или есть лучший подход к этому?

0

Решение

Вы сравнивали производительность с gcc hash_set?

Хэш-контейнеры удваивают свои размеры и копируют все, когда коэффициент загрузки становится высоким (например, 0,5). Поскольку вы уже знаете, сколько элементов будет содержать ваш хэш-сет (размер вашего стека, я думаю), попробуйте зарезервировать эти много сегментов, прежде чем начинать вставку. Таким образом вы избежите повторного хеширования и получите значительное ускорение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]