Допустим, что у нас есть T количество потоков, и мы хотим распространять проблему с размером N в эти темы. Каждый поток выбирает часть этой проблемы для ее выполнения. Каждый поток будет использовать thread_id (число от 0 до T-1), T и N, чтобы рассчитать диапазон подзадачи. Предположим, что область подзадачи - [S, E), где S и E принадлежат [0, N].Алгоритм распределения рабочей нагрузки в пуле потоков
Например. Допустим, у нас есть массив целых чисел. Размер массива равен 10. Мы хотим увеличить каждый элемент этого массива на один, и мы хотим сделать это параллельно, используя 4 потока.
- 1-нить с thread_id == 0 будет использовать диапазон [0, 3)
- 2-й нити с thread_id == 1 будет использовать диапазон [3, 6)
- 3-я нить с thread_id = = 2 будет использовать диапазон [6, 8)
- 4-нить с thread_id == 3 будет использовать диапазон [8, 10)
кто-нибудь знает быстрый алгоритм, который рассчитает эти диапазоны? Предпочтительно без атомов или ветвей.
Реалистично, создавая поток в тысячу раз медленнее, чем любым разумным способом вас возможно, рассчитать эти диапазоны. Не беспокойтесь об этом. –
@MooingDuck Не могли бы вы уточнить? Я неправильно понял вопрос или что-то не хватает? Оператор не запрашивает планирование, просто разделение диапазона. – ciamej
Также, насколько вы обожаете эти точные диапазоны? Это нормально, если другой поток имеет немного меньший диапазон, а не всегда последний? –