У меня есть массив элементов, которые я хочу использовать hash (это шаблонный массив или вектор, если хотите) и пустую таблицу хэша. У меня есть процессор с несколькими ядрами (и гиперпотоком), и я хочу использовать его как можно лучше, чтобы вставить все элементы массива в набор. Есть ли код в STL (или в Boost или какой-либо другой бесплатной библиотеке), который это делает?Стенд многопоточного подхода для построения набора всех элементов в массиве?
Я понимаю, что некоторые тривиальные решения:
- Используйте параллельный/поточно-набор (например, хэш-поддержку), и просто каждая нить вставить секцию массива.
- Имейте каждый поток, создавая свой собственный набор, а затем повторно вычисляйте объединенные множества.
Но я бы предпочел не писать свои собственные, а использовать общепринятый код. Редактировать также, я хочу решение, которое не требует от меня использования какой-либо конкретной системы управления потоками/объединения, но которую я могу использовать только с произвольными нитями.
Примечания:
- Излишне говорить, что вставка набор не вставляет дубликаты.
- Массив может иметь дубликаты (на самом деле, я ожидаю, что количество элементов набора будет меньше 1% длины массива, но не может предполагать, что это всегда так).
- В комплект не нужно поддерживать удаление элемента, или он может быть медленным и т.д.
И не будет ли TBB «взять на себя» управление потоками? Или это просто создаст собственные потоки? (Извините за поздний ответ) – einpoklum
Для запуска 'parallel_for' и других шаблонов алгоритмов TBB использует собственный пул потоков, а также использует поток, который называется алгоритмом. Однако 'concurrent_unordered_set' и другие контейнеры могут использоваться из любого потока, либо созданного TBB, либо других потоков в программе. –