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