Визуализация научных данных » Обсуждения


Bookmark and Share




Визуализация результатов параллельных расчётов

авг 12, 2009 | 17:08

Хочу немного поделиться опытом и, возможно, узнать что-то новое.

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

Из этой ситуации я нашёл два выхода. Первый - это прямо в процессе расчёта сохранять только некие интегральные характеристики (которые обычно и представляют интерес) - скажем, концентрацию вместо функции распределения. При чём для большей гибкости сохраняются только бинарные данные - графики строятся потом отдельной программой. Однако, у этого метода есть большой минус - необходимо заранее знать, какие данные тебе понадобятся, иначе весь расчёт придётся повторить. К тому же таким образом удаётся строить только двумерные графики, для трёхмерных обычно оказываются нужны просто огромные - в терабайты - объёмы дискового пространства для хранения промежуточных данных.

Другой выход работает в том случае, если не нужны интегральные характеристики по данным, расположенным во время счёта на разных компьютерах (такой характеристикой можт, например, быть распределение по энергиям частиц, если информация о разных частицах хранятся на разных компьютерах). Если же данные, необходимые для построения изображения локальны, то можно прямо во время расчёта на данном компьютере рисовать участок изображения, данные о котором имеются в распоряжении, а после окончания расчёта картинки от отдельных компьютеров сливать в один файл - специально для этого я написал программу, накладывающую два png-изображения с учётом прозрачности.


Комментарии  

Вам необходимо зайти или зарегистрироваться для комментирования
> что исключает возможность их обработки одним процессором Ну не исключает, а затрудняет > а после окончания расчёта картинки от отдельных компьютеров сливать в один файл - специально для этого я написал программу, накладывающую два png-изображения с учётом прозрачности Это можно делать, если характеристики с разных компьютеров просто аддитивны. Может же быть, что их и некорректно просто сложить.
2009-08-18 07:40:48 · Ответить · · Ссылка
>Ну не исключает, а затрудняет Фактически, всё-таки, исключает. Необходимо обрабатывать одним процессором объём данных в 500 ГБ. Это возможно только с участием HDD как временного хранилища информации, но это, во-первых, медленно - я буду всё время тратить на построение картинок, а не на расчёт, а во-вторых, HDD тоже не беспределен, т.е. нельзя, например, сохранять данные, а после завершения расчёта их обрабатывать - в этом случае необходимо сделать порядка сотни таких сохранений (чтобы получить эволюцию системы во времени, например), а для этого потребуется 50 ТБ HDD - совершенно немыслимые цифры для кластеров, где выделяется максимум 10 ТБ. >Это можно делать, если характеристики с разных компьютеров просто аддитивны. Может же быть, что их и некорректно просто сложить. Да, собственно я уже об этом сказал в своём посте: "Другой выход работает в том случае, если не нужны интегральные характеристики по данным, расположенным во время счёта на разных компьютерах" Только в случае, если вам необходимо проинтегрировать данные с разных узлов, картинка будет неаддитивной.
2009-08-18 10:48:30 · Ответить · · Ссылка
Можно использовать встроенные возможности MathGL (http://mathgl.sourceforge.net/doc_en/Parallelization.html#Parallelization) по построению части картинок на каждой ноде и последующего их объединения на центральной ноде. На центральной ноде фактически обрабатывается только «расширенный растр» (расходы памяти пропорциональны числу пикселей в выходном изображении).
2014-05-21 16:14:10 · Ответить · · Ссылка