Перейти к содержимому
MeXaN1cK

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

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

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

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

P.S Большая просьба - не флудить не по делу и не писать сообщения типа "связать через модемы и заставить считать". Предлагайте готовые участки кода, если таковые имеются.Будем очень благодарны. Если есть желания присоединиться к команде разработки - заходите в IRC, там и скооперируемся.

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


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

Я как соавтор идеи поддерживаю её и может даже поучаствую в разработке.  :)

 

Основная идея пока такова:

Делаем всё просто. Как с Zn. Реализуем небольшую либу для распределённых вычислений. Этакий Supercomputer API.

 

Его задача будет

- собрать компьютеры-ноды в один кластер

- получать от юзера фрагменты задачи (самое простое в виде строки-кода)

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

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

- мерджить результат (по алгоритму предоставленному юзером) либо организовывать общение с нодами кластера в реальном времени

 

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

Наша задача - придумать максимально простую и удобную в использовании библиотеку под это дело.

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

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


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

Что вы там собрались делать? Для каких целей вам многопоточность понадобилась?

 

У меня кстати есть рабочая идея, как ускорить отображение изображений. Например нам нужно одновременно, чтобы несколько игроков бегали по экрану и чтобы экран не тормозил при отображении. Решение - подключить к одному монитору с клавой несколько компов, распределить задачи для каждого компа. Один отображает первого игрока, второй комп второго, третий третьего. В итоге скорость прорисовки заметно возрастёт. Так как каждый комп подключён к одному монитору и способен спокойно с ним работать, позволяя монитору работать выше своих возможностей.

Можно так мультиплеерные игры спокойно делать. Как в старых играх делить экран на 2 или 4 части и каждую часть использовать под экран для одного игрока.

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


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

Что вы там собрались делать? Для каких целей вам многопоточность понадобилась?

 

У меня кстати есть рабочая идея, как ускорить отображение изображений. Например нам нужно одновременно, чтобы несколько игроков бегали по экрану и чтобы экран не тормозил при отображении. Решение - подключить к одному монитору с клавой несколько компов, распределить задачи для каждого компа. Один отображает первого игрока, второй комп второго, третий третьего. В итоге скорость прорисовки заметно возрастёт. Так как каждый комп подключён к одному монитору и способен спокойно с ним работать, позволяя монитору работать выше своих возможностей.

Можно так мультиплеерные игры спокойно делать. Как в старых играх делить экран на 2 или 4 части и каждую часть использовать под экран для одного игрока.

1)Просили же не флудить

2)Зачем это надо?

  а)интересно

  б)почему бы  и нет

  в)ещё не известно, что может пригодиться в будущем

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

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


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

Ну это не флуд, а дельная идея.

Я вот предлагал Лёхе попробовать рендер 3D графики распределить через кластер.

 

Но в любом случае, сначала надо спроектировать библиотеку.

 

 

2)Зачем это надо?

 

Для прикола. Это крутая идея, и будет прикольно её увидеть работающей.

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

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


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

Идея как это запилить:

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

function sum(a, b)
return a + b
end

function sub(a, b)
return a - b
end

sumres = sum(value1, value2) --функция не считается, но припопытке получить значение,
subres = sub(sumres, value3) --происходит вычисление, со всеми переменными, которые функции требуют

value1 = 1
value2 = 2
value3 = 0.1 

print(subres) -- 2.9

P. S. Чисто концепт

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

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


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

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

Мы - чисто исполнители.

 

Юзер сам думает, как ему разделить задачу.

Например юзеру надо перемножить числа от 1 до 400. (Это не слишком сложная задача, но для примера сойдёт.)

Он может юзать нашу либу так (псевдокод):

-- подключаем либы
local event = require('event')
local cluster = require('supercomputer')

-- инициализируем кластер
cluster.init()

-- тут генерим строки-программки, для нашей задачи
function step(x)
  return "local n = " .. tostring(x) .. "; for i = n, n+100 do n = n * i end; return n"
end

-- задаём кластеру несколько параллельных задач
cluster.setup("process1", step(1))
cluster.setup("process2", step(101))
cluster.setup("process3", step(201))
cluster.setup("process4", step(301))

-- запускаем на выполнение
cluster.run()

-- сюда будем складывать результаты
local result = 1

while true do
  -- слушаем эвенты от кластера
  local name, address, action, x = event.pull('cluster')

  if name == 'cluster' then
    -- если получили очередное вычисленное значение - добавляем к результату
    if action == 'result' then
      result = result * x
    -- если все "процессы" закончили работу - сворачиваемся
    else if action = 'done' then
      break
    end
  end
end

-- сбрасываем все задачи кластера, или "гасим" его или ещё что-то
cluster.reset()

-- выводим результат
print("Произведение чисел от 1 до 400 = " + result)

