Jump to content

    
Sign in to follow this  
maksya

В поисках процессора

Recommended Posts

Задача следующая - подобрать подходящий процессор для быстрого выполнения операций над числами, представленными в формате 64-bit floating point (double precision floating point).

 

Ноги растут из результатов проведенной симуляции перемножения двух операндов на ADSP201 "Тигровая Акула" - аж 58 тактов (64 x 64) versus по-моему 5 тактов (32 x 32). Тут возникло два варианта - поассемблировать критические участки или поискать камни с поддержкой 64-bit. Относительно первого подхода пока сложно что-либо сказать, т.к. программировать лень, да и обязанности мои скорее связаны с построением вычислительной системы под заданный алгоритм, нежели с решением никому непонятной задачи никому непонятным способом (определение программиста :) ). Буду признателен, если кто-нибудь выскажется про целесообразность написания эмуляции врукопашную.

 

Что касается второго направления, то тут на глаза попался TMS320C67 (надеюсь обозвал правильно). Вообщем новый процессор с поддержкой double-precision floating point. При ближайшем рассмотрении правда оказалось, что есть только возможность перемножить floating-point числа 32 x 64 (а не полноценные 64 x 64). Т.е. быстро перемножить наверное тоже не получится. Ко всему прочему пока нет соответствующего софта (CodeComposer вроде как кличут), способного промоделировать выполнение алгоритма на данном кристалле. Точнее сказать в той версии, что есть у меня, о поддержки этого нового процессора ни слова.

 

Есть еще RM7000C от PMC-Sierra. Впринципе подходит, но пока напрягают его возможности ввода/вывода (мультиплексированная шина, хоть и 64-разрядная; нет контроллера внешней динамической памяти...)

 

Может есть еще альтернативные варианты? Any suggestions are welcomed.

Share this post


Link to post
Share on other sites

ну так скока вешать в грамммах? :)

т.е. сколько MUL (или МАС) 64float х 64float в секунду для вашего алгоритма надо?

.

PS: а вообще новые C672х - довольно привлекательные и относительно недорогие кристаллы.

по TI: насчет оценки тех или иных операций стоит в описании предоставляемых библиотек (DSPLIB) пошукать - как правило там указывается расход по тактам/памяти.

Share this post


Link to post
Share on other sites

Считать, мне кажется, лучше в нанах, мипсах или мегафлопсах, тот же TMS320C64XXT за идин такт делает умножение всего лишь формата 16x16, но зато аж четыре сразу и за 1нс и не факт, что процессор плавающей точки типа 67 обеспечит большую суммарную производительность.

Share this post


Link to post
Share on other sites
ну так скока вешать в грамммах? :)

т.е. сколько MUL (или МАС) 64float х 64float в секунду для вашего алгоритма надо?

Пока сложно сказать :) Алгоритм разрабатывал не Я, и кодировать его тоже не моя задача. Изначально предполагалось прокручивать код на "Тигровой Акуле". Под рукой была соответствующая отладочная плата. Так вот результат симулятора не удовлетворил - типа не успевает алгоритм обсчитать очереждную порцию информации. Вот и маюсь.

 

А не подскажете заодно как выглядит методика оценки сложности программы? За свою жизнь приходилось пока иметь дело только с небольшими программами, где не так сложно было прикинуть самый большой путь прохода алгоритма. Оценка в этом случае сводилась к подсчету выполняемых команд (их количество и время выполнения каждой из них) и дальнейшему переводу в секунды. А как поступать с тысячастроковыми программами на C? Аппендикс даю на отсечение, что этим наверняка занимаются САПР. Если да, то насколько можно доверять такой оценке? Будет ли это оценка в худшем случае?

 

по TI: насчет оценки тех или иных операций стоит в описании предоставляемых библиотек (DSPLIB) пошукать - как правило там указывается расход по тактам/памяти.
Извините за глупый вопрос - в каком формате представлена эта информация? В комментариях к каждой функции? И каким софтом можно поддержать TMS320C672x ?

 

