LINUX.ORG.RU

Приложение, требующее большого кол-во одновременных процессов/потоков


0

0

Допустим необходимо реализовать subj. Неважно что оно будет делать, вычислять ли матрицу, либо обрабатывать большое число одновременных коннектов. Оно должно работать на SMP системе, возможно даже не на одной. Какой стратегии в общем случае придерживаться?

native threads -- дорого и если их более-менее много система ляжет.

green threads -- почти то что нужно, но каким образом задействовать SMP непонятно.

Подскажите как быть.

anonymous

Ответ на: комментарий от dimaz-z

> Возможно имеет смысл использовать MPI. Для распределённые систем самое то.

Штука интересная, но кроме как с C, C++ и Fortran ее использовать нельзя? Например так:

Целевой язык (неважно какой пока) поддерживает green-threads и имеет удобный FFI. Можно ли запустить application instance по числу cpu/core/node и обмениваться сообщениями между этими instance с помощью MPI через FFI?

Легко ли пользоваться этой библиотекой?

anonymous
()

простите меня за глупый вопрос, но что за зверь такой эти зелёные потоки? то, что о них пишет википедя? в плане того, что это реализация многопоточности средствами userland aka "многопоточность для бедных"?

// wbr

klalafuda ★☆☆
()

> Неважно что оно будет делать, вычислять ли матрицу, либо обрабатывать большое число одновременных коннектов.

это, кстати, принципиально важно - что именно оно будет делать. это первый вопрос, который нужно задать. вычислительные задачи и задачи ввода/вывода - это две большие разницы.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> это, кстати, принципиально важно - что именно оно будет делать. это первый вопрос, который нужно задать. вычислительные задачи и задачи ввода/вывода - это две большие разницы.

Вычислительные задачи.

anonymous
()
Ответ на: комментарий от anonymous

> Вычислительные задачи.

ну тут видимо нужно смотреть на конкретную реализацию да, собственно, мерить.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

Тогда, если будет сильно распределённая (несколько компов), то по-моему почти безальтернативно: MPI. Да, он вроде только под C/C++, Fortran, может правда, портирован ещё куда. Но в принципе всё логично, в вычислительных задачах C/C++/Fortran почти всегда только и пользуют.

В своё время писал с использованием MPI, всё довольно просто, но немного другой принцип: тут у тя есть разделяемые данные в памяти и ты к ним просто доступаешься (к примеру), а в MPI ты обмениваешься сообщениями с данными.

dimaz-z
()
Ответ на: комментарий от dimaz-z

> Но в принципе всё логично, в вычислительных задачах C/C++/Fortran почти всегда только и пользуют.

Задачи не совсем вычислительные, т.е. не расчет матриц и пр., будет сложный анализ данных скорее, алгоритмы будут сложные, поэтому на низкоуровневые c/c++/fortran заморачиваться не хотелось бы.

anonymous
()

Ну, скажем, GHC раскидывает зелёные потоки по физическим, исполняемым на разных процах.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

> Ну, скажем, GHC раскидывает зелёные потоки по физическим, исполняемым на разных процах.

хмм, задачи будут с применением методов AI, удобно ли их будет решать на хаскелл, не знаю

anonymous
()

Erlang надо использовать

anonymous
()

> Допустим необходимо реализовать subj. Неважно что оно будет делать, вычислять ли матрицу, либо обрабатывать большое число одновременных коннектов. Оно должно работать на SMP системе, возможно даже не на одной.

как уже сказали очень даже важно. если ты напишешь с тредами а окажется что надо работать на многих компах то оно либо вообще не заработает будет, либо будет ужасно медленно, death through latency...

ведь если совсем абстрагироваться от того что приложение должно делать, надо писать не тредами а процессами и общаться по TCP. seti@home, folding@home - слышал про таких? самые параллельные приложения в мире, всякие MPI-решения рядом не стояли :-)

А если тебе треды нужны то нужно ответить на вопрос зачем именно и тд.

gods-little-toy ★★★
()

Насчет green threads vs native threads посмотри на task parallelism в intel threading building blocks. Идея в том, что ты пишешь код в терминах заданий(функторов), а библиотечный шедулер раскидывает их по реальным нитям. Нити создаются по числу ядер в системе либо вручную.

Если говорить про распределенные вычисления - то тут скорее всего тот самый MPI, либо его комбинация с нитями. Основная фича - скорость + абстракция от interconnect-а, важно когда приложению не будет хватать ethernet, т.е. это вариант для распараллеливания сильно связанных задач.

YesSSS ★★★
()
Ответ на: комментарий от gods-little-toy

> seti@home, folding@home - слышал про таких? самые параллельные приложения в мире, всякие MPI-решения рядом не стояли :-)

И задачи небось такие, что сообщения хоть бандеролью с хардами доставляй, пинг не критичен? =))

YesSSS ★★★
()

Matlab, R, и прочие умеют использовать MPI, но это будет медленно

dimon555 ★★★★★
()
Ответ на: комментарий от anonymous

> Штука интересная, но кроме как с C, C++ и Fortran ее использовать нельзя?

Можно. OcamlMpi.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.