Войти
ПрограммированиеФорумГрафика

Стоимость OpenGL команд (комментарии) (2 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#15
13:58, 10 фев 2017

Помоему практичность данных тестов сомнительна.
Это показания на конкретном драйвере для конкретного ГПУ, будет другой драйвер/ГПУ и могут быть совершенно другие показания.
Надо протестить на разном спектре железа и драйверов, чтобы попробовать поймать тенденцию.

#16
14:11, 10 фев 2017

_Wizard_
> Удивил немного TBO - он 3.3 раза дороже чем через UBO. Поэтому выгодней делать
> через текстуру.
Не понял, если TBO в 3 раза дороже UBO зачем выгодней делать через текстуру?
> Ну и определенно на каждый дип передавать параметры через юниформы - это зло.
> Это кажется очевидно. Смешно то, что у нас на проекте именно так) И все хаят gl
> за его тормознутость, хотя на самом деле нужно спроектировать рендер правильно,
> ну и очень много кода переписать.
т.е. GL_ARB_instanced_arrays/GL_EXT_instanced_array все -же шустрее gl_InstanceID?
> можно да, у меня 4к юниформов помоему за раз можно передать. просто смысл теста был в замере стоимости АПИ вызова. поэтому надо собирать данные в большой массив и засылать одной командой.
Интересует скорость UBO с против 1 вызова glUniformXX (или нескольких) с большим массивом констант, (размер UBO конечно равен размеру массива констант для glUniformXX)
> очень много всего, конечно хотелось бы все замерить - времени мало, много
> планов на другие вещи
еще интересует immutable buffers/textures по сравнению с обычными буферами и текстурами.
_Wizard_
> и нет - кватернионы в вершинном шейдере дороже будут:
> - Трансформация матрицей: 3 раза dot-product
> - Повернуть вектор кватернионом: 2 cross-products, 2 dot-products, 3
> vector-scaler multiplies, 3 vector additions + смещение
Ага, информация очень полезная. Все-же для большого числа костей может все-же передать по шине меньше данных, а на современном железе все это быстро посчиается? или все-же разница в числе инструкция сильно покрывает затраты передачи констант, если так то mat4x3 иделальное решение для скелетной анимации.

#17
14:15, 10 фев 2017

Executor
На самом деле кто знал - нового для себя ни чего не увидел. А как тест просто подтверждение теории. Конкретные тесты на большом количестве железа америку не откроют, только использование расхождения с целью оптимизации на отдельном железе. Но это и так понятно что по сути от всего этого избавляться надо. Вообще не представляю что есть кто то, кто подобных тестов на месте не делал.

#18
14:22, 10 фев 2017

Andrey
> > Ну и определенно на каждый дип передавать параметры через юниформы - это зло.
> > Это кажется очевидно. Смешно то, что у нас на проекте именно так) И все хаят
> > gl
> > за его тормознутость, хотя на самом деле нужно спроектировать рендер
> > правильно,
> > ну и очень много кода переписать.
> т.е. GL_ARB_instanced_arrays/GL_EXT_instanced_array все -же шустрее
> gl_InstanceID?

Какая тут связь?

> Интересует скорость UBO с против 1 вызова glUniformXX (или нескольких) с
> большим массивом констант

Ты когда прочитаешь про использование uniforms ?

#19
14:50, 10 фев 2017

Andrey
>Не понял, если TBO в 3 раза дороже UBO зачем выгодней делать через текстуру?
тебе нужно много данных хранить где то (у юниформ буферов относительно маленький размер)
тесты показывают что в текстуре хранить выгоднее, чем в TBO

>Интересует скорость UBO с против 1 вызова glUniformXX (или нескольких) с большим массивом констант, (размер UBO конечно равен размеру массива констант для glUniformXX)
у UBO гарантировано 65кб+, сколько можно передать через юниформы - отдельной командой надо узнавать
+-думаю также

