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

CUDA/GPU как сделать максимально быстро свертку по ядру 3x3 , 4x4 , 5x5 ... (2 стр)

Страницы: 1 2 3 Следующая »
#15
(Правка: 13:26) 13:26, 7 ноя. 2019

/A\
> хардварное сжатие текстур, что сильно увеличивает пропускную способность
> памяти, но это только для рисования
интересно, это какое? есть чего почитать? ты же не про DXT/BC?


#16
13:31, 7 ноя. 2019

Mr F
если у тебя amd запусти RPG там показывается какие компрессии могут быть

#17
14:15, 7 ноя. 2019

Mr F
> интересно, это какое?
delta color compression, хардварное сжатие без потерь

#18
16:45, 7 ноя. 2019

/A\
> delta color compression
Ого, вот это кайф. Я помню лишь, что была некая лосслесс компрессия для MSAA текстур, чтобы не тупо каждый семпл на каждый пиксель хранить, но про вот это не слышал.

#19
17:26, 7 ноя. 2019

Mr F
> но про вот это не слышал.
нвидиа уже лет 5 этим хвастается, а мало кто из разработчиков знает...
столько усилий впустую.

#20
18:03, 7 ноя. 2019

/A\
> а мало кто из разработчиков знает...
> столько усилий впустую.

и как разрабы поимеют это явно ?

#21
19:04, 7 ноя. 2019

innuendo
> и как разрабы поимеют это явно ?
Иногда есть выбор делать алгоритм на компьют шейдерах или на фрагментных.
Какой-нибудь даунсэмплинг на фрагментном работает быстрее.

#22
20:03, 7 ноя. 2019

/A\
> Иногда есть выбор делать алгоритм на компьют шейдерах или на фрагментных.

прикольно - именно так и сделаны постпроцессы в UE

#23
0:53, 8 ноя. 2019

invis
> GL (фрагментный шейдер) быстрее до 1.5 раз.
Протестировал ещё на старой ноутбучной карте - GF-740m - разница ещё больше, аж 2 раза, и на маленькой картинке тоже. Память медленная, DDR3/64 бита. Есть ли там сжатие - точно нигде не сказано, но судя по тому, что в Паскале 4-е поколение сжатия, в Кеплере тоже должно быть.
Но может быть виноват старый компилятор OpenCL, драйвера там 2013-го года.

Ещё вспомнил про трюк, позволяющий сократить число выборок за счёт билинейки, где-то 1.5 раза он даёт:
http://rastergrid.com/blog/2010/09/efficient-gaussian-blur-with-l… ear-sampling/
Ну и на старых картах хорошо помогает захардкодить размер фильтра (компилятор полностью разворачивает цикл в шейдере), на 740m в 2 раза. На новых (1070) меньше, 10-15%.

#24
19:11, 12 ноя. 2019

А как правильно сделать свертку в сепарабельном пространстве , просто пройтись сначала по оси X , а потом оси Y "без всяких там разложений" . И всё ..!? или как это сделать верно ?

вот код без CUDA . просто на CPU

+ Показать

P.S: Если можно пример кода . можно и без CUDA .....

Помогите жебраку найти истину , и выйти из матрицы ....

#25
21:55, 12 ноя. 2019

Не пространство сепарабельное, а сам фильтр. Separable - разделяемый (на 2 прохода).
И смысл в том, что ты на вход второго прохода подсовываешь результат первого. Но для начала можно отдельно каждый проход тестировать.
По CPU-коду сложно понять, какой фильтр ты хотел изобразить - 3*3 (радиус = 1) или 7*7 (радиус = 3).

#26
13:26, 13 ноя. 2019

invis
3*3 (радиус = 1) ...!!!

#27
13:29, 13 ноя. 2019

werasaimon
курсовик ?

#28
14:18, 13 ноя. 2019

werasaimon
> 3*3 (радиус = 1) ...!!!
Тогда передаваемый в ф-ю радиус должен быть 1.
Ядро фильтра, которое у тебя kernel[9], нужно одномерное (3*1, а не 3*3).

#29
(Правка: 16:43) 16:07, 13 ноя. 2019

invis
Правильно ли я понимаю что кофициенты для сапарабельной будут другими , нежели для обычной сверки .
А именно vx_3 * vy_3 = mat3×3
Где:
vx_3 - матрица столбец 1×3 для оси OX .
vy_3 - матрица строка 3×1 для оси OY .
mat3×3 - матрица ядра для обычной свертки .
Например у меня она такая

+ Показать

Матрица vx_3 будет ядром сверки по оси OX
Матрица vy_3 будет ядром сверки по оси OY
..
Вопрос как мне узнать значения векторов vx_3 и vy_3 , если мне известно только значения матрицы mat3x3 . Понятно что имеется виду узнать алгебраический , для любых заначений , для любого ранга матриц ...?
А не тупо подбирать ..!

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