01.02.2014, 00:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nahimovv
|
Сообщение от tempora
|
Так в чём-таки разница?
|
В командах.
|
Очень интересно, можно уточнить, где именно она находится?
Ищу отличия, вариант 1: - "CMP R5,#+0"
- "CMP R6,#+0"
- "CMP R7,#+0"
вариант 2: - BEQ.N ??main_1
- BEQ.N ??main_3
- BEQ.N ??main_5
вариант 3: - SUBS R5,R5,#+1
- SUBS R6,R6,#+1
- SUBS R7,R7,#+1
вариант 4: - B.N ??main_0
- B.N ??main_2
- B.N ??main_4
Хотите сказать, что инструкции в группах исполняются за разное время?
Сообщение от nahimovv
|
А вообще, любой МК работает лучше с той разрядностю данных, для которой он и предназначается, в случае STM32 это 32 бита.
|
На уровне "вообще" - согласен. А вот в частностях пока ясность не достигнута.
__________________
There's always more than one way to skin a cat.
|
|
|
|
01.02.2014, 00:54
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
А UXTB, UXTH и ---- куда делось?
|
|
|
|
01.02.2014, 12:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
А вот в частностях пока ясность не достигнута.
|
Да просто логику включить.
Не умеют МК делать математические операции с половиной или четвертью регистра...
|
|
|
|
01.02.2014, 20:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nahimovv
|
А UXTB, UXTH и ---- куда делось?
|
Замечательно. Итак, одинаковые инструкции исключаем из рассмотрения и с оставшимися UXT* разберёмся.
Выходит, что в них каким-то образом заключается ответ на вопрос, появившийся в начале этой ветки темы:
Сообщение от tempora
|
Речь шла о пересылке по шине, какие команды в связи с этим нужно посмотреть?
Пересылка данных выравненных на границу, кратную ширине шины, будет одинаково эффективна для байта, слова и полуслова
|
Сообщение от nahimovv
|
Неужели? Накидайте простой пример, тот же цикл, и посмотрите.
|
Согласно совету, я накидал три цикла с обращениями к трём массивам (байтов, int-ов и битовых полей), но там команды доступа к элементам массивов оказались одинаковыми.
Пришлось повторить свой вопрос:
Сообщение от tempora
|
... смотрим...
Получилось такое сравнение: ...
Что здесь такое разное в пересылке элементов массива? На что нужно было обращать внимание?
|
Ответ был дан в виде куска кода, вообще без доступа к памяти - ведь UXTB, UXTH лишь приведение к слову, не так ли?
Так всё-таки, если Вы утверждаете, что выравнивание байтовых, словных и полусловных переменных на 4-х байтовую границу не уравнивает эффективность доступа к таким переменным, то поясните, почему это так?
Сообщение от omercury
|
Да просто логику включить.
|
А Вы, повидимому, уже разобрались, куда именно её нужно включать в этом бранче обсуждения? Тогда может быть Вы дадите ответ на вопрос о разнице в эффективности доступа к выравненным переменным?
__________________
There's always more than one way to skin a cat.
|
|
|
|
01.02.2014, 21:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
Тогда может быть Вы дадите ответ на вопрос о разнице в эффективности доступа к выравненным переменным?
|
Легко.
МК STM32 оперирует словом шириной в 32 бита. Ни больше, ни меньше.
Для того, чтобы выполнить какие либо действия с переменной шириной менее этого значения, её необходимо переместить в свободную ячейку памяти либо регистр. Далее её необходимо выровнять, для чего служат операторы циклического сдвига, влево или вправо, не суть. Ядро построено таким образом, что осуществляет операцию сдвига на произвольное количество бит за один такт. Это выравнивание. Далее осуществляется действие над переменной, обратное выравнивание и перенос её в исходное хранилище.
Здесь мы и получаем различие в выполнении команды.
Ядро STM32 может выполнять некоторые операции с данными непосредственно в ячейке памяти, а некоторые только в РОН. Отсюда и разница во времени выполнения Ваших СИшных инструкций.
Адмирал явно в курсе этих различий, оттого и позволяет себе некоторые вольности с интерпретацией этих тонкостей, что, по большому счёту среди "посвящённых" простительно...
P.S.
Неважно, насколько выровнена переменная по отношению к байту - её выравнивание происходит за одинаковое время для кратного и некратного байту значения. Главное, чтоб оно было кратно единице, которой оперирует ядро, а это 32 бита или 4 байта. Для максимально возможной скорости выполнения кода, Вам желательно придерживаться этой ширины, но тут возникает другая засада - за переполнением чисел шириной меньше 32-х бит надо следить вручную... Вот и выбирайте - либо всё "летает", но Вы самостоятельно следите за типом переменных, либо отдаёте это на откуп компилятору, но миритесь с полуторакратной "тормознутостью" всего кода...
|
|
|
|
01.02.2014, 22:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от omercury
|
Неважно, насколько выровнена переменная по отношению к байту
|
Вообще-то, речь шла о выравнивании на границу именно слова, а не байта.
Сообщение от omercury
|
её необходимо переместить в свободную ячейку памяти либо регистр. Далее её необходимо выровнять ...
|
И таки речь шла о данных, уже выравненных на словную границу.
Сообщение от omercury
|
Для того, чтобы выполнить какие либо действия с переменной шириной менее этого значения,
|
Речь шла не об обработке данных, а только о пересылке их:
Сообщение от nahimovv
|
Сообщение от tempora
|
... Пересылка данных выравненных на границу, кратную ширине шины, будет одинаково эффективна для байта, слова и полуслова.
|
Неужели? Накидайте простой пример, тот же цикл, и посмотрите.
|
О том, что обработка переменных разного размера может занимать разное время, я, слава богу, знаю и нигде не писал противоположного. Сейчас же хочу уточнить, верно ли сложившееся из документации представление о равенстве времён пересылки.
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 01.02.2014 в 22:11.
|
|
|
|
01.02.2014, 23:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
И таки речь шла о данных, уже выравненных на словную границу.
|
Откуда Вы об этом узнали?
От Прокруста?
Сообщение от tempora
|
Речь шла не об обработке данных, а только о пересылке их:
|
Теоретически, они могут находиться в нескольких ячейках
Сообщение от tempora
|
О том, что обработка переменных разного размера может занимать разное время, я, слава богу, знаю
|
Ну мало ли...
Выходные.
|
|
|
|
01.02.2014, 23:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от omercury
|
Откуда Вы об этом узнали?
|
Если Вы вдруг не заметили (выходные же), я автор этого условия, поэтому мне узнавать не потребовалось. Повторю ссылку:
Сообщение от nahimovv
|
Сообщение от tempora
|
... Пересылка данных выравненных на границу, кратную ширине шины, будет одинаково эффективна для байта, слова и полуслова.
|
Неужели? Накидайте простой пример, тот же цикл, и посмотрите.
|
Сообщение от omercury
|
Теоретически, они могут находиться в нескольких ячейках
|
При условии выравнивания на границу слова, это также не повлияет - для данных не превышающих одного слова - одно обращение к памяти, для данных до двух слов размером - два обращения и так далее.
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 01.02.2014 в 23:27.
|
|
|
|
02.02.2014, 00:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
При условии выравнивания на границу слова
|
Вы их лично выравнивали?
Сообщение от tempora
|
для данных не превышающих одного слова - одно обращение к памяти, для данных до двух слов размером - два обращения и так далее.
|
А это как повезёт...
http://infocenter.arm.com/help/index.../CHDDIGAC.html
|
|
|
|
02.02.2014, 03:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от omercury
|
Вы их лично выравнивали?
|
Что значит "лично"? Если это значит "вручную", то нет конечно, а если - "специальной инструкцией", то есть варианты: - для битовых полей это обычно выполняется автоматически, т.к. их базовый тип имеет именно такое выравнивание,
- для более сложных ситуаций существуют директивы выравнивания #pragma data_alignment, #pragma pack и модификатор __packed.
Сообщение от omercury
|
А это как повезёт...
|
За ссылку спасибо. Я так понимаю, Вы на одну строчку промахнулись (выходные же) и на самом деле хотели указать на "3.3.2 Load/store timings", так? Я там никаких " как повезёт" не нашёл.
Правда, я уже тоже успел вкусить от выходных, поэтому завтра посмотрю ещё раз (на свежую голову), но пока вижу только пенальтиз от обращения к невыравненным на границу слова данным:
Цитата:
|
Unaligned word or halfword loads or stores add penalty cycles. A byte aligned halfword load or store adds one extra cycle to perform the operation as two bytes. A halfword aligned word load or store adds one extra cycle to perform the operation as two halfwords.
A byte-aligned word load or store adds two extra cycles to perform the operation as a byte, a halfword, and a byte.
|
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 02.02.2014 в 03:18.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:50.
|
|