|
аппроксимация деления, почему не используется |
|
|
|
May 13 2015, 22:57
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 2-10-10
Пользователь №: 59 873

|
У меня стоит задача нормировки потока чисел (поток пикселей изображения) на некоторое переменное значение (например разницу максимальной и минимальной яркости изображения). Соответственно без деления не обойтись. Те алгоритмы, которые используются чаще всего, делятся на два типа: либо тупо LUT с забитой таблицей 1/х, либо итеративные алгоритмы, имитирующие деление в столбик, с различной степенью оптимизации. Еще можно складывать делитель, пока результат не превзойдет делимое и посчитать количество таких операций, но это совсем плохой алгоритм. Почему никто не использует тупо полиномиальную аппроксимацию 1/х? Вот здесь всего навсего полином 3-й степени, 100 слайсов на 3-ем Спартане и при этом точность 11 бит. Мне так кажется, что я здесь что-то не понимаю, это же так просто, почему так не делают? Еще и конкретно для моей задачи - даже при точности 11 бит, я мог бы получить приемлемый результат, забив на линейность нормировки. Спасибо.
|
|
|
|
|
 |
Ответов
|
May 14 2015, 05:11
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(alexkarnaukhov @ May 14 2015, 01:57)  У меня стоит задача нормировки потока чисел (поток пикселей изображения) на некоторое переменное значение (например разницу максимальной и минимальной яркости изображения). Соответственно без деления не обойтись. Те алгоритмы, которые используются чаще всего, делятся на два типа: либо тупо LUT с забитой таблицей 1/х, либо итеративные алгоритмы, имитирующие деление в столбик, с различной степенью оптимизации. Еще можно складывать делитель, пока результат не превзойдет делимое и посчитать количество таких операций, но это совсем плохой алгоритм. Почему никто не использует тупо полиномиальную аппроксимацию 1/х? Вот здесь всего навсего полином 3-й степени, 100 слайсов на 3-ем Спартане и при этом точность 11 бит. Мне так кажется, что я здесь что-то не понимаю, это же так просто, почему так не делают? Еще и конкретно для моей задачи - даже при точности 11 бит, я мог бы получить приемлемый результат, забив на линейность нормировки. Спасибо. Вот например целочисленное деление не подходит? Какая частота съема пикселей? Разрядность пикселей? Какая плис? PS в крайнем случае можно сделать pipeline деление...
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
May 14 2015, 10:32
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 2-10-10
Пользователь №: 59 873

|
Цитата(Maverick @ May 14 2015, 09:11)  Вот например целочисленное деление не подходит? Какая частота съема пикселей? Разрядность пикселей? Какая плис? PS в крайнем случае можно сделать pipeline деление... Частота - 50МГц, 14бит, плис - 7я серия xilinx. На данный момент для деления использую корку DividerGenerator в режиме Radix-2. Хавает более 2000 FF... pipeline нужен обязательно, а вот latency роли не играет, хоть 1000 тактов пойдет. Ваш алгоритм, насколько я понимаю, несколько тактов на деление требует? Я боюсь, что если его конвейеризировать, то слайсов будет прилично занимать... И все-таки в аппроксимации меня привлекает то, что результат-то можно получать гораздо большей разрядности, чем наихудшую точность (ну как в АЦП - есть разрядность, а есть нелинейность и в плохом АЦП может быть 16 эффективных разрядов, но линейными могут быть только 14). Т.е. можно получить монотонную 16-битную функцию на выходе, у которой только первые 11 бит будут всегда точно соответствовать 1/х, что вполне может сгодиться. Делением в столбик такого не получишь...
|
|
|
|
|
May 14 2015, 10:44
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(alexkarnaukhov @ May 14 2015, 13:32)  Частота - 50МГц, 14бит, плис - 7я серия xilinx. На данный момент для деления использую корку DividerGenerator в режиме Radix-2. Хавает более 2000 FF... pipeline нужен обязательно, а вот latency роли не играет, хоть 1000 тактов пойдет. Ваш алгоритм, насколько я понимаю, несколько тактов на деление требует? Я боюсь, что если его конвейеризировать, то слайсов будет прилично занимать... И все-таки в аппроксимации меня привлекает то, что результат-то можно получать гораздо большей разрядности, чем наихудшую точность (ну как в АЦП - есть разрядность, а есть нелинейность и в плохом АЦП может быть 16 эффективных разрядов, но линейными могут быть только 14). Т.е. можно получить монотонную 16-битную функцию на выходе, у которой только первые 11 бит будут всегда точно соответствовать 1/х, что вполне может сгодиться. Делением в столбик такого не получишь... думаю будет меньше чем 2000 FF updдля 16 битных данных Цитата Flow Status Successful - Thu May 14 14:49:58 2015 Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 SP 1 SJ Full Version Family Stratix IV Logic utilization < 1 % Combinational ALUTs 46 / 58,080 ( < 1 % ) Memory ALUTs 0 / 29,040 ( 0 % ) Dedicated logic registers 85 / 58,080 ( < 1 % ) Total registers 85 Total pins 67 / 584 ( 11 % ) Device EP4SGX70HF35C2 Timing Models Final таймквет показывает частоту выше 300 МГц Как вариант можно блок деления запустить на частоте эдак 300МГц. 300МГц/50МГц = 6 Ставим 3 (с запасом) модуля и переиспользуем ресурсы. Таким образом, Вы получаете на 3 модулях pipeline на 3*6=18 тактов Минимизация ресурсов налицо за счет временного мультиплексирования и переиспользования ресурса (модуля деления)... ------------------------------------------------------------------------------------------------------------------------------------------------------------ Даже если просто (для работы на одной тактовой частоте 50МГц) 85 регистров *16 = 1 360 то и здесь получается экономия только что увидел у Вас не 16 бит а 14 бит данные, тогда еще больше экономии...
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
Сообщений в этой теме
alexkarnaukhov аппроксимация деления May 13 2015, 22:57 Lmx2315 ..я пользуюсь сдвигом вправо. May 14 2015, 04:16 des00 Цитата(alexkarnaukhov @ May 14 2015, 05:5... May 14 2015, 05:32 _pv если в a/b делитель не так часто меняется, посчита... May 14 2015, 10:59 alexkarnaukhov Цитата(_pv @ May 14 2015, 14:59) если в a... May 14 2015, 11:13 XVR Цитата(alexkarnaukhov @ May 14 2015, 01:5... May 14 2015, 11:17 alexkarnaukhov Цитата(XVR @ May 14 2015, 15:17) Наверное... May 14 2015, 11:29 vladec Для вычисления 1/x есть еще итерационные алгоритмы... May 15 2015, 05:45 Maverick Цитата(vladec @ May 15 2015, 08:45) Для в... May 15 2015, 05:53  blackfin Цитата(Maverick @ May 15 2015, 08:53) нап... May 15 2015, 09:46   Maverick Цитата(blackfin @ May 15 2015, 12:46) Ну ... May 15 2015, 10:28 alexkarnaukhov Ну вообще Ньютон как раз может и быть интересен. П... May 15 2015, 14:23
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|