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

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

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

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

 

А хрен его знает. Надо придумать.

Можно читать что-то с интернета в несколько потоков. Можно просчитывать буфферы для 3D графики. Можно мониторить табуны дронов.

 

Что касается BOINC - лучше подключи свой домашний комп. Нет смысла отдавать процессорные ресурсы нашего серва, да ещё таким хитровывернутым способом.

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


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

Божечки кошечки. Да это же попытка #1000001 по созданию ОС для OpenComputers.
 

  1. Можете провести для меня эксперимент: "На сколько медленее работают N процессов на нескольких OC компах, чем на одном?"
    Просто у меня такое ощущение, что все компы в opencomputers исполняются в одном процессе
  2. Если вдруг будете пилить не забудьте сделать shared memory и system signals (SIGKILL, SIGINT, SIGSEGV и тп)
  3. КОД:
    supercomputer = require('supercomputer')
    Process = supercomputer.Process
    Pool = supercomputer.Pool
    Manager = supercomputer.Manager
    
    function handle(arg1, arg2, argN):
        variable = Process.share("variable", {1, 2, 3})
        sleep(5)
        lock = variable.get_lock()
        lock.close()
        variable.value = {1, 2, 8, 9}
        variable.value[3] = 12
        lock.open()
        sleep(3)
        lock = variable.get_lock()
        lock.close()
        variable.value[1] = 10
        variable.value[2] = 3
        lock.open()
        sleep(100)
        print(variable.value)
    end
    
    function mapper(datum)
        print(datum)
        return datum * 2
    end
    
    function main()
        manager = Manager()
    
        process = Process("process_1", handle, arg1, arg2, argN)
        process.start()
    
        variable = manager.get_shared(process, "variable")
        for i = 1, 10, 1
            print(i, variable.value)
            sleep(1)
    
        lock = variable.get_lock()
        lock.close()
        pool = Pool(10)
        variable.value = pool.map(variable.value, mapper, arg1, arg2, argN)
        lock.open()
        process.join()
    end
    
    main()
    
  4. ВЫВОД:
    1    1, 2, 3
    2    1, 2, 3
    3    1, 2, 3
    4    1, 2, 3
    5    1, 2, 3
    6    1, 2, 3
    7    1, 2, 12, 9
    8    1, 2, 12, 9
    9    10, 3, 12, 9
    10   10, 3, 12, 9
    3
    9
    10
    12
    20, 6, 24, 18

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


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

@@Totoro, фракталы рисовать. Генетику Forestry, думаю, тоже можно прицепить, пусть я даже не знаю, как она работает :P 

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


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

Божечки кошечки. Да это же попытка #1000001 по созданию ОС для OpenComputers.

 

WUT? Какая ОС, Серёга, ты о чём?

 

  1. Можете провести для меня эксперимент: "На сколько медленее работают N процессов на нескольких OC компах, чем на одном?"

    Просто у меня такое ощущение, что все компы в opencomputers исполняются в одном процессе

 

Официальная дока говорит, что не в одном, а в нескольких.

OpenComputers uses a fixed number of low-priority threads for coroutines to cause as little delay on the server tick as possible

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


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

@@Totoro, фракталы рисовать. Генетику Forestry, думаю, тоже можно прицепить, пусть я даже не знаю, как она работает :P 

Что?

Генетика Forestry основана на законе Менделя и своём внутриигровом шансе мутации. Там то по сути ничего просчитывать и не нужно. Можно просто на монитор допустим выдать характеристики с шансами их появления и отображать риски мутации. Но это может один комп запросто делать. Тут абсолютно не нужна многопоточность. Это элементарная задача.

Про Фракталы тебе уже ответил Лёха:

 

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

Как видишь, многопоточность придумана для детских вычислений по типу 2x2. А всякие сложные задачи на нахождения простых чисел, Фракталов и прочего им не под силам.   ;)

В этой теме тебе не дадут ответа, как решить сложную задачу. Можешь и не задать тут таких вопросов.

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

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


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

Потоки внутри потоков, которые находятся внутри потоков... Ой, борщииии...

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


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

Вчера делали наброски в Кобре, но кто-то увел исходники. @ivan52945 сделал нам бекап (http://pastebin.com/8HLqrPNa) за что ему спасибо  :)

 

Чтобы придать этому делу основательности, я зафигачил репозиторий на Github:

https://github.com/cc-ru/cluster

 

Там набросок ридмишки, лицензия и файлик с инструкциями для тех, кто захочет присоединиться (contributing).

Говорите ваши акки на Github, всех подключу.

Отдельные фичи пилим в отдельных ветках, чтобы не ломать ветку master, которая долна оставаться рабочей.

 

 

 

Как видишь, многопоточность придумана для детских вычислений по типу 2x2.

 

Я вот хз что ты пытаешься доказать. Что многопоточность в принципе ненужная штука? Тебя не смущает, что операционная система

в которой ты работаешь, сейчас поддерживает десятки активных потоков, которые обеспечивают тебе комфортную работу?

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


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze
Нет смысла отдавать процессорные ресурсы нашего серва, да ещё таким хитровывернутым способом.

 

Как так нет смысла?!!1 А как же инопланетян искать??7?

Хотя... У сервера не так много мощности...)

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

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


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

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

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

 

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

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

(в контексте именно многопоточности в ОС, а не многопоточности в целом)

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

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


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

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

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


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

А если задача накроет ноду? :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.

 

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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


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