Подсознание →
Распределенные вычисления на javascript
На днях открыл для себя Life with Playstation, но суть не в нем, а в фоновом процессе Folding@home. Проект распределённых вычислений для проведения компьютерной симуляции свёртывания молекул белка. Пока мы читаем новости, смотрим погоду наша PS3 производит вычисления для Folding@home.
И тут мне пришла идея, а почему бы не производить вычисления в браузере, пока пользователь работает на нашем сайте, ведь загрузка процесора при просмотре сайта минимальна.
Долго не мог придумать, что же такое можно вычислять распределенно, дабы материализировать идею… Рендерить 3D сцену — не оправдано для теста и затратно по передаваемым данным. Вспомнилась простая лабораторная работа из студентческих годов по КМФП — визуализация потенциала поля с несколькими зарядами. Предельно просто, можно вычислять распределенно.
Имеем 5 положательных и 5 отрицательных зяряда, случайно разбросанных в кубе 5.12 на 5.12 на 5.12 метра. Нужно вычислить потенциал поля в каждом сантиметре куба. Все просто — для каждого сантиметра пробегаемся по всем зарядам и суммируем потенциал для этого сантиметра.
Мы имеем 512 слоев по 512х512 клеток. Для вычисления одного слоя у меня ушло 6 секунд. На все поле уйдет около часа.
Пусть нам нужная такая точность вычислений, что в результате каждый сантиметр будет по 4 байта данных, то весь куб будет занимать 512Мб.
Визуализация 300-го слоя
Клиент загружает скрипт, содержащий модуль вычисления(модель) и модуль I/O, тот в свою очередь запрашивает состояние модели и задание от сервера.
Состояние модели: координаты всех точек и заряды, объем пространства для вычисления. Задание: интервал для вычисления, например с 512 по 1024 клетку (один ряд слоя).
Клиент вычисляет по 512 клеток и отправляет эти данные серверу (2Кб данных). В ответ ему приходит новое задание на вычисление. И так далее.
Для контроля должен существовать сервер выдающий задания для клиентов и принимающий результаты вычислений. Сервер имеет очередь заданий на вычисление. Каждое задание имеет таймаут, по истечении которого оно возвращается в очередь. Сервер сохраняет данные в хранилище (файл).
Всего будет 262144 заданий по 512 клеток — 262144 блоков данных по 2Кб.
И тут мне пришла идея, а почему бы не производить вычисления в браузере, пока пользователь работает на нашем сайте, ведь загрузка процесора при просмотре сайта минимальна.
Долго не мог придумать, что же такое можно вычислять распределенно, дабы материализировать идею… Рендерить 3D сцену — не оправдано для теста и затратно по передаваемым данным. Вспомнилась простая лабораторная работа из студентческих годов по КМФП — визуализация потенциала поля с несколькими зарядами. Предельно просто, можно вычислять распределенно.
Пример для вычисления
Имеем 5 положательных и 5 отрицательных зяряда, случайно разбросанных в кубе 5.12 на 5.12 на 5.12 метра. Нужно вычислить потенциал поля в каждом сантиметре куба. Все просто — для каждого сантиметра пробегаемся по всем зарядам и суммируем потенциал для этого сантиметра.
Мы имеем 512 слоев по 512х512 клеток. Для вычисления одного слоя у меня ушло 6 секунд. На все поле уйдет около часа.
Размер полученных данных
Пусть нам нужная такая точность вычислений, что в результате каждый сантиметр будет по 4 байта данных, то весь куб будет занимать 512Мб.
Визуализация 300-го слоя
Как это может работать
Клиент загружает скрипт, содержащий модуль вычисления(модель) и модуль I/O, тот в свою очередь запрашивает состояние модели и задание от сервера.
Состояние модели: координаты всех точек и заряды, объем пространства для вычисления. Задание: интервал для вычисления, например с 512 по 1024 клетку (один ряд слоя).
Клиент вычисляет по 512 клеток и отправляет эти данные серверу (2Кб данных). В ответ ему приходит новое задание на вычисление. И так далее.
Для контроля должен существовать сервер выдающий задания для клиентов и принимающий результаты вычислений. Сервер имеет очередь заданий на вычисление. Каждое задание имеет таймаут, по истечении которого оно возвращается в очередь. Сервер сохраняет данные в хранилище (файл).
Всего будет 262144 заданий по 512 клеток — 262144 блоков данных по 2Кб.
12.03.2010 14:00+0300