Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Вопрос по Vulkan (2 стр)

Вопрос по Vulkan (2 стр)

Страницы: 1 2 3 Следующая »
sanПостоялецwww2 мар. 20187:04#15
Kurono267
> Поддержка нескольких GPU для работы есть у обоих, но перенос между GPU разных вендоров будет через хост(оперативку)
Не только разных вендоров, но и просто разных карт (не связанных по SLI/FF). Ну на этом у меня весь выигрыш от двух карт и сдуется. Гонять несколько гигабайт в секунду через процессор и RAM это хана всему перформансу... DX12 с этим справляется отлично, там данные между картами идут напрямую (по PCIe), но как я уже писал, там убогая работа с даблами (только арифметика, никаких функций). OGL/Vulkan с даблами работает нормально, нет только тригонометрии. Но опять-же не работает (пока) полноценный мультиадаптерный режим. Короче нет в жизни счастья...
AndreyПостоялецwww2 мар. 20188:47#16
san
> выполняется (частично) на GPU
как это частично ? полностью на GPU.
>И что мне даст добавление к OpenGL кусков на OpenCL,
обработка данных на GPU с последующей отрисовкой на OpenGL
>как это может выглядеть?
примерно так:
1) создаешь OpenCL ресурс из OpenGL ресурса(по сути в реализации будет некая ссылка)
2) Захватываешь его в OpenCL.
3) работаешь с ним в OpenCL проге на GPU
4) освобождаешь от OpenCL
5) Используешь в OpenGL
Начни с спеков OpenCL, примеров OpenCL/OpenGL interop в интеренте, их много. К примеру в AMD APP SDK , nVidia OpenCL Samples ,
opencl-and-opengl-interoperability
Kurono267
> Если я правильно понимаю, в openCL и Vulkan будут проблемы с переносом данных между GPU от разных вендоров.
Вообще на данный момент OpenCL + Vulkan нету смысла использовать. Пока нету шаринга ресурсов Vulkan/OpenCL имеем CPU->OpenCL->CPU->Vulkan, был бы шаринг стало бы: CPU->OpenCL->Vulkan.
У Khronos была идея объеденить OpenCL/Vulkan, слышал версию что боялись что Vulkan не взлетит, а объединение с OpenCL этому может лучше поспособствовать, но оказалось что взлетел сам :). Поэтому идея объединения возможна стала бессымсленной. OpenCL и Vulkan пусть решают свои задачи. А вот шаринг с Vulkan/Direct3D12 было бы очень кстати.

sanПостоялецwww2 мар. 201818:10#17
Подожди, ну предположим я запустил OpenCL программы на двух адаптерах, каждая считает свой кусок изображения.
Но ведь что бы слить результаты их работы в единую картинку и показать ее, придется гнать все на CPU. Или как?
Я понимаю, что OpenGL может показать изображение, но монитор подключен только к одной карте. Как шейдер получит доступ к массиву на другом устройстве?
Или я что-то не понимаю?
sanПостоялецwww3 мар. 20182:32#18
Я тут вот что нашел: https://www.khronos.org/blog/vulkan-multi-gpu-support-not-just-for-windows-10
"At GDC 2017, in San Francisco during February, Khronos™ released several new Vulkan® extensions for cross-platform Virtual Reality rendering and multiple GPU access."
Похоже Vulkan все же или имеет что-то по части мульти-адаптерности, точнее кросс-адаптерности. Другое дело, что разобраться как это сделать, без примера использования, я явно не смогу. На DX12 хоть пару примеров нашел и разобрался, а делать что-то по голым спекам, без опыта программирования на этом АПИ... Не потяну.
Kurono267Постоялецwww3 мар. 20182:49#19
san
По ходу я все таки ошибся по поводу поддержки sharing'а Vulkan`ом, она есть правда информации кот на плакал.
Советую посмотреть расширения VK_KHR_external_*, если я правильно понимаю, они как раз реализуют общие ресурсы для разных GPU, В документации написано более подробно https://www.khronos.org/registry/vulkan/specs/1.0-wsi_extensions/… ternal_memory
sanПостоялецwww3 мар. 20183:09#20
Kurono267
> Советую посмотреть расширения VK_KHR_external_*,
Спасибо! Буду копать. Думаю пока разберусь, Хронос уже выпустит версию 1.1 :)
/A\Постоялецwww3 мар. 201811:49#21
san
> Но ведь что бы слить результаты их работы в единую картинку и показать ее, придется гнать все на CPU.
Там есть функция clEnqueueMigrateMemObjects но говорят все реализации используют копирование через цпу, но работает быстрее чем если бы копировать это самостоятельно.

