Я хочу запустить tbb::parallel_for для большого набора данных и создать уникальный набор. В теле parallel_for содержится некоторая дополнительная логика, которая определяет, следует ли включать в этот набор каждый подэлемент исходного набора данных. Результирующий набор обычно намного меньше, чем исходный набор данных, и я бы предпочел не вычислять вектор с дубликатами и удалять дубликаты после этого, так как это увеличит использование памяти.
В моей первой реализации используется tbb::concurrent_unordered_set, и при профилировании я заметил значительное узкое место в производительности в методе set.insert().
Моя попытка улучшить это состоит в том, чтобы попытаться использовать локальное хранилище потока для создания набора для каждого потока, а затем объединить наборы в конце, чтобы удалить атомарность.
Несмотря на то, что я прочитал много документации, я по-прежнему не уверен, что лучше подходит tbb::combinable или tbb::enumerable_thread_specific.
Это должно быть довольно распространенным вариантом использования. Может ли кто-нибудь предоставить пример реализации или указать мне пример в Интернете, на который я могу посмотреть?