Разделение рабочей нагрузки на несколько потоков - PullRequest
7 голосов
/ 16 января 2009

Мне было интересно, если кто-нибудь знает о хорошей статье, которая описывает распределение нагрузки на несколько потоков? Предпочтительно это было бы написано для C #, но это действительно концепция, которую я преследую, так что это не проблема, если она написана для другого, похожего языка.

У меня проблема с тем, что мне пришлось бы разделить большое количество вычислений на несколько потоков, а затем суммировать сгенерированные данные после завершения одной итерации (поэтому мне нужно знать, что все потоки завершились), а затем начать новую итерацию , снабжая все потоки данными, сгенерированными на последней итерации (данные будут изменены до конца каждой итерации).

Надеюсь, это имеет смысл и возможно. В любом случае я был бы признателен за некоторые советы о том, как решить проблему вычисления больших объемов данных, разделенных на несколько потоков (чтобы я мог использовать более одного ядра процессора).

Спасибо за ваши ответы!

Ответы [ 4 ]

6 голосов
/ 16 января 2009

Вам стоит взглянуть на Parallel FX (PFX), вы можете найти блог здесь и ссылку для скачивания здесь (Спасибо Марку).

К сожалению, я не знаю, будет ли это выпущено для .NET 2.0 / 3.5, поскольку в настоящее время планируется для .NET 4.0.

Если вы хотите реализовать его самостоятельно, изучите Алгоритмы кражи работы .

Существует также библиотека с именем Power Threading Джеффри Рихтера из Wintellect , в которой есть несколько неплохих классов, доступных для вас.

4 голосов
/ 16 января 2009

Лассе и Марк уже говорили о параллельных расширениях. У меня есть пара статей в блоге (с кодом) об использовании и тестировании:

Это может быть полезно, чтобы показать различные способы разбить работу.

3 голосов
/ 16 января 2009

"Параллельные расширения" предназначены для этого, в частности класс Parallel (который позволяет очень легко разделить работу между потоками). Агрегация результатов сложнее; быстрый поиск показывает смешанные результаты - но я не знаю, что будет в финальной версии (то есть это может быть проще).

CTP доступно здесь или дождитесь .NET 4.0.

0 голосов
/ 16 января 2009

Paint.NET делает это довольно хорошо (для обработки изображений), и исходный код для более старых версий может все еще быть где-то в свободном доступе.

Для получения дополнительной информации, пожалуйста, перейдите к моему вопросу о белой книге автора . Я однажды видел эту тему. Когда я недавно хотел показать эту статью коллеге, я (то есть Google) больше не смог ее найти, поэтому возник вопрос.

...