По воводу вулкана нашел такую презентацию
http://on-demand.gputechconf.com/gtc/2017/presentation/s7191-kubi… gy-update.pdf

sanПостоялецwww4 мар. 201823:13#22
/A\
Вариант с OpenCL/OpenGL однозначно не проходит, я не сразу сообразил, что в случае OpenCL код вычисления зашит в экзешнике, т.е. его не сменить как шейдер. Мне это не подходит.
Что до Vulkan, то наверно попробую пока сделать версию с обменом через память с тем, что бы по выходу 1.1 переделать ее по-людски. Все едино у меня только один Titan V, значит на втором адаптере будет крутиться только GUI. Обмен между адаптерами будет довольно слабый и на перформансе не скажется.

Ну почему нет в жизни счастья? Есть DX12, отлично работает на разных адаптерах (например сейчас у меня в одной аппликации задействованы Titan X, Titan V и AMD R9), но даблов там нет! С другой стороны OGL прекрасно работает на даблах но только на одном адаптере... Мда...

boolУчастникwww4 мар. 201823:52#23
san
> Вариант с OpenCL/OpenGL однозначно не проходит, я не сразу сообразил, что в
> случае OpenCL код вычисления зашит в экзешнике, т.е. его не сменить как шейдер.
> Мне это не подходит.
?
sanПостоялецwww5 мар. 20180:33#24
bool
А чего непонятного? Аппликация одна, а формул для генерации текстур много. Одна формул - один шейдер. Что бы сменить формулу не надо перекомпилировать программу или городить dll на каждый вариант, достаточно загрузить другой шейдер, который можно менять/обновлять/отлаживать не трогая аппликацию.

Правка: 5 мар. 2018 0:35

boolУчастникwww5 мар. 20180:47#25
san
а в чем проблема-то в opencl загрузить другой код?
/A\Постоялецwww5 мар. 20181:18#26
bool
Видимо он перепутал с CUDA, но и там с какой-то версии можно компилить шейдеры в рантайме.
sanПостоялецwww5 мар. 20182:23#27
/A\
> Видимо он перепутал с CUDA, но и там с какой-то версии можно компилить шейдеры в рантайме.
Может я конечно что-то не понимаю, но что за шейдерные языки в OpenCL и CUDA? Наколько я знаю (может я неправ), там код на C++.
Я уже писал что с OpenCL пока дела не имел, просто почитал доки. Там полно примеров программ, но ни слова о шейдерах.
Kurono267Постоялецwww5 мар. 20183:48#28
san
На CUDA и OpenCL'е, там свои C подобные языки, вроде сейчас даже часть C++ фичей держат. На OpenCL'е код, также подобно шейдерам подгружается. На CUDA, если я правильно помню код компилируется это верно(правда отдельным нвидивским компилятором), но вроде есть возможность его подгружать отдельно из файлов.

Правка: 5 мар. 2018 3:49

sanПостоялецwww5 мар. 20183:56#29

Kurono267
> На OpenCL'е код, также подобно шейдерам подгружается
А компилируется он когда? Как GLSL, в момент загрузки?
Страницы: 1 2 3 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр