Jump to content

    

Cortex-M7 кол-во циклов на инструкцию

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

 

А есть ли какой-нить инструмент, или хотя бы таблица по теме? Понимаю, что там конвейер со всеми делами, но как-то же нужно в этом всем ориентироваться?

 

Например у DSP56300 можно скормить ассемблеру опцию и он в листинге дает кол-во циклов отдельной колонкой (учитывая конвееризацию и показывая возникающие простои конвейера).

Share this post


Link to post
Share on other sites

В TechRefMan-е на M7 раздела "Instruction Timing" нет, но есть в DDI0337E (для М3) и фраза "Table 18-1 shows the Thumb-2 subset supported in the ARMv7-M architecture." обнадёживает. В общем, гл. 18.

Edited by Obam

Share this post


Link to post
Share on other sites
А есть ли какой-нить инструмент, или хотя бы таблица по теме? Понимаю, что там конвейер со всеми делами, но как-то же нужно в этом всем ориентироваться?

Wiki:

Key features of the Cortex-M7 core are:

  • ARMv7E-M architecture.
  • 6-stage pipeline with branch speculation.
  • Instruction sets:

    • Thumb-1 (entire).
    • Thumb-2 (entire).
    • 32-bit hardware integer multiply with 32-bit or 64-bit result, signed or unsigned, add or subtract after the multiply.
    • 32-bit hardware integer divide (2-12 cycles).
    • Saturation arithmetic support.
    • DSP extension: Single cycle 16/32-bit MAC, single cycle dual 16-bit MAC, 8/16-bit SIMD arithmetic.
  • 1 to 240 interrupts, plus NMI.
  • 12 cycle interrupt latency.
  • Integrated sleep modes.
Edited by =SSN=

Share this post


Link to post
Share on other sites
но есть в DDI0337E (для М3) и фраза "Table 18-1 shows the Thumb-2 subset supported in the ARMv7-M architecture

Так для М4 на сайте АРМ были тоже, но М7 по идее несколько иной "зверь".

 

Это очень уж лаконично :)

 

Похоже придется смотреть через DWT на реальном процессоре, неудобно однако...

Share this post


Link to post
Share on other sites
Похоже придется смотреть через DWT на реальном процессоре, неудобно однако...

...если этот DWT в реальном процессоре есть :rolleyes:

Share this post


Link to post
Share on other sites
Так для М4 на сайте АРМ были тоже, но М7 по идее несколько иной "зверь".

В TRM на M4 тоже нет таймингов

