Pull to refresh

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

Reading time 2 min
Views 1.7K
На днях открыл для себя 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
Tags:
Hubs:
Total votes 29: ↑26 and ↓3 +23
Comments 10
Comments Comments 10

Articles