Считать, мне кажется, лучше в нанах, мипсах или мегафлопсах, тот же TMS320C64XXT за идин такт делает умножение всего лишь формата 16x16, но зато аж четыре сразу и за 1нс и не факт, что процессор плавающей точки типа 67 обеспечит большую суммарную производительность.
Если Я возьму функцию умножения 64 x 64 floating point (если Я правильно понял, то таковая имеется в библиотеке DSPLIB) и два процессора TMS320C64XXT и TMS320C672x, то смогу ли Я с определенной достоверностью определить время выполнения этой функции на каждом из процов? Если да, то как? Компилятор достаточно умный у TI чтобы распараллелить это умножение или придется такие функции на ASM писать?

Share this post


Link to post
Share on other sites
Извините за глупый вопрос - в каком формате представлена эта информация? В комментариях к каждой функции? И каким софтом можно поддержать TMS320C672x ?

 

Если Я возьму функцию умножения 64 x 64 floating point (если Я правильно понял, то таковая имеется в библиотеке DSPLIB) и два процессора TMS320C64XXT и TMS320C672x, то смогу ли Я с определенной достоверностью определить время выполнения этой функции на каждом из процов? Если да, то как? Компилятор достаточно умный у TI чтобы распараллелить это умножение или придется такие функции на ASM писать?

Вмешаюсь и я в беседу :)

 

Допустим 67x. Здесь можно скачать собственно саму библиотеку, а также предварительно посмотреть, какие есть функции. Документация располагается здесь. Открываем ее, находим нужную функцию (двух чисел я что-то не нашел, но например DSPF_dp_vecmul -- умножение векторов double presicion), и ищем раздельчик Benchmarks, где указаны размер кода и количество циклов процессора.

 

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

 

И еще -- компилятор у TI умный :) Но ему иногда надо помогать. Наводить его, так сказать, на путь истинный. Еще в композере есть подсказчик, который дает рекомендации, как сделать код более эффективным. В случае простого умножения двух чисел это, я думаю, не пригодится, а вот в случае со всякими критичными циклами бывает полезно. Если ASM, то удобнее не писать на нем с нуля, а править то, что сгенерил компилятор (генерит он неплохо, с комментариями, весьма красиво).

 

Библиотеки для других 6000-ников здесь.

 

Ну и напоследок скажу, что у библиотеки DSPLIB обычно есть приложенные исходники функций на ассемблере в виде файла с расширением *.src

Share this post


Link to post
Share on other sites
ну так скока вешать в грамммах? :)

т.е. сколько MUL (или МАС) 64float х 64float в секунду для вашего алгоритма надо?

Пока сложно сказать :) Алгоритм разрабатывал не Я, и кодировать его тоже не моя задача. Изначально предполагалось прокручивать код на "Тигровой Акуле". Под рукой была соответствующая отладочная плата. Так вот результат симулятора не удовлетворил - типа не успевает алгоритм обсчитать очереждную порцию информации. Вот и маюсь.

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

Share this post


Link to post
Share on other sites
Задача следующая - подобрать подходящий процессор для быстрого выполнения операций над числами, представленными в формате 64-bit floating point (double precision floating point).

 

Ноги растут из результатов проведенной симуляции перемножения двух операндов на ADSP201 "Тигровая Акула" - аж 58 тактов (64 x 64) versus по-моему 5 тактов (32 x 32). Тут возникло два варианта - поассемблировать критические участки или поискать камни с поддержкой 64-bit. Относительно первого подхода пока сложно что-либо сказать, т.к. программировать лень, да и обязанности мои скорее связаны с построением вычислительной системы под заданный алгоритм, нежели с решением никому непонятной задачи никому непонятным способом (определение программиста :) ). Буду признателен, если кто-нибудь выскажется про целесообразность написания эмуляции врукопашную.

 

Что касается второго направления, то тут на глаза попался TMS320C67 (надеюсь обозвал правильно). Вообщем новый процессор с поддержкой double-precision floating point. При ближайшем рассмотрении правда оказалось, что есть только возможность перемножить floating-point числа 32 x 64 (а не полноценные 64 x 64). Т.е. быстро перемножить наверное тоже не получится. Ко всему прочему пока нет соответствующего софта (CodeComposer вроде как кличут), способного промоделировать выполнение алгоритма на данном кристалле. Точнее сказать в той версии, что есть у меня, о поддержки этого нового процессора ни слова.

 

