Перейти к публикации
Форум - ComputerCraft
MeXaN1cK

Реальная "Многопоточность"!

Рекомендованные сообщения

А если задача накроет ноду? :D Нода умрёт и её нужно будет в ручную запускать.

 

Думаю такие штуки надо детектить и будить ноду. Например через Wake-On-LAN.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Специально для КвериМЭН-а:

  Есть задачи, которые распарралелить нельзя( нахождение чисел Фибоначчи), а есть те,которые очень сильно выигрывают(нейросети, рендер)

Если бы это было не так, видеокарт бы не было. Вот прям совсем. А так получается ускорение с 3-х часов до десяти минут..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Если бы это было не так, видеокарт бы не было.

Ну так в том то и дело. Видеокарты используют много простых вычислений. А простые вычисления и близко не стояли к какому нибудь серьёзному алгоритму на нахождение чего-то нужного.

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

А люди ведь надеются на это. Недавно вон отписался игрок, который думал что генетика в Forestry сложная и её можно решить многопоточностью. Если бы она была реально сложная, многопоточность бы не помогла.

 

Теперь насчёт задачи, мне очень любопытно как вы её собираетесь решить.

Скажем так, для примера у нас есть 5 чисел. (не больше, не меньше) Каждое число является одним из 10 символов специального алфавита. Нам нужно пройтись брутом по всем вариантам перемножения этих чисел. Но мы знаем, что от перемены мест слагаемых значение суммы не меняется, а значит например комбинации 14444, 41444, 44144, 44414, 44441 будут считаться за одну.

Тут возникает дилемма. Проходиться по лишним комбинациям и использовать многопоточность, чтобы распределить брут и быстрее решить задачу? Либо решать на одной машине, но не проходить по лишним комбинациям, используя более логичный цикл?

Что выберете вы? И можно ли со вторым случаем как либо подрубить многопоточность? Я так понимаю что нет, но может вы откроете мне глаза на какой-то чудесный алгоритм многопоточности для этого случая?

 

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

 

На примере таблицы умножения. Обычный комп решит задачу за t времени, два компа с алгоритмом для многопоточности решат задачу за те же t времени. Но их нужно два. И если их поставить 4, то они решат за t/2 времени. Что как бы довольно быстрее чем один комп. Но по эффективности нагрузки, они проигрывают в 2 раза обычному компу.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я читал недавно статью, там полностью на гпу физику обсчитывали, а это не только 2+2

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Думаю такие штуки надо детектить и будить ноду. Например через Wake-On-LAN.

А если подзадачу на 2 ноды отправить сразу, чтоб если одна вылетела, то 2я смогла выполнить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если подзадачу на 2 ноды отправить сразу, чтоб если одна вылетела, то 2я смогла выполнить

это уже какое-то резервное разделение вычислительных центров

пригодится для расчета каких-нибудь траекторий ядреных ракет и тнт пушек :D

но в данном случае логичнее перед распределением задач получать список нод и после этого уже раскидывать, чем использовать в 2 раза больше пк без повышения производительности

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это если подзадача конкретно влияет но скорость вычислений

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...

 

Давай для начала определим, что такое сложная задача.

При решении любой сложной задачи, первое, что делает человек - это разбивает её на множество простых задач. В этом практически основа программирования.

Любой серьезный алгоритм нахождения чего-нибудь нужного в итоге сведётся к тому, что компьютер будет делать 1+1, или 0+1, или 0+0.

 

Теперь по поводу задачи.

В рамках этой темы, мы не собираемся решать никаких задач, за исключением задачи организации распределённых вычислений.

Твоя задача интересна, и ты можешь создать математический топик, где все неравнодушные к математике могут попробовать её решить. Но здесь это оффтоп.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, то есть? На видеокартах считают кучу различных сложных систем, от физики до нейросетей. И эти задачи получают некий профит от многопоточности. Мы тут не пытаемся нацепить некую задачу на неё, и показать что это плохо. Всё равно, что сказать про неэффективность ракет для перемещения в пределах одной планеты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

За примером далеко ходить не буду, тот же реактор: один комп смотрит за реакторами , второй отрабатывает результаты , чтобы роботу было проще ходить и можно продолжить до бесконнчности

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@ivan52945, тут как я понимаю речь идет несколько о другой многозадачности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здесь просто многозадачность.

В принципе, можно использовать и так как @ivan52945 описал. Если наладить нормальное взаимодействие с подзадачами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

Здесь просто многозадачность.

В принципе, можно использовать и так как @ivan52945 описал. Если наладить нормальное взаимодействие с подзадачами.

Кхм, так это немного не то, о чем мы изначально говорили. Тут у компов разные задачи, а мы вроде как о распараллеливании одной задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кхм, так это немного не то, о чем мы изначально говорили. Тут у компов разные задачи, а мы вроде как о распараллеливании одной задачи.

 

