|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Распараллелить программу на ~20 компьютеров Pascal |
|
Теория - Распараллелить программу на ~20 компьютеров Pascal
|
Старожил Сообщения: 165 |
Профиль | Отправить PM | Цитировать Здравствуйте. Имеются в наличии ~20 компьютеров приблизительно одинаковой мощности, соединённые между собой в локальную сеть 100 мбит/с фул дуплекс. К примеру, я написал программу на Free Pacal, которая выполняет очень сложную задачу, но при этом эту задачу можно распараллелить (этот код для упрощения можно вынести в отдельную функцию). Вот принцип параллелизации:
1. Выбираем главный компьютер, который будет только обрабатывать результаты и выполнять код, который нельзя распараллелить; 2. Главный компьютер отсылает остальным задание (саму функцию и данные для её работы, при этом данные распределяются между всеми компьютерами); 3. Рабочие компьютеры отправляют результаты на главный компьютер; 4. Программа на главном компьютере продолжает работу. Теперь вопрос: как реализовать. |
|
Отправлено: 18:50, 15-09-2013 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Напоминает обычную работу с распределенной обработкой данных (SQL сервер + клиент-приложение).
|
------- Отправлено: 22:09, 15-09-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать Pavluha, не совсем понятен вопрос. Пишите, грубо говоря, две программы. Отдельно клиентскую часть, отдельно серверную. Потом, если захотите, сможете объединить эти части в одном исполняемом файле. Вас интересует как серверная часть будет запускать клиентские? К примеру, по ssh. Для простоты можно исходить из того, что программа установлена на все компьютеры сети. Как организовать взаимодействие? При помощи AF_INET гнезд (sockets).
Или я неправильно понял, что именно Вас интересует? |
------- Отправлено: 22:20, 15-09-2013 | #3 |
Старожил Сообщения: 165
|
Профиль | Отправить PM | Цитировать всё вы правильно поняли. было бы очень хорошо, чтобы распараллелизация приблизитель выглядела так:
|
Отправлено: 23:23, 15-09-2013 | #4 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Pavluha, самое простое, что приходит на ум "как реализовать ?" Через сетевой протокол. В любом случае это клиент-серверное приложение, и для его работы необходимо "клиент-серверное "окружение. Т.е. набор необходимых процедур и механизмов, которые проведут инициализацию каналов связи, зарегистрируются на сервере и будут вести прием/передачу данных.
В теории ... Возникает вопрос о необходимости "передачи функции". Что под этим подразумевается? Я думаю проще вынести все необходимые функции на сторону клиента и с серверам просто указывать, какую функцию расчета следует запустить, и какие данные подать на вход. К вопросу архитектуры проекта. По логике вещей, хорошо бы сделать "асинхронный ввод/вывод информации". Т.е. запускать нить (?) на инициализацию клиента, одновременно с этим подготавливая пакет данных для второго и т.к. Как это делать и как достигается такая производительность я честно сказать не знаю. Поэтому сервер - в первую очередь диспетчер задач, и искать информацию надо в этой области. ---- Приведенный пример не корректен. |
|
------- Отправлено: 23:52, 15-09-2013 | #5 |
Старожил Сообщения: 165
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
под этим я подразумеваю вот что: выполняется программа на главном компьютере, как только встречает код (для упрощения функцию, легче реализовать), который нужно распараллелить, она отсылает в нескомпилированном виде всем компьютерам эту функцию (на рабочих компьютерах она скомпилируется клиентской программой) и присылает сразу же массив данных, которые нужно подставить в функцию, чтобы она дала ответ. в это время главный компьютер ждёт, когда хотя бы 1 из компьютеров выполнит этот код и вернёт массив значений, и тогда даёт так сказать "следующую порцию". когда все данные розданы, идёт ожидание ответа от каждого компьютера. когда все ответы получены, главный компьютер анализирует полученные данные и продолжает работу (а рабочим компьютерам говорит "отбой"). как-то так. Цитата lxa85:
while (есть данные для распараллелизации) do begin for i:=1 to n do {n-число компьютеров} if r[i]=0 then работает, ничего ему не давать else if r[i]=1 then begin дать задание end else if r[i]=2 then begin считать результаты, при возможности дать ещё задание end else if r[i]=3 then отправляется решение, ничего не давать else begin ошибка при выполнении на уд. компьютере, дать еще раз задание end end; |
||||
Последний раз редактировалось Pavluha, 16-09-2013 в 17:02. Причина: добавлено Отправлено: 16:48, 16-09-2013 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
7 / 2008 R2 - [решено] Установка Windows 7 на 20 компьютеров. | byStep | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 22 | 26-05-2013 15:59 | |
Разное - Помогите написать программу! Turbo Pascal 7.0 | MeeF | Тест-форум | 2 | 08-12-2011 01:02 | |
Установка - установка системы на 20 компьютеров | vlasoft | Microsoft Windows 2000/XP | 2 | 10-10-2011 19:01 | |
Разное - [Pascal] помогите написать программу | rom6520 | Программирование и базы данных | 6 | 22-01-2011 19:54 | |
Разное - Pascal помогите пожалуйста написать программу | Azamt | Программирование и базы данных | 1 | 21-01-2011 17:49 |
|