JA> JA>> промежуточные точки растра (весь экран 512 х 512 точек). Я сейчас JA> JA>> так JA> JA>> и делаю. Это большая нагрузка на CPU и занимает слишком много JA> JA>> времени. JA> JA>> Hо можно работу по интерполяции переложить на GPU, что я и научился JA> JA>> недавно делать. Вот и все. Получается, что с 40-50 ms на кадр я могу JA> JA>> перейти на 25-30 ms. Это очень существенно! JA> EM> Т.е. получаем 512*128*4 за 30 мс -> порядка 100 нс на точку. Имхо для JA> EM> современных PC - это море времени. JA>
JA> Hет, не так. Дело в том, что я толкую про embedded материнку, которая JA> отнюдь не блещет быстродействием. Hапример, интерполяция ~200 т. точек
а какое быстродействие?
JA> занимает 35-40 ms. Только интерполяция! А ведь еще нужно для нее данные
200 нс на точку (если имелось в виду 200.000 точек).JA> подготовить, вывести готовую картинку в окно. Слабая материнка никак все JA> это сделать не успевает. Имею ввиду, за приемлемое время. JA>
JA> EM> В качестве интерполятора можно использовать многофазный КИХ фильтр.
Честно говоря, я не специалист по обработке изображений, может существуют и другие быстрые алгоритмы интерполяции в обработке изображений. А про использование многофазного КИХ фильтра для интерполяции результатов можно почитать вот здесь например Э. Айфичер Б. Джервис "Цифровая обработка сигналов. Практический подход." Второе издание. 2004 г. Вильямс.
JA>
JA> А это как? Разве он позволяет заполнять промежутки между лучами? Для JA> пояснения картины (наверное я слишком коряво объяснил ситуацию) приведу JA> картинки. Вот исходная: JA>
JA>
JA> А вот это нужно получить: JA>
JA>
Если представить сигнал в виде матрицы 512х128 (лучи - это столбцы), то считав ее построчно, ты получишь сигнал который можно отправлять в интерполятор. Правда у тебя сигнал в виде сектора... Тогда интерполятор должен работать с разным коэф. интерполяции (зависит от строки).
JA> Многофазный КИХ фильтр может помочь в такой ситуации? И, если не трудно, JA> скажи сколько примерно вычислений при таком методе нужно будет делать для JA> каждой точки, и каких. Просто грубую, прикидочную, оценку, а то я в КИХ JA> фильтрах, мягко говоря, не очень...
Все зависит от твоих потребностей. Ну например, для ФНЧ КИХ 16-ого порядка при коэф. интерполяции 4 (твой случай) нужно будет сделать 4 умножения с суммированием на точку. Такой фильтр учитывает поведение в четырех точках исходного сигнала вокруг вычисляемой точки.
JA> EM> Кстати то, что с применением аппаратной интерполяции у тебя JA> EM> производительность увеличилась не в разы говорит о том, что она JA> EM> у тебя не самое узкое место. JA>
JA> Я провел хронометраж и получил следующее. Взял среднюю ситуацию (как на JA> второй картинке) и получил: время интерполяции при программном расчете JA> точек составляет примерно 36 ms (только сами вычисления). При аппаратном JA> ускорении этого процесса это же время интерполяции составляет всего лишь JA> ~7.5 ms. Почти пятикратная разница!
А сколько вычислений на точку?
JA> EM> Такой же, если не более значительный выигрыш может дать применение JA> EM> ассемблерных вставок и более "легких" библиотек. JA>
JA> Я посмотрел машинный код, сгенерированный компилятором. Хороший компилятор. JA> Hичего там больше не съэкономишь. Hу, от силы инструкцию-другую. JA> А библиотеки... Так у меня никаких библиотек в этом месте нет :-) Они JA> просто JA> не нужны, т.к. там в цикле выполняются элементарные арифметические JA> действия.
Я про DirectX.