Jump to content

    
Sign in to follow this  
alexPec

Быстрое умножение с накоплением

Recommended Posts

19 минут назад, RobFPGA сказал:

Ну так DSP может суммировать  3 числа: P = AB+C+PCIN каждое по 48 бит (AB тут не произведение а просто конкатенация входов).  

на первой схеме у автора темы таких входов нет, есть X1 Y2 и перенос. Есть ли возможность суммировать числа в DSP так, как указано автором темы на первой схеме?

 

Edited by stealthisname

Share this post


Link to post
Share on other sites

Приветствую!

35 minutes ago, stealthisname said:

Есть ли возможность суммировать числа в DSP так, как указано автором темы в на первой схеме?

Есть.  Фактически  X это А, Y это B,  перенос это PCIN, Out это либо PCOUT (если к идет переносу) либо P , например 

// пкрвый вариант 
A4*B4 +     PCIN -> P     -----\
              +-------\        |
A3*B3       PCIN -> PCOUT3     \- AB + C -> P = A1B1+A2B2+A3B3+A4B4    
                                       |
A2*B2 +     PCIN -> P     -------------/
              +-------\        
A1*B1            -> PCOUT1    

// втрой вариант 
A4*B4 +     PCIN -> P = A1B1+A2B2+A3B3+A4B4    
              +-------\
A2*B2 +     PCIN -> PCOUT3
              +-------\
A2*B2 +     PCIN -> PCOUT2
              +-------\        
A1*B1            -> PCOUT1    

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
8 минут назад, RobFPGA сказал:

Фактически  X это А, Yэто B,  перенос это PCIN, Out это либо PCOUT (если к идет переносу) либо P , например 

спасибо

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

схема получается такая

2126749371_.png.3fc003bcc86023a7c1e38839c5557323.png.d68950d789f97f9d97648d916eafaf3b.png

не считая обозначений входов, все было правильно

Share this post


Link to post
Share on other sites

Table 2-10: Three-Input ALUMODE Operations

DSP Operation: Z + X + Y + CIN

 

и действительно, документация такое описывает.

вот только есть момент, что вход PCIN должен быть выходом соседнего блока, иначе PnR не пройдёт.

 

Share this post


Link to post
Share on other sites
10 hours ago, alexPec said:

Так в том-то и дело, что даже 8 произведений за такт на ultrascale+ (speedgrade -1) на 150МГц не пролазит. Вот и пытаюсь вручную колдонуть. Ну бог с ним, за такт, я уже морально готов к 3 тактам :) Но ведь не пролезет... А больше 3 мне никак нельзя. Думал может кто знает волшебное слово для вивадо. 

256 входов с умножением и сложением не сделать за такое время. Полагаю что там будет где то 30МГц тактовая. Может все же отталкиваться от тактовой? заложить 100МГц, разгонать частоту до 400-500. Ну и на каждом такте последовательно по 4 числа крутить на ДСП ядре. Первый слой - умножение с накоплением, второй-накопление, третий - широкий сумматор (можно на 3-add mode) режиме работы ячеек.

Share this post


Link to post
Share on other sites
11 hours ago, alexPec said:

При синтезе в вивадо получаю в схематике примерно такое:

Это примерно то, что нарисовано в PG192:

PG192F3.jpg

 

 

Может умножать на высокой частоте и в каждом такте может умножать два новых вектора, но latency = 256.

 

Ну и можно сконфигурировать в чисто комбинаторном варианте:

PG192TXT.jpg

 

Тогда и частота будет соответствующая..

Share this post


Link to post
Share on other sites

Суть сложения с накоплением, две операции вместо одной, причем - без потери разрядности, а значит и точности. Если попытаться сделать эту функцию от 256 аргументов по классическому подходу, с переполнениями будет бороться совсем тяжко, либо диапазон чисел получится маленький, меньше 8 бит.

Мне кажется, это задача прдходит для сисемы остаточных классов https://habr.com/ru/post/144886/ 

Share this post


Link to post
Share on other sites

Приветствую!

3 hours ago, Aleх said:

Если попытаться сделать эту функцию от 256 аргументов по классическому подходу, с переполнениями будет бороться совсем тяжко

Проблем с переполнением тут нет, 48-битная разрядность  многое позволяет. 
Проблемы  у TC   именно  в  latency - ему  кровь из носу надо уложится в  2-3 такта, и именно это не получается сделать при большом количестве входов у сумматора.   

 

Удачи!  Rob.

Share this post


Link to post
Share on other sites
4 минуты назад, RobFPGA сказал:

Приветствую!

Проблем с переполнением тут нет, 48-битная разрядность  многое позволяет. 
Проблемы  у TC   именно  в  latency - ему  кровь из носу надо уложится в  2-3 такта, и именно это не получается сделать при большом количестве входов у сумматора.   

 

Удачи!  Rob.

Все верно. Надо попробовать вариант с увеличенной тактовой. Тогда получится контролировать на промежуточных регистрах длину цепочки переноса. Тут может прокатить.

Всем спасибо за советы! 

Share this post


Link to post
Share on other sites

Вполне уверенно водится проект на 2 такта и 150МГц, если умножения делать не на dsp, а на логике. Только ресурсов жрёт прилично.
src.rar
Обязательно запретить использование дсп атрибутом (* use_dsp = "no" *), ну и триггер поставить после попарных сумм 8 элементов.
Если Вас устроят 3 такта, то и dsp можно использовать без проблем на эту частоту.

То, что Вы хотели бы получить - это очень плохо:

Quote

2126749371_.png.3fc003bcc86023a7c1e38839c5557323.png

Основная проблема использования dsp - это большие времянки на входе и выходе. Сюда ещё добавляется строгая локализация в кристалле. До них банально долго тянуть данные!

Поэтому, то, что уже попало в ДСП должно как можно дольше там и оставаться, а после вывода - не заходить снова. Т.е. желательно максималное использование внутренних возможностей и линий ускоренного переноса между блоками.

Из моего опыта, оптимальный вариант описания dsp - это отдельный, иерархически изолированный(* keep_hierarchy = "yes" *) модуль,

в котором полностью описываются операции 1 или нескольких dsp и их взаимодействие по выделенным линиям. Обязательно, как уже говорилось выше, использование атрибута use_dsp.


Ещё вполне рабочий вариант, как уже предлагали, это переход на удвоенную частоту. Но там могут возникнуть проблемы с холдом(хоть и в ряд ли в Вашем случае)..

 

10 hours ago, andrew_b said:

Это вопрос интерпретации.

Умножая без знаковые операнды 16 и 8 бит - в результате получаем 24 значащих бита. В случае знаковых операндов - результат умещается в 23.

Share this post


Link to post
Share on other sites

Однажды решил заюзать dsp в проекте для умножений. Пока проект маленький, вроде нормально, а по мере роста и заполняемости, пока до него данные дойдут, пока заберешь обратно, вечность проходит. Я бы это тоже учитывал в будущем, если надо так строго в два такта уложиться. 

Edited by new123

Share this post


Link to post
Share on other sites
2 часа назад, TRILLER сказал:

Вполне уверенно водится проект на 2 такта и 150МГц, если умножения делать не на dsp, а на логике. Только ресурсов жрёт прилично

Спасибо! Да, интересный опыт. Но на логике много умножителей и сумматоров делать - в чип не влезет.

Share this post


Link to post
Share on other sites

Приветствую!

2 hours ago, alexPec said:

Но на логике много умножителей и сумматоров делать - в чип не влезет.

На логике можно делать только сумматоры,  а умножители (c регистром на выходе) в DSP. Ну и можно поиграться комбинируя  сумматор частично в DSP частично в логике выбирая оптимальное распределение  задержек  между  регистрами. Но с этим придется повозится.

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
On 10/7/2021 at 9:29 PM, alexPec said:

Задача такая: надо за 2 такта умножить много пар чисел и сложить все результаты. Много- это 256. Причем одно число 8 бит, второе 16. В вивадо решил проверить как он это сделает.

странно, что до сих пор никто не предложил "обмануть carry-chain" как описывается тут (таймметка 35:07, если ссылка некорректно вставится):

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this