Есть еще RM7000C от PMC-Sierra. Впринципе подходит, но пока напрягают его возможности ввода/вывода (мультиплексированная шина, хоть и 64-разрядная; нет контроллера внешней динамической памяти...)

 

Может есть еще альтернативные варианты? Any suggestions are welcomed.

 

 

А Freescale не рассматривали?

Например MPC5200B. 400MHz, double precision FPU и прочее. Не DSP, но всё же PowerPC, да и энергопотребление вообще скромное.

Я лично с ним дела не имел, но когда-то бегло просмотривал документацию. На мой взгляд очень достойный чип. Интересно ваше мнение.

Share this post


Link to post
Share on other sites
Что касается второго направления, то тут на глаза попался TMS320C67 (надеюсь обозвал правильно). Вообщем новый процессор с поддержкой double-precision floating point. При ближайшем рассмотрении правда оказалось, что есть только возможность перемножить floating-point числа 32 x 64 (а не полноценные 64 x 64).

 

Э-э, как раз можно либо float*float, либо double*double. И нельзя float*double без предварительного преобразования float->double. Время выполнения MPYDP (перемножение double*double) 9 delay-слотов при занятости юнита на 4 такта. Время выполнения сложения - ADDDP - 6 delay-слотов при занятости юнита на 2 такта. Преобразование float->double (SPDP) 1 такт. Можно в параллель делать две MPYDP и две ADDDP.

 

Да, и для перемножения double*double dsplib, как и ни какой другой lib, не нужен. Если речь именно про 67хх. Сам компилер генерит MPYDP на это перемножение. Другое дело - если деление понадобится (или корень), да еще и в цикле. Тогда советую соорудить инлайн-функцию, работающую через интринсики _rsqrtdp и _rcpdp с дальнейшим Ньютоном-Рафсоном.

Share this post


Link to post
Share on other sites
Э-э, как раз можно либо float*float, либо double*double. И нельзя float*double без предварительного преобразования float->double. Время выполнения MPYDP (перемножение double*double) 9 delay-слотов при занятости юнита на 4 такта. Время выполнения сложения - ADDDP - 6 delay-слотов при занятости юнита на 2 такта. Преобразование float->double (SPDP) 1 такт. Можно в параллель делать две MPYDP и две ADDDP.

 

Да, и для перемножения double*double dsplib, как и ни какой другой lib, не нужен. Если речь именно про 67хх. Сам компилер генерит MPYDP на это перемножение. Другое дело - если деление понадобится (или корень), да еще и в цикле. Тогда советую соорудить инлайн-функцию, работающую через интринсики _rsqrtdp и _rcpdp с дальнейшим Ньютоном-Рафсоном.

Выдержка из datasheet TMS320C6727, TMS320C6726, TMS320C6722 Floating-Point Digital Signal Processors > таблица New Floating-Point Instructions for C67x+ CPU :

 

1. (Instruction)MPYSPDP | (Operation)SP x DP -> DP | (Improves)Faster than MPYDP. Improves high Q biquads (bass management) and FFT.

 

2. (Instruction)MPYSP2DP | (Operation)SP x SP -> DP | (Improves)Faster than MPYDP. Improves Long FIRs (EQ).

 

Так что получается float*double все-таки можно. А утверждение "MPYSPDP быстрее MPYDP" говорит о том, что преобразования float в double не происходит.

 

Мне же нужен был DP x DP, вот Я и решил, что фраза "... family of high- performance 32-/64-bit floating-point digital signal processors." подтвержает возможность перемножения максимум SP x DP.

Теперь понял что поспешил с выводами, покапаюсь тщательней в доках - посмотрю команду MPYDP.

 

И еще - не подскажете какая версия Code Composer Studio необходима для работы с TMS320C672x ?

Share this post


Link to post
Share on other sites
А Freescale не рассматривали?

