The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"cluster communication problem"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"cluster communication problem"  
Сообщение от ghost_in_machine email on 02-Апр-08, 16:58 
Доброго времени суток! Подскажите пожалуйста хорошую идею по решению следующей задачи. Есть кластер многоядерных машин под ОС Linux, на нодах которого работает некая прикладная программа (в виде n ее копий по числу доступных на данной ноде потоков). Даная программа обеспечивает параллельные вычисления по shared memory в пределах одной физической машины. Кроме того, на каждой ноде работает одна копия другой программы (сетевой интерфейс) для обмена данными между физическими машинами и запуска задач на данной многопоточной ноде посредством shared memory. Таким образом, все данные, которые обрабатываться копиями прикладных программ проходят через сетевой интерфейс с/на центральную ноду кластера. Проблема в том, что программа сетевого интерфейса потребляет ресурсы наравне с прикладными программами не выполняя сравнительно много полезной работы, а применение функции sleep() сильно тормозит всю ноду по причине ожидания нею новых/отгрузки старых данных. Как правильно организовать включение/выключение программы сетевого интерфейса что бы он срабатывал лишь в случае прихода/отправки данных. Есть способ выключить программу до появления данных в сокете или изменению семафора, но как организовать реакцию на них одновременно.
Всем спасибо.
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "cluster communication problem"  
Сообщение от Michelnok (??) on 02-Апр-08, 17:37 
>Есть способ выключить программу до появления данных в сокете или
>изменению семафора, но как организовать реакцию на них одновременно.

Например, два процесса (или потока), один читает из shared memory по событию на семафоре и пишет в сокет, другой читает из сокета по мере прихода данных (select/poll) и пишет в shared memory.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "cluster communication problem"  
Сообщение от ghost_in_machine email on 03-Апр-08, 11:37 
>>Есть способ выключить программу до появления данных в сокете или
>>изменению семафора, но как организовать реакцию на них одновременно.
>
>Например, два процесса (или потока), один читает из shared memory по событию
>на семафоре и пишет в сокет, другой читает из сокета по
>мере прихода данных (select/poll) и пишет в shared memory.

Решение не очень удобное, надо выполнять по факту двойную работу. Но все равно спасибо за совет.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "cluster communication problem"  
Сообщение от Alex (??) on 05-Сен-08, 14:46 
А почему MPI нельзя?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "cluster communication problem"  
Сообщение от ghost_in_machine email on 05-Сен-08, 18:16 
>А почему MPI нельзя?

Во-первых, всем приятного возвращения из отпуска. )
Во-вторых, проблему в треде я решил (ИМХО!) приемлемо – UDP сокеты + обработчик из вот этой темы https://www.opennet.ru/openforum/vsluhforumID9/7497.html на SIGIO.
В-третьих, почему не MPI. MPI можно, но мне не нравиться несколько его свойств (сам MPI не пользовал, только читал документацию, потому поправите, если что):
1. MPI запрашивает данные, нужные для продолжения расчета, в момент, когда они уже нужны алгоритму. В моих задачах (биомедицинское моделирование) есть возможность предсказывать, какие данные понадобятся дальше, и, таким образом, избегать простоев потоков в ожидании их доставки, да и саму доставку можно оптимизировать как по времени, так и по топологии сети (последнее впрочем, скорее мечты). Хотя эту часть работы можно переложить на приложение, но ее реализация по затратам усилий сопоставима с разработкой простенькой специализированной программной платформы для кластерных вычислений (виртуальный процессор, стек его команд, протокол обмена данными и т.д.). Короче полумеры – не наш метод ).
2. MPI не позволяет переносить задачу между физичесими потоками и/или менять количество задействованных потоков "на лету", что на практике приводит к частичным простоям и последующим перегрузкам кластера.
3. Нужно дополнительное, стороннее ПО,  которое выделит ресурсы для выполнения задачи на кластере.
4. Симметричность приложений MPI. Хотя это и не обязательное правило, но куда рациональнее иметь некий инструмент (в моем случае речь идет о примитивном движке базы данных) в составе системы управления потоками данных, чем изобретать велосипед во всех разрабатываемых приложения.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру