Современные алгоритмы высокопроизводительной визуализации научных данных Березин С.Б. ВМК МГУ В презентации использованы материалы доклада Parallel Data Visualization Challenges (Dr. Jean M. Favre) www.onera.fr/jso/jso2009-newcfd/presentations/Favre.pdf О сложности задачи • 32000 процессоров • 12500x12500x12500 точек • Динамический процесс! http://www.lbl.gov/cs/Archive/news061109.html Требования к визуализациям Цель визуализации – позволить исследователю проникнуть в суть данных (insight into data) Интерактивность Работа с громадными наборами данных Отсутствие искажений (HiFi) Изменяющиеся во времени данные High fidelity display Каждая точка может быть важна - необходимо просмотреть весь набор данных Визуальный конвейер Источник данных - должен удовлетворять ряду требований Преобразование данных - важно не потерять особенные точки Отображение данных в 2D/3D пространство Построение изображения - почти все уже придумано... - с применением современных GPU E1S – Line graph E1nS – Line/Marker graph E13S – Scatter Plot / Набор точек E13S – Диаграммы Вороного E2S -Carpet plot / colormap E2S – Contour plot E2V2 – Vector glyphs + colormap E2V2 – Stream lines / Линии тока E2V2 – Line integral convolution Imaging Vector Fields Using Line Integral Convolution Brian Cabral, Leith (Casey) Leedom, SIGGRAPH '93 E2S – Surface view E3S – Изоповерхности Метод “марширующих кубов” E3S – Volume rendering E34S – Point cloud E34S – Ячейки Вороного E3T3,3 – Glyph plot E3V3 – Hedgehog (Glyph plot) E3V3 – Streamlines / Streamribbons E3T3,3 – Hyper streamlines Примеры композитных визуализаций Последовательный доступ к данных Рисование графика функции (line plot) BeginPolyline() while(not eof) { x = read float y = read float AddPoint(x,y) } EndPolyline() Последовательный доступ к данным Рисование цветовой карты (colormap) for(y = 0;y < h;y++) for(x = 0;x < w;x++) { v = read float PutPixel(x,y,Palette(v)) } Палитра: отображение значения в цвет Функции Palette нужны max и min Функция Palette вызывается уже для первого пиксела Выводы: Перед рисованием карты цветов нужно найти max/min • Просмотреть весь набор данных последовательно или • Взять max/min из метаданных или • Определить max/min из типа величины (метаданные) Метаданные: атрибуты набора данных Набор пар <имя, значение> (словарь) climatological_bounds = clim_bounds missing_value = -999 name = “wet_day_frequency” units = “days” long_name = “Wet day frequency” cell_methods = “latitude: point longitude: point time: mean within years time: mean over years” Построчный доступ Рисование изолиний: row0 = read row for(y = 1;y < h;y++) { row1 = read row for(x = 0;x < w;x++) { drawcell(row0,row1,x,y) } row0 = row1 } r0 r1 r0 r1 Послойный доступ s0 s1 Рисование изоповерхности: y = 0 s0 = read slice y for(y = 1; y < h; y++) { s1 = read slice y for(x = 0; x < w; x++) for(z = 0; z < d; z++) drawcell(s0,s1,x,y,z) s0 = s1 } y x z s0 s1 s0 s1 Здесь завершается возможность стриминга Прозрачность: вывод данных back-to-front А y B x z B,A X=0,1,2,…,N-1 А B X=N-1,N-2,…,0 А,B Depth peeling все же разрешает вывод в произвольном порядке Произвольный доступ Рендеринг объемных данных: for(px=0;px<w;px++) for(py=0;py<h;py++) { foreach(v in Ray(x,y)) { t = Transparency(v) c = Palette(v) sum += sum*(1-t)+c*t; } PutPixel(px,py,sum) } y x z Произвольный доступ Произвольный доступ Визуализация на сечениях: y x z Hyberslabbing Требования к источникам данных Поддержка работы с метаданными Эффективные операции чтения по частям и hyperslabbing Array read(int[] origin, int[] stride, int[] shape) read({3,3},{2,2},{3,3}) -> double[3,3] Эффективные операции записи с возможным увеличением размера массива NetCDF: http://www.unidata.ucar.edu/software/netcdf/ HDF: http://www.hdfgroup.org/ Методы повышения интерактивности Уменьшение детализации сцены на время активного взаимодействия с пользователем Создание высокодетализированного изображения в фоновом потоке N=128 Plot 64x64x64 Запуск второго потока Ожидаем действий пользователя Остановка второго потока Plot NxNxN Рисуем изображение N=N * 2 N<M Методы увеличения производительности Фильтрация данных, чтение и отображение только части точек (количество точек > количества пикселей) • Можно потерять часть интересных значений! Применение параллельных вычислений • Графические процессоры параллельны по своей природе • Разделение задачи визуализации между вычислительными узлами • Sort first: выделяет каждому вычислителю свою часть экрана -> разбиение данных • Sort last: выделяем каждому узлу свою часть данных -> объединение изображений Sort first Разбиение экранной плоскости определяет разбиение данных • Идеален для 2D графики (тайловый подход) • В 2D эффективно распараллеливается • В 3D возможно пересечение наборов данных на узлах • В 3D распределение данных по узлам зависит от положения наблюдателя (view frustum) Sort last Распределение данных по узлам первично Каждый узел строит изображение своей части данных • Нет проблем с непрозрачными объектами • Требуются нетривиальные алгоритмы для прозрачности • Возможны проблемы “сшивки данных” • В некоторых случаях все равно требуется перераспределение данных по узлам Методы повышения интерактивности Уменьшение детализации сцены на время активного взаимодействия с пользователем Создание высокодетализированного изображения в фоновом потоке N=128 Plot 64x64x64 Запуск второго потока Ожидаем действий пользователя Остановка второго потока Plot NxNxN Рисуем изображение N=N * 2 N<M Очень неудачный пример записи данных FILE *out = fopen(“grid.txt”,”w”); for(int j=0;j<H;j++) { for(int i=0;i<W;i++) { fprintf(out,”%lf ”,data[i,j]); } fprintf(out,”\n”); } fclose(out); Иерархические источники данных Карты Virtual Earth, Google Maps Mipmapping в OpenGL/DirectX Произвольные источники данных Размер увеличивается меньше, чем на 50%: 1 + ¼ +1/8 + 1/16 + …. Блочные (сhunked) массивы Линейное представление массивов 1 3 3 7 1 3 4 3 7 5 4 3 2 1 3 3 7 4 3 1 3 4 3 7 5 4 3 2 Блочное представление массивов 1 3 4 3 7 5 4 3 2 Зависимость скорости доступа от размера блока Материалы по теме Учебный курс по визуализации (со слайдами): http://www.hpc2n.umu.se/events/ngssc/00/visualization/syllabus3.html Dr. Jean M. Favre. Parallel Data Visualization Challenges www.onera.fr/jso/jso2009-newcfd/presentations/Favre.pdf ParaView software http://www.paraview.org/ Scientific Data Management in the Coming Decade http://research.microsoft.com/pubs/64537/tr-2005-10.pdf s_berezin@cs.msu.su NetCDF 3