А какая принципиальная разница?

 

Я же уже ответил Квертику - мы не будем решать конкретных задач. Мы напишем либу, которая позволит организовать параллельное вычисление.

Мультипоточность.

 

Кто сказал, что потоки обязаны обрабатывать похожие задачи?  :lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Кто сказал, что потоки обязаны обрабатывать похожие задачи? 

Например, в доме у Васи стоит комп который отображает MineOS, а у Гендальфа тоже в доме комп и грузит он всеми любимую Redcontrol

А у Фродо есть комп который грузит OpenOS.

 

Что ж это выходит? Все эти компы являются частью мультипоточной системы??? Хотя они и не соединены между собой никак. По вашей логике это так?

Ведь при аналогичном примере:

 

 

За примером далеко ходить не буду, тот же реактор: один комп смотрит за реакторами , второй отрабатывает результаты , чтобы роботу было проще ходить и можно продолжить до бесконнчности

Компы просто работают и просто сообщаются между собой. Где тут вы многопоточность увидели?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну да. Просто кучка компьютеров, которые работают сами по себе, и решают каждый свою задачу.

Ты раскусил нашу идею. (Ещё можно было внимательно прочесть первые посты.)

 

Идея состоит в том, чтобы написать библиотеку-менеджер для кластера из компьютеров,

соединённых вместе и готовых выполнять задачи.

 

Использовать эту штуку можно будет по разному.

- вычислять что-то параллельно, разбив задачу на части,

- запустить несколько разных задач одновременно,

- запилить публичный сервис, который предоставляет вычислительные ресурсы всем желающим, балансируя полученные задачи

и нагрузку по кластеру

 

Зачем стягивать себя рамками определений?  :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прочитал все посты внимательно

 

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

 

Так же не забывайте, что если задача выполняется за t, то задача разделенная на 2 потока не будет выполняться за t/2. Максимальный коэффициент прироста производительности будет в районе 0,8-1,7, в зависимости от эффективности распараллеливания. 0,8 - это замедление, да, такое тоже есть

Использовать многопоточность для вычислений в майне бесполезно. Сервер запущен на 4 ядерном хосте, для мода выделяется 1 поток. Увеличивая дальнейшее количество потоков не увеличит скорости, но увеличит задержку.

 

С другой стороны распределять задачи между компами - идея хорошая. Но над этим нужно так же думать, чтобы максимально эффективно использовать ивентную базу openos

 

PS:

Говорю на основе опыта использования POSIX, CUDA, на языке Си в системах Linux/Unix/Windows

  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

...
 

Вот сразу видно - толковый программист пришел и пояснил по теме =) 1ridav, если будут какие-либо решения по распараллеливанию задачи, то напиши пожалуйста, будем очень благодарны. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...

 

Я полностью с тобой согласен.

Только надо учесть ещё один момент. Компьютер в ОС не даёт использовать в полную мощь даже те фейковые "немногопоточные" потоки, которые он выделяет.

Ведь там есть ещё одно искусственное ограничение - на количество команд / тик для одного процессора.

 

Если же распределить задачу на два процессора, мы уменьшим этот кап вдвое.  :)

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я полностью с тобой согласен.

Только надо учесть ещё один момент. Компьютер в ОС не даёт использовать в полную мощь даже те фейковые "немногопоточные" потоки, которые он выделяет.

Ведь там есть ещё одно искусственное ограничение - на количество команд / тик для одного процессора.

 

Если же распределить задачу на два процессора, мы уменьшим этот кап вдвое.  :)

Но есть ограничения по распараллеливанию. После определённого количества компов, они начнут выжирать все соки из сервера и будут только замедлять его работу. Или работу самих прог.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 После определённого количества компов, они начнут выжирать все соки из сервера и будут только замедлять его работу.

 

Эта фраза абсолютно истинна, причём не только в рамках этой темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть еще проблема с самим назначением задачи, например: сервер послал задачу, ноды ее выполняют и тут... сервер отваливается, задача решается, но результата не будет.

Эта проблема очень замедляет развитие модов на основе дебаг-карты, ибо если что-то отвалилось, то надо ждать админа, когда он придет и включит, а потом админ выкидывает все к чертям и ставит какой-нибудь кривой плагин... или обещает шиш на постном масле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну по поводу "выжимания соков из сервера" - это равносильно тому что у тебя будет много компов, лагодромом это трудно назвать, что кластер - что прочто куча работающих независимо компов - без разницы)

а сама идея интересная) я питался писать либу для подобного, но наткнулся на то, что между компами передавать инфу быстро не получится, как в ФС так и в сети есть задержки, но вот использовать их для совместного вывода на моник - это круто) уже проводил тесты)

Изменено пользователем ALeXeR

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×