Russian Qt Forum
Ноябрь 23, 2024, 14:59
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Параллельные геометрические вычисления на GPU
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Параллельные геометрические вычисления на GPU (Прочитано 5119 раз)
0...-5
Гость
Параллельные геометрические вычисления на GPU
«
:
Сентябрь 03, 2012, 20:05 »
Очень нужна помощь!
Условия задачи таковы: имеется поверхность, заданная множеством треугольников. Есть алгоритм перемещения объекта вдоль этой поверхности, основанный на определении направления, при котором расстояние до поверхности максимально. Таким образом, задача поиска траектории сводится к огромному количеству вычислений точки пересечения луча и треугольника. Можно ли повысить производительность вычислений, если их перенести с CPU на GPU? Никогда не занимался подобными вещами, подскажите в какую сторону думать?
День гугленья не внес существенной ясности. Есть несколько архитектур (CUDA, OpenCL и проч), но какая из них предпочтительней в моем случае я так и не понял. Приоритетом для меня является простота интеграции в QtCreator.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Параллельные геометрические вычисления на GPU
«
Ответ #1 :
Сентябрь 03, 2012, 21:06 »
Цитата: 0...-5 от Сентябрь 03, 2012, 20:05
Условия задачи таковы: имеется поверхность, заданная множеством треугольников. Есть алгоритм перемещения объекта вдоль этой поверхности, основанный на определении направления, при котором расстояние до поверхности максимально. Таким образом, задача поиска траектории сводится к огромному количеству вычислений точки пересечения луча и треугольника.
Может "один объект ползает по поверхности другого" (не пересекая его)? Не видно смысла в "расстояние до поверхности максимально" - ведь объект может удаляться от поверхности неограниченно далеко. Также уточните
- поверхность связная или может состоять из неск кусков
- объект конвексный (выпуклый) или нет
- каковы требования к непересекаемости/контакту
- какой путь нужно получить
- причем тут лучи
Записан
0...-5
Гость
Re: Параллельные геометрические вычисления на GPU
«
Ответ #2 :
Сентябрь 03, 2012, 21:19 »
Цитата: Igors от Сентябрь 03, 2012, 21:06
Цитата: 0...-5 от Сентябрь 03, 2012, 20:05
Условия задачи таковы: имеется поверхность, заданная множеством треугольников. Есть алгоритм перемещения объекта вдоль этой поверхности, основанный на определении направления, при котором расстояние до поверхности максимально. Таким образом, задача поиска траектории сводится к огромному количеству вычислений точки пересечения луча и треугольника.
Может "один объект ползает по поверхности другого" (не пересекая его)? Не видно смысла в "расстояние до поверхности максимально" - ведь объект может удаляться от поверхности неограниченно далеко. Также уточните
- поверхность связная или может состоять из неск кусков
- объект конвексный (выпуклый) или нет
- каковы требования к непересекаемости/контакту
- какой путь нужно получить
- причем тут лучи
ммм...не знаю как это может помочь, но...
Моделируется прохождение рыбой рыбопропускного сооружения. При этом рыба ориентируется на заданное поле скоростей (структурированная сетка) и на стены сооружения, заданные поверхностями. Поверхности образуются списком треугольников. На выбор направления движения влияют скорость жидкости в данной точки и расстояние до поверхности (стенки) вдоль этого направления. Расстояние ищется перебором треугольников, образующих поверхность и проверкой их пересечения вектором направления.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Параллельные геометрические вычисления на GPU
«
Ответ #3 :
Сентябрь 03, 2012, 22:28 »
Цитата: 0...-5 от Сентябрь 03, 2012, 21:19
Моделируется прохождение рыбой рыбопропускного сооружения. При этом рыба ориентируется на заданное поле скоростей (структурированная сетка) и на стены сооружения, заданные поверхностями. Поверхности образуются списком треугольников. На выбор направления движения влияют скорость жидкости в данной точки и расстояние до поверхности (стенки) вдоль этого направления. Расстояние ищется перебором треугольников, образующих поверхность и проверкой их пересечения вектором направления.
Понял так: есть точка, из нее выходит луч. Найти с какими треугольниками он пересечется (возможно в порядке по лучу). Если не так - поправьте. А если так - то это в чистом виде raytracing
Да, если треугольников прилично, то "просто перебор" конечно захлебнется. В общем виде (любые треугольники) надо строить BSP. Но если поверхность специфична, возможны гораздо более простые (и быстрые) решения. Поведайте подробнее что представляет из себя сеть, откуда она берется, как строится.
Записан
0...-5
Гость
Re: Параллельные геометрические вычисления на GPU
«
Ответ #4 :
Сентябрь 04, 2012, 09:00 »
Цитата: Igors от Сентябрь 03, 2012, 22:28
Цитата: 0...-5 от Сентябрь 03, 2012, 21:19
Моделируется прохождение рыбой рыбопропускного сооружения. При этом рыба ориентируется на заданное поле скоростей (структурированная сетка) и на стены сооружения, заданные поверхностями. Поверхности образуются списком треугольников. На выбор направления движения влияют скорость жидкости в данной точки и расстояние до поверхности (стенки) вдоль этого направления. Расстояние ищется перебором треугольников, образующих поверхность и проверкой их пересечения вектором направления.
Понял так: есть точка, из нее выходит луч. Найти с какими треугольниками он пересечется (возможно в порядке по лучу). Если не так - поправьте. А если так - то это в чистом виде raytracing
Да, если треугольников прилично, то "просто перебор" конечно захлебнется. В общем виде (любые треугольники) надо строить BSP. Но если поверхность специфична, возможны гораздо более простые (и быстрые) решения. Поведайте подробнее что представляет из себя сеть, откуда она берется, как строится.
Сетка к геометрии не имеет никакого отношения - она импортируется из сторонних САПР (в моем случае из Flow3D). В ее узлах определяются гидродинамика течения.
Геометрия может быть произвольной, о специфичности вряд ли можно говорить. Я понимаю, что это в чистом виде трассировка лучей, просто думал что ее как-то можно распараллелить с помощью GPU и тем самым значительно ускорить процесс.
И еще если говорить о структуризации пространства, то не уместнее ли использовать kd деревья вместо bsp?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Параллельные геометрические вычисления на GPU
«
Ответ #5 :
Сентябрь 04, 2012, 10:26 »
Цитата: 0...-5 от Сентябрь 04, 2012, 09:00
Сетка к геометрии не имеет никакого отношения - она импортируется из сторонних САПР (в моем случае из Flow3D). В ее узлах определяются гидродинамика течения.
Геометрия может быть произвольной, о специфичности вряд ли можно говорить. Я понимаю, что это в чистом виде трассировка лучей, просто думал что ее как-то можно распараллелить с помощью GPU и тем самым значительно ускорить процесс.
Время трассировки одного луча достаточно мало (порядок менее миллисекунды). Поэтому эффективность параллельных вычислений (как CPU так и GPU) зависит от того есть ли у Вас подходящие "кластеры". Например при параллельной трассировке всего 100-200 лучей КПД оказывается слишком низок.
Цитата: 0...-5 от Сентябрь 04, 2012, 09:00
И еще если говорить о структуризации пространства, то не уместнее ли использовать kd деревья вместо bsp?
BSP может хранить один треугольник в неск нодах. Т.е. нод содержит все пересекающие его треугольники. А kd-tree - это просто спуск по массиву (упорядоченному определенным образом), обычно для поиска ближайших точек. Не вижу как его использовать для нахождения пересечений.
Трассировка - хорошо известная, изученная задача. Лучше подобрать хороший алгоритм чем сразу рваться в "крутизну GPU"
Записан
0...-5
Гость
Re: Параллельные геометрические вычисления на GPU
«
Ответ #6 :
Сентябрь 05, 2012, 10:35 »
Цитата: Igors от Сентябрь 04, 2012, 10:26
Цитата: 0...-5 от Сентябрь 04, 2012, 09:00
Сетка к геометрии не имеет никакого отношения - она импортируется из сторонних САПР (в моем случае из Flow3D). В ее узлах определяются гидродинамика течения.
Геометрия может быть произвольной, о специфичности вряд ли можно говорить. Я понимаю, что это в чистом виде трассировка лучей, просто думал что ее как-то можно распараллелить с помощью GPU и тем самым значительно ускорить процесс.
Время трассировки одного луча достаточно мало (порядок менее миллисекунды). Поэтому эффективность параллельных вычислений (как CPU так и GPU) зависит от того есть ли у Вас подходящие "кластеры". Например при параллельной трассировке всего 100-200 лучей КПД оказывается слишком низок.
Цитата: 0...-5 от Сентябрь 04, 2012, 09:00
И еще если говорить о структуризации пространства, то не уместнее ли использовать kd деревья вместо bsp?
BSP может хранить один треугольник в неск нодах. Т.е. нод содержит все пересекающие его треугольники. А kd-tree - это просто спуск по массиву (упорядоченному определенным образом), обычно для поиска ближайших точек. Не вижу как его использовать для нахождения пересечений.
Трассировка - хорошо известная, изученная задача. Лучше подобрать хороший алгоритм чем сразу рваться в "крутизну GPU"
Если не трудно, можно ли ссылку на алгоритм построения bsp дерева и на алгоритм трассировки лучей с его помощью? Я в конец что-то запутался...
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Параллельные геометрические вычисления на GPU
«
Ответ #7 :
Сентябрь 05, 2012, 12:00 »
Цитата: 0...-5 от Сентябрь 05, 2012, 10:35
Если не трудно, можно ли ссылку на алгоритм построения bsp дерева и на алгоритм трассировки лучей с его помощью? Я в конец что-то запутался...
Где тут путаться? Если Вы уверены что нужна именно трассировка - все для Вас очень неплохо. Сам использую свою реализацию BSP, но open-source хватает - погуглите напр "binary space partitioning tree source code"
Просьба цитированием не злоупотреблять (и так понятно о чем речь)
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...