Современные алгоритмы высокопроизводительной

реклама
Современные алгоритмы
высокопроизводительной
визуализации научных данных
Березин С.Б.
ВМК МГУ
В презентации использованы материалы доклада
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
Скачать