Ну сами уж "supported in the ARMv7-M architecture" подчеркните (:

DDI0403E.b применИм к M7? Всё…

 

Не знаю, пользуетесь ли IAR-ом, там есть

post-83663-1493377162_thumb.png

Share this post


Link to post
Share on other sites
Ну сами уж "supported in the ARMv7-M architecture" подчеркните (:

DDI0403E.b применИм к M7? Всё…

И что?

Открываем ARM Cortex-M4 Technical Reference Manual, читаем "The DWT, if present, contains counters for:".

May be present, or may be don't. Применимо к M7?

Всё.... :laughing:

Share this post


Link to post
Share on other sites
...если этот DWT в реальном процессоре есть :rolleyes:

В том, который могу попытать есть :)

 

В TRM на M4 тоже нет таймингов

Я ж писал, что не в TRM, а не сайте АРМ - вот http://infocenter.arm.com/help/index.jsp?t...b/CHDIJAFG.html :)

 

Ну сами уж "supported in the ARMv7-M architecture" подчеркните (:

DDI0403E.b применИм к M7? Всё…

Как по мне, то эта фраза не гарантирует, что тайминги одинаковые. Да и не понятно какие инструкции в М7 могут быть выполнены параллельно.

 

Не знаю, пользуетесь ли IAR-ом, там есть

Не, у меня все инструменты бесплатные :) - MS VS Code + GCC + GDB + OpenOCD, но доступ к DWT получить не должно быть проблемой.

Edited by Шаманъ

Share this post


Link to post
Share on other sites
Я ж писал, что не в TRM, а не сайте АРМ - вот http://infocenter.arm.com/help/index.jsp?t...b/CHDIJAFG.html :)

Поправка: действительно, в DDI0439B есть только про LDR\STR и "This section describes how best to pair instructions to achieve more reductions in timing." (: Эт раз.

Два: в DDI0337E (для M3) глава про тайминги есть, а в DDI0337H уже такой подробной нет, аналогично DDI0439B (п.3.3 Instruction set summary)

 

Процы сложнее - дока кУцее и кУцее…

 

Как по мне, то эта фраза не гарантирует, что тайминги одинаковые. Да и не понятно какие инструкции в М7 могут быть выполнены параллельно.

 

Ну те что "Parallel arithmetic"

 

Не, у меня все инструменты бесплатные :)

Я тоже не внук рокфеллера…

 

PS: заинтересовали. Качнул DDI0489D M7 TRM r1p1 - гениальный документ! Вот ВЕСЬ раздел

2.3 Instruction set summary

The processor implements the ARMv7-M instruction set and features provided by the

ARMv7E-M architecture profile. For more information about the ARMv7-M instructions, see

the ARM®v7-M Architecture Reference Manual. ФСЁ!

 

Так что, фраза гарантирует (;

Edited by Obam

Share this post


Link to post
Share on other sites
Похоже придется смотреть через DWT на реальном процессоре, неудобно однако...

Разрешите поинтересоваться, зачем? Я ещё могу понять, когда измеряется время выполнения участка кода, если уж очень сильно куда-то спешим и не успеваем. Но отдельные инструкции, Холмс? :laughing:

 

Как по мне, то эта фраза не гарантирует, что тайминги одинаковые. Да и не понятно какие инструкции в М7 могут быть выполнены параллельно.

Точно помню, что есть отличия между M3 и M4. Но там мелочь какая-то была, грубо говоря, 99% одинаково.

Share this post


Link to post
Share on other sites
Разрешите поинтересоваться, зачем? Я ещё могу понять, когда измеряется время выполнения участка кода, если уж очень сильно куда-то спешим и не успеваем. Но отдельные инструкции, Холмс? :laughing:

Вы не поняли. Если бы у меня такой инструмент, как в ассемблере DSP56300, то я бы позанимался оптимизацией просто используя его (там и отдельные инструкции и общее кол-во тактов видно). Была бы бумажка-табличка, то для начала заглянул бы в нее, а так остается DWT, но естественно не для отдельных инструкций - конечная цель оптимизация нескольких критических кусков выполняющих DSP обработку.

 

Сваял тестовый проект, через DWT все отлично видится в gdb. Вопрос наверное можно закрыть.

Share this post


Link to post
Share on other sites

По хорошему надо бы ввести в архитектуру банки регистров, как в MIPS...тогда бы переключение контекста в многозадачности свелось бы к простому переключению нужного банка...все остальное-игрулечки-бирюлечки

Share this post


Link to post
Share on other sites
По хорошему надо бы ввести в архитектуру банки регистров, как в MIPS...тогда бы переключение контекста в многозадачности свелось бы к простому переключению нужного банка

Банки регистров есть в классических ARM, например ARM7, ARM9.

Только это никак не помогает переключению задач, а наоборот - переключение гораздо сложнее.

Или Вы хотите количество банков по количеству задач? :beer:

Share this post


Link to post
Share on other sites

Народ, а есть ли какие-нить вменяемые benchmarks по части DSP фильтров/функций для Cortex-M7 на которые стоит ориентироваться? А то что-то везде одна реклама, как все хорошо, а хотелось бы конкретики типа столько-то тактов на 1tap FIR фильтра.

Share this post


Link to post
Share on other sites
В том, который могу попытать есть :)

Везёт Вам. У меня вот CM4, а в нём нету даже bitband :crying:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this