Тут мы раздали задачи кластеру, запустили, собрали ответы и получили результат. Вычисление заняло в 4 раза меньше времени (потенциально), чем если бы мы считали на одном процессоре.

Разумеется для мелких задач результат будет почти не заметен. Но на достаточно сложных вычислениях он должен проявляться сильнее.

 

Здесь программа очень проста. Нет отображениия промежуточных этапов и т.п.

Но идею иллюстрирует.

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


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

Например юзеру надо перемножить числа от 1 до 400. (Это не слишком сложная задача, но для примера сойдёт.)

 

Для такой задачи нужна библиотека-помощник для хранения таких огромных чисел. Будет 869 цифр.

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


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

Для такой задачи нужна библиотека-помощник для хранения таких огромных чисел. Будет 869 цифр.

 

Да, тут надо продумать вопрос с тем, как поднять в кластере нужное окружение.

Можно скрипт для HPM замутить. =) Который будет окружение разворачивать.

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


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

Что-то вы разбираете лёгкие примеры, а как насчёт более сложных алгоритмов, как их разбивать собираетесь?

Например как разбить алгоритм нахождения и заноса в таблицу простых чисел. Без многопоточности алгоритм используя таблицу с первыми простыми числами самозаполняет себя. А вот как разбить подобный алгоритм я вообще не в курсе, это реально?

Или вот пример, нужно рассчитывать и заносить числа Фибоначчи в таблицу. Как этот алгоритм собираетесь разбивать?

 

Для каких целей вообще собираетесь свою многопоточность использовать? Чтобы детские задачи решать???

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


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

Что-то вы разбираете лёгкие примеры, а как насчёт более сложных алгоритмов, как их разбивать собираетесь?

Например как разбить алгоритм нахождения и заноса в таблицу простых чисел. Без многопоточности алгоритм используя таблицу с первыми простыми числами самозаполняет себя. А вот как разбить подобный алгоритм я вообще не в курсе, это реально?

Или вот пример, нужно рассчитывать и заносить числа Фибоначчи в таблицу. Как этот алгоритм собираетесь разбивать?

 

Для каких целей вообще собираетесь свою многопоточность использовать? Чтобы детские задачи решать???

 

Очевидно что нереально разбить на потоки алгоритм, который разбить на потоки нереально.

Но это проблема юзера. Я не говорю, что либа будет панацеей.

 

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

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


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

Что-то вы разбираете лёгкие примеры, а как насчёт более сложных алгоритмов, как их разбивать собираетесь?

Например как разбить алгоритм нахождения и заноса в таблицу простых чисел. Без многопоточности алгоритм используя таблицу с первыми простыми числами самозаполняет себя. А вот как разбить подобный алгоритм я вообще не в курсе, это реально?

Или вот пример, нужно рассчитывать и заносить числа Фибоначчи в таблицу. Как этот алгоритм собираетесь разбивать?

 

Для каких целей вообще собираетесь свою многопоточность использовать? Чтобы детские задачи решать???

 

Распараллелить можно все почти, если руки прямые.

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


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

Распараллелить можно все почти, если руки прямые.

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

И я всё ровно не понял, какая область применений у вашего распараллеливания. Он то по сути в майне то и не нужен. Может быть он поможет турели быстрее реагировать на цель? Или свинокоптеру летать быстрее (хотя стоит похоронить уже этот свинокоптер с приходом новой версии майна)

А может распараллеливание позволит роботу сканировать руды быстрее? Хм, вроде бы нет. Тогда зачем оно в майне?

 

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

 

Сейчас по сути события в библиотеки event отлично справляются с частью задачей, которые вы собираетесь сделать. А именно они позволяют обрабатывать псевдоодновременно несколько задач.

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

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

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


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

 

Хватит флудить не по делу, многопоточность это просто развлечение, как и сам майн

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


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

Ребят , я так понимаю вы хотите делить задачу на куски а потом обратно собирать для увеличения скорости обработки? 

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

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


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

Ребят , я так понимаю вы хотите делить задачу на куски а потом обратно собирать для увеличения скорости обработки? 

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

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


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

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

 

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

 

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

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


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

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

Нерациональное использование ресурсов серверов в большинстве случаев как раз и получится, OpenComputers не создавался для масштабных вычислений. Для вычислений гораздо эффективнее использовать внешние для Майнкрафта сервера.

 

Польза от такой библиотеки проявится не столько в вычислениях, сколько при обращениях ко всякого рода медленной периферии вроде отладочной платы.Но для этого есть средства попроще.

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

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


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

Хм. Для каких конкретно вычислений можно будет задействовать данную... ээ... вещь? Возможно ли прикрутить эту опенкомпьютерную систему к реальной, типа BOINC?

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...