>т.е. GL_ARB_instanced_arrays/GL_EXT_instanced_array все -же шустрее gl_InstanceID?
ну, один из самых быстрых...
через gl_InstanceID - зависит от того где данные держать

#20
14:55, 10 фев 2017

изначальной идеей - было сравнить GL с DX9-11
меня наверное не хватит) если кто то соберется - будет отличная статья
я скорее буду про DX12 писать

#21
14:55, 13 фев 2017

_Wizard_

А нет желания выложить тесты в открытый доступ?

#22
15:34, 13 фев 2017

innuendo
>А нет желания выложить тесты в открытый доступ?
не понял вопрос может,
в самом конце статьи есть - Исходный код всех примеров

#23
16:15, 13 фев 2017

_Wizard_
да, есть, я невнимательно читал 

и не в трезвом состоянии

#24
17:51, 19 фев 2017

Сделал бенчмарк. В самом конце статьи можно скачать: "Исходный код всех примеров"
Запускаем BENCHMARK_OpenGL_API_overhead.exe (или компилим) - результыты пишет в benchmark_results.txt
Тест занимает секунд 5
У меня выдает:

CPU: Intel(R) Core(TM) i5-4460  CPU @ 3.20GHz
GPU: AMD Radeon (TM) R9 380 Series

Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200

---States changing time:
SIMPLE_DIPS_TEST 0.21
FBO_CHANGE_TEST 1.43
SHADERS_CHANGE_TEST 2.41
VBO_CHANGE_TEST 0.76
ARRAY_OF_TEXTURES_TEST 3.08
TEXTURES_ARRAY_TEST 0.68
UNIFORMS_SIMPLE_CHANGE_TEST 1.07
UNIFORMS_SSBO_TEST 0.63

---API call cost:
glBindFramebuffer: 6.93  3360%
glUseProgram: 2.20  1068%
glBindVertexArray: 0.55  268%
glBindTexture: 0.48  232%
glDrawRangeElements: 0.21  100%
glUniform4fv: 0.09  42%

---Instancing time:
UBO_INSTANCING 0.15
TBO_INSTANCING 0.50
SSBO_INSTANCING 0.17
VBO_INSTANCING 0.15
TEXTURE_INSTANCING 0.18
UNIFORMS_INSTANCING 5.93
MULTI_DRAW_INDIRECT_INSTANCING 6.53

Из интересного:
1. glMultiDrawElementsIndirect() выдал 6.53 ms , вместо 13 ms, т.е. в двое меньше. Связано с тем, что количество инстансов/дипов в бенчмарке стало 1к (вместо 2к, как в статье)
2. стоимость glBindVertexArray и glBindTexture ниже чем в статье (что-то не правильно посчитал первый раз видимо)

States changing time немного не в том порядке, как в статье - обращаем внимание
Выкладываем результаты - интересно

#25
19:30, 19 фев 2017

CPU:        Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
GPU: GeForce GTX 690/PCIe/SSE2

Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200

---States changing time:
SIMPLE_DIPS_TEST 0.13
FBO_CHANGE_TEST 1.71
SHADERS_CHANGE_TEST 2.16
VBO_CHANGE_TEST 0.22
ARRAY_OF_TEXTURES_TEST 1.12
TEXTURES_ARRAY_TEST 0.23
UNIFORMS_SIMPLE_CHANGE_TEST 0.73
UNIFORMS_SSBO_TEST 0.36

---API call cost:
glBindFramebuffer: 8.41  6630%
glUseProgram: 2.03  1604%
glBindVertexArray: 0.09  74%
glBindTexture: 0.17  131%
glDrawRangeElements: 0.13  100%
glUniform4fv: 0.06  47%

---Instancing time:
UBO_INSTANCING 2.45
TBO_INSTANCING 4.67
SSBO_INSTANCING 2.50
VBO_INSTANCING 2.45
TEXTURE_INSTANCING 26.09
UNIFORMS_INSTANCING 6.74
MULTI_DRAW_INDIRECT_INSTANCING 10.87