Например MPC5200B. 400MHz, double precision FPU и прочее. Не DSP, но всё же PowerPC, да и энергопотребление вообще скромное.

Я лично с ним дела не имел, но когда-то бегло просмотривал документацию. На мой взгляд очень достойный чип. Интересно ваше мнение.

Мне по идее DSP то и не нужен. Просто из беглого просмотра информации в сети следовало что распространены DSP процессоры с 64-разрядным FPU. Основные критерии выбора для меня - это возможность работы с 64-разрядной floating-point арифметикой и желательно расширенные возможности по вводу-выводу (DMA, высокоскоростные интерфейсы ввода-вывода типа LVDS, HyperTransport и т.д.). RM7000C (PMC-Sierra) тоже неDSP, но в нем напрягают ресурсы ввода-вывода.

 

Спасибо за наводку. Буду рыть и в этом направлении. Резолюцию приведу после.

Share this post


Link to post
Share on other sites

А Freescale не рассматривали?

Например MPC5200B. 400MHz, double precision FPU и прочее. Не DSP, но всё же PowerPC, да и энергопотребление вообще скромное.

Я лично с ним дела не имел, но когда-то бегло просмотривал документацию. На мой взгляд очень достойный чип. Интересно ваше мнение.

Мне по идее DSP то и не нужен. Просто из беглого просмотра информации в сети следовало что распространены DSP процессоры с 64-разрядным FPU. Основные критерии выбора для меня - это возможность работы с 64-разрядной floating-point арифметикой и желательно расширенные возможности по вводу-выводу (DMA, высокоскоростные интерфейсы ввода-вывода типа LVDS, HyperTransport и т.д.). RM7000C (PMC-Sierra) тоже неDSP, но в нем напрягают ресурсы ввода-вывода.

 

Спасибо за наводку. Буду рыть и в этом направлении. Резолюцию приведу после.

 

Toshiba TX4939 - ядро MIPS, 64 разряда

Share this post


Link to post
Share on other sites
Выдержка из datasheet TMS320C6727, TMS320C6726, TMS320C6722 Floating-Point Digital Signal Processors > таблица New Floating-Point Instructions for C67x+ CPU :

 

1. (Instruction)MPYSPDP | (Operation)SP x DP -> DP | (Improves)Faster than MPYDP. Improves high Q biquads (bass management) and FFT.

 

2. (Instruction)MPYSP2DP | (Operation)SP x SP -> DP | (Improves)Faster than MPYDP. Improves Long FIRs (EQ).

 

Так что получается float*double все-таки можно. А утверждение "MPYSPDP быстрее MPYDP" говорит о том, что преобразования float в double не происходит.

 

Мне же нужен был DP x DP, вот Я и решил, что фраза "... family of high- performance 32-/64-bit floating-point digital signal processors." подтвержает возможность перемножения максимум SP x DP.

Теперь понял что поспешил с выводами, покапаюсь тщательней в доках - посмотрю команду MPYDP.

 

И еще - не подскажете какая версия Code Composer Studio необходима для работы с TMS320C672x ?

 

Это новые инструкции, введенные в ядро "C67+". Я же говорил про C67. Там не было SP*DP.

 

Code Composer - 3.1, с установленным апдейтом для C672x. Все это есть на фтп.

Share this post


Link to post
Share on other sites
SM, вроде бы CCS 3.2beta имеет улучшенную поддержку C64+ и C67+

по кр.мере так заявлено в release_note

 

PS: На фтп так же имеется

Да, в 3.2 наблюдается заточенность на "плюсовые" камни. В частности 64+ представлен широко. А вот 67+ что-то не видно явно. Может из-за того, что его "плюсовость" не такая уж и "плюсовая"...

 

[add]: Заглянул в релиз ноутз версии 3.2...

This release focuses on support for C64x+ based devices only.
...

This release does not support legacy C2xx, C54x & C6x (62x, 64x, 67x) device configurations.

Это и в Beta, и в релизе.

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

Share this post


Link to post
Share on other sites
Это и в Beta, и в релизе.

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

Не верно. В бете все камни полностью. А вот в релизе похоже что нет, но я релиз не брал, не надо мне 64-е

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