как равномерно распределить расчетную работу между клиентами - PullRequest
2 голосов
/ 18 июня 2011

У меня есть небольшая проблема.

У меня есть вход: "/ 0-9 / 0-9 / 0-9 / 0-9". в этом случае его 10 ^ 4 возможностей.

моя программа проанализирует его, вычислит все перестановки и выведет вывод. в нашем случае вывод: 0001 0002 , , , 9999

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

ограничение заключается в том, что формат задачи, отправляемой сервером клиенту, должен быть в формате "/ # - # / # - # / # - # / # - # /" Сервер может отправить более одного задания каждому клиенту, если все клиенты получают одинаковое количество заданий.

еще один пример: у меня есть два подключенных клиента. и мой ввод / 0-9 / 0-9 / 0-9 / 0-9 / так что я пришлю:

Clinet1: / 0-4 / 0-9 / 0-9 / 0-9 /

Clinet2: / 5-9 / 0-9 / 0-9 / 0-9 /

как я могу равномерно распределить между n клиентами?

Тпй

1 Ответ

1 голос
/ 18 июня 2011

Я бы подошел к этому, выяснив, сколько из 10^4 возможностей должен решить каждый клиент, если бы вы распределили предметы равномерно:

Items per client = 10^4 / N

Скажите N = 20, затем Items per client = 500. Так что теперь вам нужно разбить ввод на группы по 500

0-0/0-4/0-9/0-9  (0 - 499)
0-0/5-9/0-9/0-9  (500 - 999)
1-1/0-4/0-9/0-9  (1000 - 1499)
1-1/5-9/0-9/0-9  (1500 - 1999)
2-2/0-4/0-9/0-9  (2000 - 2499)
etc etc

Это становится немного более запутанным, когда N не делится равномерно на 10 ^ 4, но вы можете просто округлить # заданий для отправки каждому клиенту, чтобы клиенты иногда перекрывали задания в конечных точках интервалов

Редактировать: пример, если N = 3, то элементов на клиента = 3333,333. Затем округлите это до 3000 каждый, и пусть последний сделает 4000

Client 1: 0-2/0-9/0-9/0-9
Client 2: 3-5/0-9/0-9/0-9
Client 3: 6-9/0-9/0-9/0-9

Вы можете обобщить этот алгоритм, чтобы разделить элементы равномерно. Если N между 1-10, то вы будете разбивать первый интервал. Если N между 11-100, то вы будете разбивать 2-й интервал. Если N составляет от 101 до 1000, вы будете разбиваться на 3-м интервале

...