#26
21:10, 19 фев 2017
---Shader error in vertex shader "tests/instancing/texture_instancing_vs" file
ShaderInfoLog
0(25) : error C1101: ambiguous overloaded function reference "floor(int)"
    (0) : float floor(float)
    (0) : gp5 cp50 fp50 vp50 gp50 cpf fpf vpf gpf superp float floor(superp float)
    (0) : gp5 gp4 cp50 fp50 vp50 gp50 cpf fpf vpf gpf lowp float floor(lowp float)
    (0) : gp5 gp4 cp50 fp50 vp50 gp50 cpf fpf vpf gpf mediump float floor(mediump float)
    (0) : gp5 gp4 cp50 fp50 vp50 gp50 cpf fpf vpf gpf float floor(float)

Shader::Shader(): GLSL relink error
#27
3:24, 20 фев 2017

У меня тоже самое, что и у CD
нвидиа GTX 970

+ Показать


Окей, поменял floor на int, завелось:

CPU: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
GPU: GeForce GTX 970/PCIe/SSE2

Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200

---States changing time:
SIMPLE_DIPS_TEST 0.11
FBO_CHANGE_TEST 1.28
SHADERS_CHANGE_TEST 2.04
VBO_CHANGE_TEST 0.22
ARRAY_OF_TEXTURES_TEST 1.04
TEXTURES_ARRAY_TEST 0.23
UNIFORMS_SIMPLE_CHANGE_TEST 0.75
UNIFORMS_SSBO_TEST 3.02

---API call cost:
glBindFramebuffer: 6.29  5481%
glUseProgram: 1.93  1679%
glBindVertexArray: 0.10  87%
glBindTexture: 0.15  134%
glDrawRangeElements: 0.11  100%
glUniform4fv: 0.06  55%

---Instancing time:
UBO_INSTANCING 2.38
TBO_INSTANCING 4.37
SSBO_INSTANCING 2.41
VBO_INSTANCING 2.38
TEXTURE_INSTANCING 2.40
UNIFORMS_INSTANCING 6.11
MULTI_DRAW_INDIRECT_INSTANCING 247.24

#28
6:34, 20 фев 2017

CPU: AMD FX(tm)-4350 Quad-Core Processor           
GPU: AMD Radeon R7 200 Series

Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200

---States changing time:
SIMPLE_DIPS_TEST 0.27
FBO_CHANGE_TEST 3.74
SHADERS_CHANGE_TEST 4.06
VBO_CHANGE_TEST 1.27
ARRAY_OF_TEXTURES_TEST 4.89
TEXTURES_ARRAY_TEST 1.02
UNIFORMS_SIMPLE_CHANGE_TEST 1.54
UNIFORMS_SSBO_TEST 0.98

---API call cost:
glBindFramebuffer: 18.42  6835%
glUseProgram: 3.79  1407%
glBindVertexArray: 1.00  372%
glBindTexture: 0.77  285%
glDrawRangeElements: 0.27  100%
glUniform4fv: 0.13  47%

---Instancing time:
UBO_INSTANCING 0.68
TBO_INSTANCING 1.07
SSBO_INSTANCING 0.68
VBO_INSTANCING 0.56
TEXTURE_INSTANCING 0.45
UNIFORMS_INSTANCING 8.49
MULTI_DRAW_INDIRECT_INSTANCING 29.42

#29
9:08, 20 фев 2017

_Wizard_
Вылетает на Intel HD 4000:
D:\DownLoads\GL_API_overhead\GL_WorkingProj>BENCHMARK_OpenGL_API_overhead.exe
---Shader error in vertex shader "tests/instancing/ubo_instancing_vs" file
ShaderInfoLog
WARNING: 0:2: '#extension' :  'GL_EXT_bindable_uniform' is not supported
ERROR: 0:10: 'uniform' : syntax error syntax error


Shader::Shader(): GLSL relink error

Старое расширение, видно Intel не успел его поддержать и сразу сделал UBO.

Еще бы потестить GL_ARB_sampler_buffer_objects/GL_ARB_multibind

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

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