Как стать автором
Обновить

Распределенные вычисления на javascript

Время на прочтение2 мин
Количество просмотров1.8K
На днях открыл для себя Life with Playstation, но суть не в нем, а в фоновом процессе Folding@home. Проект распределённых вычислений для проведения компьютерной симуляции свёртывания молекул белка. Пока мы читаем новости, смотрим погоду наша PS3 производит вычисления для Folding@home.

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

Долго не мог придумать, что же такое можно вычислять распределенно, дабы материализировать идею… Рендерить 3D сцену — не оправдано для теста и затратно по передаваемым данным. Вспомнилась простая лабораторная работа из студентческих годов по КМФП — визуализация потенциала поля с несколькими зарядами. Предельно просто, можно вычислять распределенно.


Пример для вычисления


Имеем 5 положательных и 5 отрицательных зяряда, случайно разбросанных в кубе 5.12 на 5.12 на 5.12 метра. Нужно вычислить потенциал поля в каждом сантиметре куба. Все просто — для каждого сантиметра пробегаемся по всем зарядам и суммируем потенциал для этого сантиметра.

Мы имеем 512 слоев по 512х512 клеток. Для вычисления одного слоя у меня ушло 6 секунд. На все поле уйдет около часа.

Размер полученных данных

Пусть нам нужная такая точность вычислений, что в результате каждый сантиметр будет по 4 байта данных, то весь куб будет занимать 512Мб.

Визуализация 300-го слоя

image

Как это может работать


Клиент загружает скрипт, содержащий модуль вычисления(модель) и модуль I/O, тот в свою очередь запрашивает состояние модели и задание от сервера.
Состояние модели: координаты всех точек и заряды, объем пространства для вычисления. Задание: интервал для вычисления, например с 512 по 1024 клетку (один ряд слоя).
Клиент вычисляет по 512 клеток и отправляет эти данные серверу (2Кб данных). В ответ ему приходит новое задание на вычисление. И так далее.

Для контроля должен существовать сервер выдающий задания для клиентов и принимающий результаты вычислений. Сервер имеет очередь заданий на вычисление. Каждое задание имеет таймаут, по истечении которого оно возвращается в очередь. Сервер сохраняет данные в хранилище (файл).
Всего будет 262144 заданий по 512 клеток — 262144 блоков данных по 2Кб.

image
Теги:
Хабы:
Всего голосов 29: ↑26 и ↓3+23
Комментарии10

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн