OpenGL communityФорум

Многопоточная работа с OpenGL (комментарии)

Страницы: 1 2 3 4 5 Следующая »
#0
21:09, 17 ноя 2011

Многопоточная работа с OpenGL (комментарии)

Это сообщение сгенерировано автоматически.

#1
21:09, 17 ноя 2011

Спасибо за материал.
Было бы неплохо — добавить в начале статьи Введение, где написать, зачем нужно распараллеливание. Простой абзац с мыслями из части «Рендеринг в параллельном потоке».

#2
21:30, 17 ноя 2011

Спасибо, как раз вовремя.

#3
22:34, 17 ноя 2011

В статье стоит добавить "Тесты", где бы автор на реальных примерах (числах) показал преимущества такого подхода в сравнении с тем же примером, но без распараллеливания.

Может я не внимательно читал, но с ходу кажется, что "Рендеринг в параллельном потоке" не должен дать никакого прироста, так как видеокарта одна на всех. Можно немного теории по этому вопросу в статье?

#4
23:14, 17 ноя 2011

/A\
> Часть исходников были взяты из уроков KpeHDeJIb'я.
У меня и имя есть )

Прочитать еще не успел, как прочитаю дам какой-то более осмысленный комментарий.

#5
23:42, 17 ноя 2011

Согласен с paulS. В чем профит использования разных контекстов в разных потоках?

Асинхронная загрузка ресурсов - это немного другая проблема. Она решается и с одним контекстом.

В случае асинхронности контекстов мы получим дополнительный профит только во время glTexImage2D или glBufferDataARB?
Но в реалтаймовых приложениях интенсивность этих операций вроде не столь высока... Разве что в Rage? =)

И еще вопрос. Что на счет swapBuffers?
Не будет ли проблем с тем, что два потока одновременно вызовут его?
Поидее даже если не будет проблем то прироста производительности это не даст.

#6
12:42, 18 ноя 2011

paulS
> В статье стоит добавить "Тесты"
добавил замеры времени выполнения функций и тесты распараллеливания, потом напишу еще один тест.

> Может я не внимательно читал, но с ходу кажется, что "Рендеринг в параллельном
> потоке" не должен дать никакого прироста, так как видеокарта одна на всех.
> Можно немного теории по этому вопросу в статье?
В одном потоке видеокарта используется не 100% времени, в возникающие промежутки может рендерится другой поток.
Например так:

|--1--|-2-|-3-|--1--|
|-|___|----4----|___|

1 - рендеринг в окно
2 - SwapBuffers + вертикальная синхронизация
3 - обработка сообщений окна
4 - рендеринг в параллельном потоке


false3d
> И еще вопрос. Что на счет swapBuffers?
SwapBuffers вызывается только в одном потоке, остальные рендерят в текстуру

> Не будет ли проблем с тем, что два потока одновременно вызовут его?
вызвать SwapBuffers для первого потока из второго?
даже если не будет проблем, то для этого нужно для второго окна сделать текущим контекст рендеринга из первого и перед этим отключить контекст в первом окне, а после свапа возвращать нужные контексты.  wglMakeCurrent работает не так быстро чтобы вызывать его 4 раза за кадр.

#7
13:33, 18 ноя 2011

/A\
На счет распараллеливания теперь яснее. Впринципе да, пока процессор готовит данные, сортирует, кулит считает AI и физику, мы можем в это время рендерить другой поток.
Но с таким же успехом мы можем сделать распараллеливание и имея один контекст. Ведь после вызова glFinish видеокарта пошла работать а мы можем делать свои дела в другом потоке. Или тут еще чето другое подразумевается?

На счет swapBuffers я скорее имел ввиду glFinish в нем вызываемый.
Допустим такая ситуация - первый поток делает свап баферс и зависает на glFinish (ждем видюху), а в этот момент другой поток отрендерил сцену в текстуру и в момент анбинда  FBO (поидее тоже вызывается glFinish). Вот в этом случае проблем не будет?

#8
16:06, 18 ноя 2011

false3d
> мы можем в это время рендерить другой поток.
Мы это и так можем делать, все команды OpenGL асинхронны - вызвал команду и делай что хочешь, видеокарта в это время работает.

В моем понимании лучше параллелить подготовку данных, а сами данные использовать в основном потоке. Опять же я до сих пор не нашел времени детально ознакомиться с текстом и пока еще не могу судить что, как и почему.

#9
16:35, 18 ноя 2011

KpeHDeJIb
> все команды OpenGL асинхронны - вызвал команду и делай что хочешь
Т.е., например, glDrawElements с привязанным буферным объектом мгновенно возвращает управление в программу?
Я не нашёл ответ на этот вопрос в интернете. Опять самому надо тестировать.

KpeHDeJIb
> я до сих пор не нашел времени детально ознакомиться с текстом
Действительно, зачем его читать, главное настрочить побольше комментов.

#10
17:19, 18 ноя 2011

paulS
> Действительно, зачем его читать, главное настрочить побольше комментов.
Я по поводу текста поэтому и не давал никаких комментариев, если вы не заметили. Впрочем может у вас как раз и есть эта болезнь?

#11
19:04, 18 ноя 2011

KpeHDeJIb
>Мы это и так можем делать, все команды OpenGL асинхронны - вызвал команду и делай что хочешь, видеокарта в это время работает.
Во первых glFinish не асинхронна, во вторых я о ней и говорил, что пока на ней висит первый поток второй делает полезную работу, но что если в этот момент второй поток вызовет glFinish тоже?

#12
19:07, 18 ноя 2011

paulS
>Т.е., например, glDrawElements с привязанным буферным объектом мгновенно возвращает управление в программу?
типа того. Команды буферизируются и далеко не сразу идут на обработку видеокартой. А вот после вызова glFinish собственно и начинается процесс обработки ранее переданных данных.

#13
19:27, 18 ноя 2011

false3d
> Во первых glFinish не асинхронна
Простите, а зачем ее звать? Она делает столл, использовать ее нужно только в самых исключительных случаях. То же самое и glFlush, который навязывает драйверу вашу волю, без которой он, скорее всего, смог бы работать эффективней.

ЗЫ. Ну вобщем-то http://www.opengl.org/wiki/Common_Mistakes#glFinish_and_glFlush немного написано про это.

#14
20:15, 18 ноя 2011

KpeHDeJIb
> Простите, а зачем ее звать? Она делает столл, использовать ее нужно только в
> самых исключительных случаях. То же самое и glFlush, который навязывает
> драйверу вашу волю, без которой он, скорее всего, смог бы работать эффективней.
Как на счет свап бафферс, он ведь внутри себя glFinish и зовет. И анбинд FBO... Разве нет?
Или не стоит свап бафферс звать? =)

Страницы: 1 2 3 4 5 Следующая »
OpenGL communityФорум

Тема в архиве.