Цифры Dhrystone и Whetstone для STM32F103

монсонт
Вторник 5 мая 2015 г. 10:46 утра
Цитрицы Dhrystone и Whetstone на STM32F103XX

На выходных я получил тесты Dhrystone и Whetstone, чтобы запустить как на 16 МГц Atmega2560 (на Atmega328p), так и на моем клоне кленового клона Baite Electronics.


Сначала целочисленная математика Dhrystone:

ATMEGA2560 16 МГц

Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 300000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунд за один пробег через Дриристон: 78.67
Дристоны в секунду: 12711.22
Vax mips rating = 7.23


STM32F103 72 МГц

Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 300000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 11.66
Дристоны в секунду: 85762.68
Vax mips grating = 48.81

STM32F103 выполняет дристоны примерно в 6.75 раз превышает скорость ATMEGA2560. Это в основном будет добывать более быстрые часы плюс тот факт, что 16 -битный арифметику быстрее на 32 -битной машине, чем 8 -битный.


Традиционный код Dhrystone был изменен, чтобы использовать сериал Arduino's Serial.print () функция, а не printf

Код будет загружен отсюда как zip -файл http: // www.Саанлима.com/скачать/dhry21a.молния

Whetstone - классический эталон с плавающей запятой

Тестовый код Whetstone, адаптированный для Arduino Томасом Киршнером https: // Разработчик.Mbed.org/users/kirchn ... peed_test/

При запуске на стандартном Arduino 16 МГц Duemillenove Whetstone дал следующий результат

Запуск эталона Whetstone...
Петли: 1000 итераций: 1 Продолжительность: 81740 миллисек.
C преобразованный двойной точность Whetstones: 1.22 MIPS

На плате STM32F103 с часами 72 МГц

Запуск эталона Whetstone...
Петли: 1000 итераций: 1 Продолжительность: 19691 Millisec.
C конвертировали двойные точность WHETSTONES: 5.08 MIPS

Таким образом, STM32F103, по -видимому, работает в Whetstone примерно в четыре раза выше скорости Arduino.

Dhrystone и Whetstone являются классическими критериями, но обычно не репрезентативными для реальных применений. Возьмите цифры только для целей руководства.



Кен

Мадиас
Вторник 5 мая 2015 г. 10:58 утра
Другими словами:
Избегайте плавающих точек на каждой стоимости на обеих платформах, поскольку вы переключаетесь на STM32F4XXX ;)
НО:
Эти критерии были бы интересны для всех FPU-устройств (Cortex M4, как и линия STM32F4), я знаю это, потому что на TIVA-TM4C-123 были некоторые проблемы в начале поддержки Energia (FPU не был включен в соответствии с по умолчанию. или что -то).

Rogerclark
Вторник 5 мая 2015 12:30
Завтра попробую на своем доске Discovery F407 на 168 МГц и опубликую результаты, предполагая, что никто не победит меня

Рик Кимбалл
Вторник 5 мая 2015 г., 14:50
Мадиас написал:Другими словами:
Избегайте плавающих точек на каждой стоимости на обеих платформах, поскольку вы переключаетесь на STM32F4XXX ;)

монсонт
Вторник 5 мая 2015 г. 15:01
Rogerclark написал:Завтра попробую на своем доске Discovery F407 на 168 МГц и опубликую результаты, предполагая, что никто не победит меня

Rogerclark
Вторник 5 мая 2015 г. 22:19
Поддержка F4 основана на старой копии Libmaple и возвращается в Arduino 0022 API

Однако это в основном работает.

Я знаю, что GPIO работает, и если вы посмотрите в разделе STM32F4 этого сайта, кто -то продолжает использование своей платы Discovery STM32F407

К сожалению, у меня не было времени, чтобы внести какие -либо изменения / реструктуризацию, которую я сделал в папке F103, в папке F4 - так как это, вероятно, одна или два дня.

Но, по крайней мере, это то, что можно сыграть в данный момент

Мадиас
Вторник 5 мая 2015 г., 22:30
MEP MEP, есть ли доска Nucleo F4, чтобы предпочесть? (У меня хорошие сделки с досками Nucleo...И я хочу поиграть с i2s, и вкус меда (плавающие очки) был бы действительно интересным для моих проектов)

Rogerclark
Вторник 5 мая 2015 г., 23:30
Матиас

У меня есть STM Discovery F407GVT, но я думаю, что доски Nucleo, вероятно, лучше, чем Discovery, поскольку у STLINK на них есть (я предполагаю) виртуальный сериал, а также просто Stlink, который на досках Discovery

По несвязанному предмету..

На самом деле, мне интересно, есть ли у кого -нибудь прошивка Nucleo в качестве файла bin, так как это, вероятно, можно было вспыхнуть на обнаружение. Но из того, что я прочитал, STM не выпускает прошивку для этого, за исключением зашифрованного двоичного файла с помощью их специальной программы загрузчика, что жаль, и на самом деле бессмысленно..

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

Мадиас
Ср. 06 мая 2015 г. 8:47 утра
К сожалению, прошивка ST Link не «бесплатная» и зашифрована в *.DLL's.
http: // www.Тейлоркиллиан.com/2013/01/re ... -от.HTML

Есть две доски Nucleo с Cortex M4:
STM32F401RET6 и STM32F411RET6
Я думаю, я немного подожду, потому что не хватает новой игрушки...

Rogerclark
Ср 6 мая 2015 г. 9:31
Матиас

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

Я согласен с F4, есть так много других вещей, нет смысла покупать его на данный момент

Я попробовал свое открытие F407 сегодня, и код STM32F4 далеко позади F103

Я заметил ошибку в порту, где MCU была установлена ​​в Cortex-M3 вместо Cortex-M4, а также отсутствовал перечисление номера PIN-кода, поэтому я исправил это.
Кроме того, я думаю, что на F4 код компиляется в USB -порту OTG на выводах для сериала 1 HW, так как HW Serial 1 не работает, и составлен OTG LIB, который нуждается в этом порте.

С F4 это трудное решение о том, как довести его до уровня F103, я думаю, у меня есть 3 основных варианта

1. Измените существующий код F4, как я сделал с F103
2. Дублировать код F103 и копировать по специфическим частям F4
3. Используйте что -нибудь другое полностью, e.глин. Другое ядро.

Я снова посмотрел на репо Авика и собрал тестовую программу для платы F373 (которая является единственной, которую он поддерживает), но даже основы не компилируются, E.глин. DigitalWrite (PA0,!DigitalRead (PA0)); не компилируется. DigitalWrite определено, но типы аргументов не совпадают с типами данных Arduino.
Также сериал не определен, только Serial1 - поэтому, даже если мы использовали код Aviks, я думаю, что необходимо будет проделать разумное количество работы, чтобы сделать все примеры компиляция, как и с Libmaple


КСТАТИ. Я пытался скомпилировать тест Dhrystone на F4, но ему не хватает нагрузки функций, а также нагрузку типа DEF, и его бессмысленное простое исправление репо, чтобы запустить тест Dhrysone. Лучше сделать полный порт, когда будет достаточно интереса

Кенджуцу
Ср 10 июня 2015 г., 16:35
Просто ради интереса, вот некоторые Уэтстоун контрольные результаты для моего Nucleo F411RE и Синяя таблетка доска:
Serial.println(_currentSetting);

victor_pv
Ср 10 июня 2015 г., 18:21
Читать ли я это правильно, что синяя таблетка с STM32DUINO превзойдет 411 с использованием MBBE в двойной препарате?
Даже с GCC4MBED 411 мало впереди. Те, кто использует FPU?

Rogerclark
Ср 10 июня 2015 г., 21:59
Флаги компиляции для F1 могут отсутствовать флаги FPU.

При этом я вообще не мог получить тесты для компиляции на F4, так как в нем отсутствовала нагрузка функций, которые требуется тестовый эскиз

Кенджуцу
Чт 11 июня 2015 12:51
Вот флаги компилятора для F411 и F103 под GCC4MED:

F411 Serial.print(78, BIN) gives "1001110" Serial.print(78, OCT) gives "116" Serial.print(78, DEC) gives "78" Serial.print(78, HEX) gives "4E" Serial.println(1.23456, 0) gives "1" Serial.println(1.23456, 2) gives "1.23" Serial.println(1.23456, 4) gives "1.2346" You can pass flash-memory based strings to Serial.print() by wrapping them with F(). For example : Serial.print(F(“Hello World”))

Рик Кимбалл
Чт 11 июня 2015 г. 13:30
victor_pv написал:Читать ли я это правильно, что синяя таблетка с STM32DUINO превзойдет 411 с использованием MBBE в двойной препарате?
Даже с GCC4MBED 411 мало впереди. Те, кто использует FPU?

Zoomx
Чт 11 июня 2015 г. 14:27
Оставляя всю строку во вспышке и сокращая пробеги до 30000, я смог запустить эскиз Dhry21 на arduino uno.
Я использовал тот же набросок на Stellaris Launchpad LM4F120 и Energia IDE 15 с использованием 300000 прогонов
#include #include HardWire HWire(1, I2C_FAST_MODE); #define debugPin 33 void setup() { pinMode(debugPin, OUTPUT); HWire.begin(); Serial.begin(9600); } void loop() { byte status; HWire.requestFrom (0x10, 12); while (HWire.available()) { status = HWire.read(); Serial << (status<0x10?"0":"") << _HEX(status) << " "; } Serial << endl; digitalWrite(debugPin, !digitalRead(debugPin)); delay(500); }

victor_pv
Чт 11 июня 2015 г. 14:39
Рик Кимбалл написал:victor_pv написал:Читать ли я это правильно, что синяя таблетка с STM32DUINO превзойдет 411 с использованием MBBE в двойной препарате?
Даже с GCC4MBED 411 мало впереди. Те, кто использует FPU?

Zoomx
Чт 11 июня 2015 г. 14:47
Я считаю, что на этот тест влияет компилятор, поскольку в Ардуино вы можете компилировать с оптимизацией по размеру или для скорости. Я полагаю, это то же самое с другими компиляторами. Для Arduino я использовал 1.6.7 ядро ​​в 1.6.4 IDE

victor_pv
Чт 11 июня 2015 г. 15:31
Zoomx написал:Я считаю, что на этот тест влияет компилятор, поскольку в Ардуино вы можете компилировать с оптимизацией по размеру или для скорости. Я полагаю, это то же самое с другими компиляторами. Для Arduino я использовал 1.6.7 ядро ​​в 1.6.4 IDE

Mrburnette
Чт 11 июня 2015 г., 20:28
Zoomx написал:Я считаю, что на этот тест влияет компилятор, поскольку в Ардуино вы можете компилировать с оптимизацией по размеру или для скорости. Я полагаю, это то же самое с другими компиляторами. Для Arduino я использовал 1.6.7 ядро ​​в 1.6.4 IDE

Кенджуцу
Пт 12 июня 2015 г. 13:49
Я добавил -O2 вариант для обоих STM32duino и gcc4mbed, и управлял Whetstone Clickmark снова для Синяя таблетка:

gcc4mbed: //400kHz HardWire HWire(1, I2C_FAST_MODE); //100kHz HardWire HWire(1);

victor_pv
Пт 12 июня 2015 г. 14:53
Кенджуцу писал:Я добавил -O2 вариант для обоих STM32duino и gcc4mbed, и управлял Whetstone Clickmark снова для Синяя таблетка:

gcc4mbed: //400kHz HardWire HWire(1, I2C_FAST_MODE); //100kHz HardWire HWire(1);

Кенджуцу
Пт 12 июня 2015 г. 16:59
Я заменил -O2 вариант с -ОС оба STM32duino и gcc4mbed, и управлял Уэтстоун Снова следу Синяя таблетка:
gcc4mbed: I've noticed that pure Blink example is almost 20 kB of binary

монсонт
Пт 24 июля 2015 г. 12:09
Всем привет

Я только что получил тест Dhrystone Integer, чтобы запустить на мою доску STM32F7 "Bob". Вот предварительные и не полностью подтвержденные результаты


STM32F746VGT6 216 МГц

Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 300000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 3.33
Дристоны в секунду: 300000
Vax mips rating = 170.74

Вы можете вспомнить, что STM32F103 был следующим образом

STM32F103 72 МГц

Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 300000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 11.66
Дристоны в секунду: 85762.68
Vax mips grating = 48.81


Таким образом, быстрая проверка реальности состоит в том, чтобы сравнить относительные тактовые частоты и относительное количество VAX MIPS

216/72 = 3

170.74/48.81 = 3.49

Таким образом, это показывает, что увеличение производительности - это больше, чем просто такточное масштабирование, так как Cortex M7 улучшил трубопроводы и дополнительные инструкции, чтобы поддержать его.

Я использую бесплатную версию 32K Code Limited компилятора Keil Arm-MDK на уровне оптимизации 3 (-O3). Оптимизация, однако, по -видимому, не изменила общее время.

В большой схеме вещей - у нас есть заготовка доски в 24 раза быстрее, чем Arduino :)

Rogerclark
Солнце 30 августа 2015 г. 11:06
GD32F103C перегорел до 120 МГц

Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 300000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунды для одного пробега через Дхристон: 8.80
Дристоны в секунду: 113666.59
Vax mips rating = 64.69

Ахулл
Солнце 30 августа 2015 г. 11:30
Rogerclark написал:GD32F103C перегорел до 120 МГц

Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 300000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунды для одного пробега через Дхристон: 8.80
Дристоны в секунду: 113666.59
Vax mips rating = 64.69

Rogerclark
Солнце 30 августа 2015 12:29
Привет, Энди,

Все, что я сделал, это изменить мастер -часы на 10 x частоту кристаллов (поскольку плата использует кристалл 12 МГц)

Я также установил USB -часовой разделитель на 2.5 так, чтобы USB работал на 48 МГц (но мне еще не удалось заставить USB работать в эскизе - хотя он работает нормально в загрузке, и загрузка кажется быстрее, чем на STM32, но я «я еще не сделал сравнения времени загрузки).

Мне все еще нужно пройти через кодовую базу и найти все ссылки на 72000000 и 36000000 и заменить их на 120000000 и 60000000 и т. Д.

Но я подозреваю, что это не будет иметь никакого значения для этих цифр скорости.

GD32 не должен работать на 120 МГц, но я подозреваю, что первоначальное намерение было для 120. В противном случае его бессмысленное имеет вариант USB -разделителя 2.5

Martinayotte
Солнце 30 августа 2015 13:49
Rogerclark написал: Я также установил USB -часовой разделитель на 2.5 так, чтобы USB работал на 48 МГц (но мне еще не удалось заставить USB работать в эскизе - хотя он работает нормально в загрузке, и загрузка кажется быстрее, чем на STM32, но я «я еще не сделал сравнения времени загрузки).

Rogerclark
Солнце 30 августа 2015 г., 21:38
У кого -нибудь есть даристоны в секунду: фигура для подростков?

Я не могу вспомнить, если сухой камень будет только целым числом, и, следовательно, как это будет складываться против подростков, поскольку он имеет коконсор по математике в своем ядре M4.

victor_pv
Пн 31 августа 2015 г., 5:00 утра
Rogerclark написал:У кого -нибудь есть даристоны в секунду: фигура для подростков?

Я не могу вспомнить, если сухой камень будет только целым числом, и, следовательно, как это будет складываться против подростков, поскольку он имеет коконсор по математике в своем ядре M4.

Rogerclark
Пн 31 августа 2015 г., 5:41
Виктор,

Спасибо.

Мне было просто любопытно.

Я посмотрел на сайт Teensy, но я ничего не увидел о запуске теста Arduino Dhrystone. Постановление о производительности была в основном сосредоточена на ускорении ЖК -дисплея.

Martinayotte
Пн 31 августа 2015 г., 13:56
У меня есть Teensy3.1, так что, возможно, я должен попробовать ...
Опять же, «время» отсутствует, поэтому я не знаю, когда.

Rogerclark
Пн 31 августа 2015 г., 21:20
Мартин,

Не беспокойся..

Мне было просто любопытно.

Martinayotte
Вторник 01 сентября 2015 3:37
Я пытался скомпилировать дрийстоун.Zip предоставил несколько месяцев назад, но получил ошибки. Я не хочу тратить много времени на это ...
Не могли бы вы предоставить ваш эскиз ?
Я также запустим его на F4 ... : D

Rogerclark
Вторник 01 сентября 2015 3:55 утра
Привет, Мартин,

Это эскиз, который я скачал по ссылке в этой теме, я думаю.

Я выкопаю это прикрепите.

КСТАТИ. Не тратьте на это время... Если вы не хотите сравнить на F4.

Martinayotte
Вторник 01 сентября 2015 г., 21:14
Я наконец -то получил его для моего NetDuino F4 и STM32F4Stamp:

Христовый тест, версия 2.1 (язык: c
Запускается исполнение, 3000000 проходит через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 4.24
Дристоны в секунду: 235837.88
Vax mips rating = 134.23

Rogerclark
Вторник 01 сентября 2015 г., 21:34
очень впечатляет

Martinayotte
Ср. 02 сентября 2015 г. 15:22
Я решил попробовать ESP8266, добавив wdtfeed () один раз, чтобы избежать сброса сторожевого пса во время петли.

Христовый тест, версия 2.1 (язык: c
Запускается исполнение, 3000000 проходит через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 10.83
Дристоны в секунду: 92364.89
Vax mips rating = 52.57

Rogerclark
Ср. 02 сентября 2015 г., 20:23
Спасибо, Мартин

Это звучит правильно для процессора 80 МГц

Rogerclark
Чт, 03 сентября 2015 г., 4:14
Хорошо,

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

Когда я изначально прошел тесты, на 108 МГц, значение перезагрузки Systick была неверной.

Теперь, надеюсь, у меня есть значение, и я перезапустил тот же тест, и на 72 МГц я вижу
Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 600000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунды для одного пробега через Дхристон: 8.84
Дристоны в секунду: 113166.53
Vax mips rating = 64.41
Мне пришлось поднять количество тестов до 60000, так как программа указала, что время для процесса было слишком коротким при 30000 пробежек.

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

Однако это намного быстрее, чем STM32 на одной таксовой частоте, поэтому я мог сделать ошибку в таймерах

120 МГц теперь дает эти цифры
Христовый тест, версия 2.1 (язык: c)
Запускается исполнение, 600000 пробегает через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 5.29
Дристоны в секунду: 188860.38
Vax mips rating = 107.49
И по моему секунду, тест занял чуть более 3 секунд, так что это кажется правильным.


Но теперь я беру их с щепоткой соли на случай, если я сделал что -то еще не так :-(

Редактировать.

Я снял видео, которое включало запуск тестов на уровне 72 МГц и 120 МГц на GD32, если кто -то хочет взглянуть и проверить или сказать мне, что я делаю неправильно ;-)

https: // www.YouTube.com/watch?V = LUX0S9SCLB4

Martinayotte
Сб 05 сентября 2015 14:21
Я провел тест Дхристона на моем подростке 3.1:

Христовый тест, версия 2.1 (язык: c
Запускается исполнение, 3000000 проходит через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 7.06
Дристоны в секунду: 141704.14
Vax mips grating = 80.65

Rogerclark
Сб 05 сентября 2015 г., 21:13
Спасибо, Мартин

Вы пробовали выбрать его разгоночный режим или обычный режим ?

Martinayotte
Сб 05 сентября 2015 г., 22:30
Это была дефолта "оптимизированная 96 МГц (сброс)".

Rogerclark
Сб 05 сентября 2015 22:54
Спасибо, Мартин

Это действительно интересно.

Я запускаю G32 @ 96 МГц и проведу сравнительный тест (я думаю, что я разместил скорости 72 МГц и 120 МГц, но 96 МГц - хорошая скорость для GD32, так как он поддерживает USB @ 96 МГц, используя 2 -х USB -Прескалер и его в пределах 108 МГц @ спецификация)

Редактировать.

Я только что управлял GD32 @ 96 МГц и получаю эти результаты
Христовый тест, версия 2.1 (язык: c)
Выполнение начинается, 2000000 проходит через Dhrystone

Исполнение заканчивается
Микросекунд для одного пробега через Дхристон: 6.62
Дристоны в секунду: 151005.64
Vax mips rating = 85.95
Примечание. Я сменил пробежки на 2000000 некоторое время назад, так как на 120 МГц тест на сухой камень не позволит вам пробежать только 300000 прогонов, поскольку он сообщает, что время для запуска слишком короткое, чтобы дать точный результат

В любом случае. Похоже, что для целочисленной производительности GD32, работающий хорошо в спецификации при 96 МГц, по крайней мере, на бумаге, быстрее, чем разгорный подростка.

Martinayotte
Солнце 06 сентября 2015 г. 1:56 утра
Для Teensy грустно, что эталона не так хорош ...
Да, мне пришлось изменить №_оф_Рунс на 3 миллиона на всех моих тестах, в противном случае он давал ошибку "слишком короткой".
По крайней мере, F405 дает хорошие результаты.
Я получу свой F746 на следующей неделе, я сделаю тот же тест, хотя @monsonite уже сделал это:
// Got the magic sequence -> reset, presumably into the bootloader. // Return address is wait_reset, but we must set the thumb bit. uintptr_t target = (uintptr_t)wait_reset | 0x1; asm volatile("mov r0, %[stack_top] \n\t" // Reset stack "mov sp, r0 \n\t" "mov r0, #1 \n\t" "mov r1, %[target_addr] \n\t" "mov r2, %[cpsr] \n\t" "push {r2} \n\t" // Fake xPSR "push {r1} \n\t" // PC target addr "push {r0} \n\t" // Fake LR "push {r0} \n\t" // Fake R12 "push {r0} \n\t" // Fake R3 "push {r0} \n\t" // Fake R2 "push {r0} \n\t" // Fake R1 "push {r0} \n\t" // Fake R0 "mov lr, %[exc_return] \n\t" "bx lr" : : [stack_top] "r" (STACK_TOP), [target_addr] "r" (target), [exc_return] "r" (EXC_RETURN), [cpsr] "r" (DEFAULT_CPSR) : "r0", "r1", "r2");

Rogerclark
Солнце 06, 2015 2:03
Мартин

Я согласен. Я не думаю, что это делает подряд справедливость, так как у него есть много хороших функций, которые у STM32F103 нет E.глин. DMA FIFO материал и т. Д

Но я вижу, что подростка начинает немного оставаться позади, если китайцы выявят приличную доску на 96 МГц GD32 (и у нас было более поддерживаемое ядро ;-) )

Стевех
Солнце 06 сентября 2015 г. 8:21 утра
Использование кода Dhrystone C, размещенного ранее здесь, с printf ().
STM32F415 на 168 МГц. IAR Компилятор. Библиотеки HAL STM32F4 (хотя у меня есть некоторые обертки для «проводки» API)

В двух тестовых случаях я вставил запятые в большие цифры, чтобы облегчить чтение.
Компилятор, даже без оптимизации, кажется, выбрасывает множество петлей и кода. Часто, потому что результаты не используются в последующем коде.

Мне пришлось немного увеличить количество итераций (!), чтобы он бежал в течение 2 секунд.
Кто-нибудь знает, как подготовить код, чтобы предотвратить этот сборщик кода компилятором? (кроме летучих, так как это мешает оптимизатору правильно использовать регистры).

Ниже параметры компилятора были: максимальный код скорости
Compiling 'Test' for 'Generic STM32F103C series' ld.exe: C:\Users\[USER]\AppData\Local\Temp\VMicroBuilds\Test\Arduino_STM32_genericSTM32F103C\Test.ino.elf section .text will not fit in region rom ld.exe: region rom overflowed by 35592 bytes libnosys.a(sbrk.o)*: In function _sbrk sbrk.c*: (.text._sbrk+0x30): warning: undefined reference to end collect2.exe*: error: ld returned 1 exit status Error compiling for board Generic STM32F103C series

Rogerclark
Солнце 06 сентября 2015 г. 9:28 утра
@stevech,

Эти значения VAX MIPS выглядят далеко до высокого. Кто -то опубликовал немного STM32F7 @ 200+MHZ, и это было всего несколько сотен MIP, а не миллионы MIPS

Я думаю, что в компиляции что -то идет не так

Martinayotte
Солнце 06 сентября 2015 г. 15:47
Да, эти цифры действительно выглядят странно ...

Стевех
Пн сентября 07, 2015 11:08
Просто компилятор выбросил большинство кода цикла, потому что переменные, которые изменялись в петлях, не используются/не хранятся вне цикла?
Я думаю, что Iar et al. (Может быть, не GCC) для такого рода обрезки кода.

Rogerclark
Пн, 07 сентября 2015 11:39
Если тест не выполнен с помощью GCC с использованием тех же настроек, это не полезный метод для сравнения скорости процессора.

Стевех
Рн. Сен. 07, 2015 11:55 вечера
Эти цифры выглядят лучше. Я ошибочно закодировал printf для результатов, чтобы использовать целое число, а не двойное.

Оптимизация: нет

Христовый тест, версия 2.1 (язык: c
MCU: STM32F415, System PLL Часы: 168 МГц
Исполнение начинается, 1 000 000 пробежек через Дхристон
Выполнение запускается 12 805 End 4 571 212 микросхемы
User_time = 4558 407 микросекунд
Микросекунд для одного пробега через Дхристон: 4.558407
Дристоны в секунду: 219 374.882497
Vax mips rating = 124.857645

Оптимизация: скорость
Христовый тест, версия 2.1 (язык: c
MCU: STM32F415, System PLL Часы: 168 МГц
Исполнение начинается, 1 000 000 пробежек через Дхристон
Выполнение запускается 12 802 конец 2 203 923 микросхемы
User_time = 2191,121 микросекунд
Микросекунды для одного пробега через Дхристон: 2.191121
Дристоны в секунду: 456 387.392572
Vax mips rating = 259.753781


Использование IAR, а не GCC. Что ж, инструменты являются частью уравнения, если мы не смотрим на тот же объектный код, различное оборудование. Но где этот конец?

Другой процессор, другой компилятор. Конечно.

Ну, такие тесты являются просто общим руководством.

Rogerclark
Вторник 08 сентября 2015 12:00
Ну, такие тесты являются просто общим руководством. Для GD32, а также F4 с использованием Arduino IDE I.E того же компилятора GCC и настройки, я думаю, это разумное сравнение.

Когда мы начинаем сравниваться с другими платформами, например. Teensy3.1, даже используя Arduino IDE, сравнение становится менее достоверным.

ESP8266 также отличается, потому что это даже не такая же основная технология I.E ESP8266 не имеет ядра руки - (но, тем не менее, мы, кажется, получаем относительно разумные цифры для ESP8266, работающих при 80 МГц, сравнивая с STM32 при 72 МГц)

Стевех
Вторник 08 сентября 2015 г. 12:08
MIPS за доллар сегодня потрясающие.

Числа, которые я опубликовал, удивили меня в этом с оптимизацией для скорости, результаты улучшились в два раза.

Mrburnette
Вторник 08 сентября 2015 12:24
Стевех написал:MIPS за доллар сегодня потрясающие.

Числа, которые я опубликовал, удивили меня в этом с оптимизацией для скорости, результаты улучшились в два раза.

Стевех
Вторник 08 сентября 2015 8:40
Mrburnette написал:Стевех написал:MIPS за доллар сегодня потрясающие.

Числа, которые я опубликовал, удивили меня в этом с оптимизацией для скорости, результаты улучшились в два раза.

Стюарт
Ср. 09 сентября 2015 1:29
К сожалению, оба эти критерии, конечно, несколько сломаны, и их сломанность, которая удваивает скорость из -за оптимизации, не очень удивленно. Дхристон был сломлен на очень очень долгое время.

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

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

Оптимизация - это всегда прикосновение с встроенной работой, так как я уверен, что большинство из вас хорошо знают. Есть много компромиссов по размеру, скорости, де говоря, и т. Д. ИМХО Это контроль для Ардуино, что контроля не существует, потому что иногда это может иметь большое значение, и необходимый - однако я подозреваю, что они слишком боятся неожиданных побочных эффектов.

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

Я всегда думал, что хорошее правило для встроенного развития заключается в том, что вам нужно достаточно хорошо понять свое оборудование, чтобы означать, что бенчмаркинг не говорит вам ничего нового в любом случае ;)

Стевех
Ср. 09 сентября 2015 г., 2:45
Дхристон... Я читал об этом на протяжении десятилетий. Никогда не смотрел на его код. Сделав этот тест, я провел, возможно, полчаса, глядя на этот код около 1980 -х годов.
Какие ругаты я могу использовать, чтобы описать это?

монсонт
Пн 26 октября 2015 г., 18:46
Роджер & Все,

Прошло много времени с тех пор, как я погрузился на этот форум, но я поймал видео Роджера на YouTube видео о досках "GD32F103 и различных тестах, которые он запустил.

Я понимаю, что Dhrystone и Whetstone подвергаются немало критики, но сейчас они являются удобными кусками кода, которые могут дать оценку относительной производительности этих микроконтроллеров.

Это заставило меня задуматься о других критериях, которые могут быть полезны для любителя

1. Скорость цифровой автора - максимальная частота, которую вы можете переключить штифт
2. Скорость анализа - как быстро вы можете прочитать АЦП
3. FFT - это осуществляет способность выполнять математику FP, используя таблицы греха и cose
4. ЖК -дисплей - с помощью библиотеки Gay Adafruit Graphics и TFT LCD - частота обновления кадров
5. SPI - DataRate
6. DMA
7. Низкий ток мощности при выполнении RTC
8. Код размер
9. WHET - математика плавающей запятой
10. Dhry - целочисленная математика
11. Строки
12. Рассчитайте и синтезируйте греховную волну - максимальную частоту/мин. Период для 1 цикла


Вы, вероятно, получите картинку.

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

Я назову это вызов Whet'n'dhry (пока).

Некоторые правила

Должен компилировать & Беги на Arduino Uno (32K Flash, 2K Ram) и всех обычных членов семьи Duino
Должен использовать Millis () для времени
Должен вывести 1 мс Squarewave - чтобы время можно было проверить по применению
Следует переключить светодиодный штифт - чтобы общее время можно было проверить по объему.
115200 бод для уведомления о результатах

Кроме этого - открыто для предложений.....



Кен

Mrburnette
Пн 26 октября 2015 г., 23:21
Должен компилировать & Беги на Arduino Uno (32K Flash, 2K Ram) и всех обычных членов семьи Duino Часто, как и в случае со стихами SPI S/W H/W с использованием ILI9341, например, тест на эталонный тест был выполнено для сравнения битового диапазона с аппаратной реализацией SPI.

Поскольку AVR-8 и STM-32 радикально разные ядра и архитектуры, такое сравнение похоже на сравнение скорости 22-Short с 223 раундом, выстреливаемым из AR-15. Да, 223 имеет более высокую скорость дуло.

Итак, IMO, тесты должны быть против (Maple Mini) STM32F103RCBT6 с тактовой частотой при 72 МГц. Все тесты будут приравнивать STM32F103RCBT6 к нормализованному 1.0 Ссылка.


Луча

монсонт
Вт 27 октября 2015 г. 8:11
Итак, IMO, тесты должны быть против (Maple Mini) STM32F103RCBT6 с тактовой частотой при 72 МГц. Все тесты будут приравнивать STM32F103RCBT6 к нормализованному 1.0 Ссылка. Рэй - это хорошее предложение в качестве отправной точки.


Кен

Rogerclark
Сб 14 ноября 2015 г. 11:43
Несколько не по теме, но я подумал, что запустил один и тот же набросок на NRF51822 CoreTex-M0 16 МГц, и я получаю это
#define TIM2_BASE 0x40000000 //save the initial timer2 register address #define TIM2_CNT TIM2_BASE + 0x24 //save the count2 register address adding the offset

mrbwa1
Пн, 16 ноября 2015 г., 17:10
Rogerclark написал:Несколько не по теме, но я подумал, что запустил один и тот же набросок на NRF51822 CoreTex-M0 16 МГц, и я получаю это
(TIMER1->regs).gen->CR1 = 0x00;

Rogerclark
Пн, 16 ноября 2015 г., 20:12
@mrwba1

Это хороший момент.

По крайней мере, для этого теста он быстрее, чем AVR с той же тактой скоростью.

Трудно сказать, почему это быстрее, возможно, кто-то сделал сравнение AVR против Cortex-M0. Я думал, что набор инструкций AVR был довольно оптимизирован, но, возможно, рука делает более умный взгляд на то, что.

Однако это не принимает во внимание, это запускается ли код BLE.

Я не эксперт о том, как обрабатывается BLE на этих устройствах, но в устройстве есть только одно ядро, поэтому, если он должен поддерживать услуги BLE, это определенно замедлит любую другую обработку

libby_anne
Пт 15 апреля 2016 г., 8:30 вечера
Мой первый пост здесь.
Быстрый простой тест скорости математики.
Петля 512 операций. Обратите внимание, что для INT F103 быстрее, чем F303, поскольку он имеет более быстрый доступ к Flash.
Также обратите внимание на скорость плавания для FPU включена F303.
Все версии одинаковы (кроме разных последовательных настроек), используя IDE 1.6.5.
Комментарии, предложения, дыры, чтобы выбрать.

МЕГА
Функция Double Single Int
Время - добавить: 11724 11721 387
Время - Sub: 11708 11707 388
Время - Mul: 11731 11731 452
Время - Div: 21824 21823 755

ДОЛЖНЫЙ
Функция Double Single Int
Время - добавить: 2102 1471 84
Время - Sub: 2124 1501 87
Время - Мул: 2169 1334 68
Время - Div: 1952 1366 140

F103
Функция Double Single Int
Время - добавить: 2136 1438 50
Время - Sub: 2264 1445 64
Время - Mul: 1264 816 71
Время - Div: 1002 768 64

F303
Функция Double Single Int
Время - добавить: 2271 1722 121
Время - Sub: 2334 1709 142
Время - Мул: 2097 1544 142
Время - Div: 2067 1603 142

F303 FPU
Функция Double Single Int
Время - добавить: 2382 164 121
Время - Sub: 2451 178 121
Время - Мул: 2198 185 164
Время - Div: 2138 192 142
#define TFT_DC PA1 #define TFT_CS PA2 #define TFT_RST PA3 Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST);

Gbulmer
Сб, 16 апреля 2016 г., 19:48
Несколько комментариев ...
Mrburnette написал: ...

Поскольку AVR-8 и STM-32 радикально разные ядра и архитектуры ...

Итак, IMO, тесты должны быть против (Maple Mini) STM32F103RCBT6 с тактовой частотой при 72 МГц. Все тесты будут приравнивать STM32F103RCBT6 к нормализованному 1.0 Ссылка.
Луча

Gbulmer
Сб, 16 апреля 2016 г., 8:06 вечера
libby_anne написала: #include "SPI.h #include "Adafruit_GFX.h" #include "Adafruit_ILI9341_STM.h" #define TFT_DC PC14 #define TFT_CS PC15 #define TFT_RST PA3 //Ref these pins are connected also / If not connected there is no way to get it going at all... //#define TFT_MOSI PA7 //#define TFT_MISO PA6 //#define TFT_CLK PA5 Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC); ///plus the screen code from Adafruit…

libby_anne
Солнце 17 апреля 2016 г. 2:14
Каждый временный цикл содержится между -
t = micros ();
...
t = micros () - t;
Так серийный.print () не участвует в времени, только математическая функция.

Gbulmer
Солнце 17 апреля 2016 г. 16:58
libby_anne написала:Каждый временный цикл содержится между -
t = micros ();
...
t = micros () - t;
Так серийный.print () не участвует в времени, только математическая функция.

Ddrown
Пн 18 апреля 2016 г. 12:15 утра
Гбулмер написал: Вы и программа предполагаете, что сериал.Печать блоки до тех пор, пока весь текст не будет отправлен.
...
Сохранить результат t = micros () - t, В некоторых дополнительных переменных и распечатайте результаты после теста. Это может быть либо в самом конце, либо после каждого операционного теста, с задержкой, чтобы выходные символы «сливали».

Gbulmer
Пн 18 апреля 2016 г., 19:58
DDROWN написал:
Вот мой удар по этому поводу: https: // Gist.GitHub.com/ddrown/3c6de60a ... 4EC350A9CA

...

Я не могу объяснить, почему моя математика медленнее. Может быть, часть кода, о которой я догадался, как -то другая?

Rogerclark
Сб 01 октября 2016 г., 4:19 утра
Я только что провел тест на Nucleo STM32L476, используя новое ядро ​​STM, и я получил эти цифры
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { }

Martinayotte
Сб, 01 октября 2016 г. 14:16
Что -то не так, здесь, так как мои тесты, проведенные в прошлом году с F405, были около 130 Vax MIPS.

Итак, я предполагаю, что системные часы все еще в 8 мГц без PLL были начаты ...

Rogerclark
Сб, 1 октября 2016 г., 21:19
В глубине души может быть ошибка, и она работает не на тех часах.

Спецификация говорится, что эта доска работает на 80 МГц

Я не думаю, что у ядрео есть внешние часы 8 МГц, но кто -то опубликовал, сказав, что у L4 есть новые внутренние часы, которые лучше, чем старый внутренний RC OSC.

Я думал, что попробую SPI на этой доске, и это сработало, но я посмотрел на свой логический анализатор, и часы работали только на 1 МГц, когда я только что позвонил SPI.начинать() .

Но я не проверил, что такое разделитель SPI по умолчанию. Мне нужно будет проверить.

Однако я понимаю, что вы имеете в виду, так как это должно быть быстрее, чем F103

Сжимать
Сб, 01 октября 2016 г. 22:19
Да, Роджер, в плате Nucleo L476 Ничто не подключено к XTAL (нет мостового припаянного для подключения xTal 8MHz ST-Link к Target MCU). По умолчанию L476 Используйте часы MSI, который составляет 4 МГц, но вы можете загрузить PLL с помощью его для генерации номинального 80 МГц. Как я вижу в System_stm32l4xx.c Файл Часы работают при 4 МГц, но это странно, так как эта медленная скорость должна быть очень заметной при выполнении кода. (Процедура настройки часов должна быть за пределами библиотеки, обычно в каталоге вариантов, так как каждая плата может иметь разные настройки часов).

Rogerclark
Солнце 02 октября 2016 г. 12:47
@slammer

Я вообще не касался кода L4 или варианта вообще.

Таким образом, он работает в любом мультипликационном STM (Wi6labs настроены для него)

Я только что посмотрел на код в библиотеке (системная папка), но мне нужно было прочитать документы, чтобы понять, какой ПЛЛ и т. Д. У них есть настройка для этой платы

Но, глядя на SPI. Если я установите Div64, я получаю 1 МГц, поэтому, похоже, это согласно с тестом Dhrystone, который указывает на то, что он, вероятно, Runing на 64 МГц вместо 80 МГц, я посмотрю, установили ли они 8 -х PLL -множитель вместо 10 -х PLL -множитель

Редактировать

Я предполагаю, что его настройка здесь

https: // github.com/stm32duino/arduino_c ... TM32L4XX.в

Он ссылается на то, что PLL_N составляет 8, но я не вижу, где в коде его настройка значения 8. Было бы лучше, если бы они использовали определения или перечисления для настройки часов, так как все, что я вижу, это арбитатные номера и различные изменения, которые выполняются

Я напишу по электронной почте Wi6labs и STM, чтобы выяснить, действительно ли они намерены запустить эту доску на 64 МГц, так как обычная спецификация для платы составляет 80 МГц

Сжимать
Солнце 02 октября 2016 г. 9:03
Нормали 4 МГц MSI должен быть оснащен PLLM = 1, а затем с PLLN = 40 (x 40) мы получаем 160 МГц, наконец, с PLLR = 2 ( / 2) мы получаем 80 МГц на выходе PLL.
L4-CLOCK.PNG
L4-Clock.PNG (37.3 киб) просмотрено 562 раза

Rogerclark
Солнце 02 октября 2016 г., 9:52 утра
@slammer

ХОРОШО.

Я просто посмотрел https: // github.com/stm32duino/arduino_c ... W_CONFIG.в И я подозреваю, что
#include #include const int rs = PB10, en = PB9, d4 = PB8, d5 = PB0, d6 = PA6, d7 = PA5; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); volatile int state ; void setup() { //Wire.begin(); // Initialize I2C-communication as master //SetFrequency (10140000); // Set TX-Frequency [10,14 MHz] //SetParkMode (); //TX_ON(); // initialize digital pin LED_BUILTIN as an output. pinMode(PC13, OUTPUT); //LED pinMode(PB1, INPUT); //Encoder pin that causes interrupt pinMode(PB11, INPUT); //Encoder pin to be sampled attachInterrupt(PB1, encoder, FALLING); //interrupt on falling edge lcd.begin(16, 2); lcd.clear(); } void loop() { digitalWrite(PC13, !digitalRead(PC13)); delay(100); lcd.setCursor(0, 0); lcd.print(state); } void encoder() { bool b; b = digitalRead (PB11); if (b == 0) { --state ; } else { ++state; } }

Martinayotte
Солнце 02 октября 2016 г. 14:52
Rogerclark написал: Я предполагаю, что его настройка здесь

https: // github.com/stm32duino/arduino_c ... TM32L4XX.в

Сжимать
Солнце 02 октября 2016 г. 15:56
В HALMX, если вы вызовите функцию SystemCoreClockupDate, после вызова глобальная переменная SystemCoreClock содержит частоту активных часов в Гц.

@roger и @martinayotte, ваше уведомление верно. Настройка PLL выполняется в hw_config.c Файл, если определяется enable_high_speed, PLL работает при 4*40/2 = 80 МГц в остальном в 4*32/2 = 64 МГц. Функции в System_stm32l4xx.C не изменяет ничего о часах, существует функция SystemCoreClockupDate для чтения и расчета частоты часов.

Роджер Попробуйте добавить определение enable_high_speed в системе здания и проверить результат или лучше с переменной SystemCoreClock.
В любом случае, я не вижу причины, чтобы выбрать часы между 64 МГц до 80 МГц, я могу понять выбор действительно медленной скорости (например, 8 МГц) для чувствительных к мощности приложений.

Rogerclark
Солнце 02 октября 2016 г., 21:01
Я постараюсь найти некоторое время, чтобы восстановить либера

Редактировать.

Я переписывался с определением enable_high_speed, и это фактически ухудшило его
/* insert license */ #ifndef __USB_CONFIG_H #define __USB_CONFIG_H #include "usb_lib.h" #include "gpio.h" /****************************************************************************** ****************************************************************************** *** *** HACK ALERT *** *** FIXME FIXME FIXME FIXME *** *** A bunch of board-specific #defines that are only used by the *** USB routines got put into libmaple.h for what appear to be *** historical reasons. I'm [mbolivar] putting them in here for *** now, so that we can treat the usb/ directory as a black box, *** freeing the rest of libmaple/ to be implemented as a *** general-purpose STM32 library. All of this REALLY needs to get *** moved into wirish when we get a chance to redo the USB stack. *** ****************************************************************************** *****************************************************************************/ #define VCOM_ID_VENDOR 0x1EAF #define RESET_DELAY (100000) #define USB_CONFIG_MAX_POWER (100 >> 1) #if defined(BOARD_maple) || defined(BOARD_maple_RET6) /* USB Identifier numbers */ #define VCOM_ID_PRODUCT 0x0004 #define USB_DISC_DEV GPIOC #define USB_DISC_PIN 12 #elif defined(BOARD_maple_mini) #define VCOM_ID_PRODUCT 0x0004 #define USB_DISC_DEV GPIOB #define USB_DISC_PIN 9 #elif defined(BOARD_maple_native) #define VCOM_ID_PRODUCT 0x0004 #define USB_DISC_DEV GPIOB #define USB_DISC_PIN 8 #else #error ("Sorry! the USB stack relies on LeafLabs board-specific " \ "configuration right now. If you want, you can pretend you're one " \ "of our boards; i.e., #define BOARD_maple, BOARD_maple_mini, or " \ "BOARD_maple_native according to what matches your MCU best. " \ "You should also take a look at libmaple/usb/descriptors.c; we make " \ "some assumptions there that you probably won't like.") #endif /****************************************************************************** ****************************************************************************** *** *** END HACK *** ****************************************************************************** *****************************************************************************/ /* choose addresses to give endpoints the max 64 byte buffers */ #define USB_BTABLE_ADDRESS 0x00 #define VCOM_CTRL_EPNUM 0x00 #define VCOM_CTRL_RX_ADDR 0x40 #define VCOM_CTRL_TX_ADDR 0x80 #define VCOM_CTRL_EPSIZE 0x40 #define VCOM_TX_ENDP ENDP1 #define VCOM_TX_EPNUM 0x01 #define VCOM_TX_ADDR 0xC0 #define VCOM_TX_EPSIZE 0x40 #define VCOM_NOTIFICATION_ENDP ENDP2 #define VCOM_NOTIFICATION_EPNUM 0x02 #define VCOM_NOTIFICATION_ADDR 0x100 #define VCOM_NOTIFICATION_EPSIZE 0x40 #define VCOM_RX_ENDP ENDP3 #define VCOM_RX_EPNUM 0x03 #define VCOM_RX_ADDR 0x110 #define VCOM_RX_EPSIZE 0x40 #define VCOM_RX_BUFLEN (VCOM_RX_EPSIZE*3) #define bMaxPacketSize 0x40 /* 64B, maximum for USB FS Devices */ #define NUM_ENDPTS 0x04 /* handle all usb interrupts */ #define ISR_MSK (CNTR_CTRM | \ CNTR_WKUPM | \ CNTR_SUSPM | \ CNTR_ERRM | \ CNTR_SOFM | \ CNTR_ESOFM | \ CNTR_RESETM) #define F_SUSPEND_ENABLED 1 #endif

Lmestm
Пн, 3 октября 2016 г., 9:29
Всем привет
Это, вероятно, проблема с настройкой часов на фазе инициирования
В качестве ссылки вы можете найти код инициализации часов MBED здесь:
https: // github.com/armmbed/mbed-os/blob ... TM32L4XX.в
В функции setsysclock_pll_hse вы действительно можете найти настройку для получения системных часов 80 МГц с ввода VCO 8 МГц (что вы получаете на досках Nucleo). Дайте мне знать, если это поможет
Лоран

Rogerclark
Пн, 3 октября 2016 г., 10:05
Спасибо Лоран

Я не понимал, что код был основан на MBBE.

Кто -нибудь подтвердил, что код MBED работает на 80 МГц, я подозреваю, что в коде MBBE может быть ошибка Wi6labs, только что сделала точную копию

Сжимать
Пн, 3 октября 2016 г. 11:11
Код MBED работает на 80 МГц от MSI. Посмотрите этот файл https: // github.com/armmbed/mbed-os/blob ... TM32L4XX.в В строках 551-554, pllm = 1, plln = 40 и pllr = 2, таким образом (4 * 40)/2 = 80 МГц. В MBBE нет установки 64 МГц, функция setSysClock_pll_msi предназначена только для 80 МГц. На самом деле не является кодом «mbed», эта функция является типичной функцией для настройки часов, сгенерированной из CubeMX, когда выбран MSI@80 МГц.

Плата Nucleo L476 не использует HSE -часы, только часы MSI, не совпадают, как все другие доски Nucleo!!!

Nucleo 64 Руководство (UM1724) Страница 24 Государства:

Примечание. Для Nucleo-L476RG вывод MCO ST-Link не подключен к осмеру, чтобы уменьшить
энергопотребление в режиме низкой мощности. Следовательно, конфигурация Nucleo-L476RG
соответствует HSE не используется.



РЕДАКТИРОВАТЬ: @Roger Я думаю, что ваши результаты правильные:
F103@72: 48.81 VAX MIPS
L476@64: 46.64 Vax Mips
L476@80: 58.40 VAX MIPS
Я что -то упускаю?

Lmestm
Пн, 3 октября 2016 г., 13:04
Спасибо, Slammer за ваши входные данные.

Я также прошел измерения Роджера, и это звучит последовательным (я.эн. 46.64 * 80/64 ~ = 58.4) и результаты Dhrystone являются линейными для частоты процессора.
Все это звучит разумно.

И да, настройка часов, так как Cubemx поступает от Cubemx.
Спасибо также за то, что поделились правильной и полной информацией о выборе часов MSI / HSE.

Сжимать
Пн, 3 октября 2016 г., 13:13
Если вы изучите код MBED, вы заметите, что на самом деле настраивается часы HSE, но в MBED часто пробовать всегда сначала сначала часы HSE, и если это не удалось (в ядрах L476 не удается, так как ничего не подключено на входе HSE) для настройки внутреннего часы. Это помогает доскам правильно запустить в любом случае.

Rogerclark
Пн, 3 октября 2016 г., 20:13
Я дважды проверяю, но это странно, что SPI показывает ровно 1 МГц на моем логическом анализатора, используя Div64

Также я удивлен, процессор 80 МГц работает хуже, чем процессор 72 МГц.

Кроме того, перекомпилированная библиотека с высокой скоростью показала более низкие скорости тестирования сухого камня.

Я все еще думаю, что это может быть проблемой.

Martinayotte
Пн, 3 октября 2016 г., 8:16 вечера
Вы пытались распечатать значение SystemCoreClock ?

Rogerclark
Пн, 3 октября 2016 г., 8:30 вечера
нет.

Я попробую это

Рик Кимбалл
Пн, 3 октября 2016 г., 20:33
/* Этот вызов на STM32F103 работает, чтобы вывести часы на PA8 .. Не уверен, что это то же самое для STM32L4 */

Hal_rcc_mcoconfig (rcc_mco, rcc_mco1source_sysclk, rcc_mcodiv_1); // pa8 показывает часы

Rogerclark
Пн, 3 октября 2016 г., 8:40 вечера
Спасибо, Рик

У меня есть объем 100 МГц, поэтому я попробую.

Пса. Похоже, есть проблема с i2c, когда часы составляют 80 МГц, поэтому эта доска может быть ограничена 64 МГц в конце концов.

Но было бы хорошо разобраться с этой загадкой

Rogerclark
Пн, 3 октября 2016 г., 21:46
ХОРОШО

Пробежал еще несколько тестов до и после перекомпиляции LIB

Я использовал макрос HAL_RCC_GETSYSCLOCKFREQ (), о котором Фабьен (WI6LABS) по электронной почте по электронной почте, чтобы показать частоту часов в этих тестах


Nucleo L476 с использованием ядра STM #define VCOM_NOTIFICATION_ENDP ENDP2 #define VCOM_NOTIFICATION_EPNUM 0x02 #define VCOM_NOTIFICATION_ADDR 0x100 #define VCOM_NOTIFICATION_EPSIZE 0x40 #define VCOM_RX_ENDP ENDP3 #define VCOM_RX_EPNUM 0x03 #define VCOM_RX_ADDR 0x110 #define VCOM_RX_EPSIZE 0x40

Сжимать
Вт 04 октября 2016 г. 12:47
Проблема с 80 МГц - это дизайн или требует различной настройки? Время I2C в L476 очень гибкое (и сложное), я думаю, что с правильными значениями в регистрах времени I2C (и, возможно, выбору часов) было бы возможно иметь эксплуатационный i2c. Например, в MBED I2C работает, пока часы на 80 МГц. Я не проверял скорость i2c, но у меня есть работающая демонстрация с небольшим экраном OLED.

Rogerclark
Вт 04 октября 2016 г. 1:17
Спасибо @slammer

Я отправил по электронной почте Wi6labs и STM, чтобы сказать, что, по мере того, как эта доска продается как 80 МГц, что библиотека должна быть составлена, чтобы она работала при 80 МГц и что SPI должен составлять 4 МГц (не 1 МГц, как сейчас), а также также I2c должен быть 100 кГц, когда на часах 80 МГц.

Я не знаю, почему они решили использовать 64 МГц вместо 80 МГц или почему SPI устанавливается на 1 МГц, когда это не является стандартным даже для плат AVR Arduino (UNO и т. Д.)

Я думаю, что STM попросил Wi6labs заставить доску запустить на 80 МГц, но, возможно, была техническая причина Wi6labs решил использовать 64 МГц

Возможно, Wi6labs и STM согласятся использовать 64 или 80 МГц, так как на самом деле это проблема для них, чтобы решить.

Rogerclark
Вт 04 октября 2016 г. 3:41
Вроде как на теме на мгновение

Мне пришлось проверить какой -то код NRF51822, поэтому я подумал, что я могу также запустить тест на сухой камень на моей плате NRF51, и я получил эти результаты
#define USB_CDCACM_CTRL_ENDP 0 #define USB_CDCACM_CTRL_RX_ADDR 0x40 #define USB_CDCACM_CTRL_TX_ADDR 0x80 #define USB_CDCACM_CTRL_EPSIZE 0x40 #define USB_CDCACM_TX_ENDP 1 #define USB_CDCACM_TX_ADDR 0xC0 #define USB_CDCACM_TX_EPSIZE 0x40 #define USB_CDCACM_MANAGEMENT_ENDP 2 #define USB_CDCACM_MANAGEMENT_ADDR 0x100 #define USB_CDCACM_MANAGEMENT_EPSIZE 0x40 #define USB_CDCACM_RX_ENDP 3 #define USB_CDCACM_RX_ADDR 0x110 #define USB_CDCACM_RX_EPSIZE 0x40

Пито
Вт 04 октября 2016 г., 7:56 утра
Возможно, Wi6labs и STM согласятся использовать 64 или 80 МГц, так как на самом деле это проблема для них, чтобы решить. Скорее всего, L4 на 80 МГц не в ожидании маркетинга (т.е. энергопотребление), или не работает надежно при 80 МГц. В противном случае они установит его на 80 МГц, держу пари. Что говорят ошибки?

Rogerclark
Вт 04 октября 2016 г. 10:03
Из того, что мне сказали, STM попросил Wi6labs программировать L476 для работы на 80 МГц, поскольку STM отправил им код настройки из MBED за 80 МГц, так что я думаю, что это ошибка, что он работает только при 64 МГц.

Спецификация ядра L476 определенно говорит 80 МГц

Сжимать
Вт 04 октября 2016 г., 19:18
Нет проблем с L476RG на 80 МГц, он работает очень хорошо. Я использовал Mbed и Chibios в различных небольших тестах с I2C, SPI, UARTS и т. Д. И работаю... Я также выбрал этот MCU (лучшее соотношение стоимости/цены) для реального проекта (в настоящее время на разработке) с помощью пользовательской платы.

Rogerclark
Вт 04 октября 2016 г., 8:40 вечера
STM не ответил на мой вопрос электронной почты о том, какую скорость они ожидают.

Я думаю, что я перекомпиляю библиотеку и 80 МГц и изменю по умолчанию SPI на Div 32, который даст 2.5 МГц, а не скорость выхода 1 МГц, так как она действительно должна быть 4 МГц, но не думайте, что есть настройка Div 20. Div 16, вероятно, слишком быстро, так как это приведет к 5 МГц SPI.

I2C также необходимо скорректировать :-(

Lmestm
Пн 17 октября 2016 г., 11:54
Привет, Роджер
Я думал, что ответил вам по электронной почте 3 октября - извините, если мне не ясно: да, L476RG будет работать на 80 МГц, это нужно исправить.
О SPI, почему вы думаете, что 5 МГц будет слишком быстрым по сравнению с. 2,5 МГц ?
Ожидаем ли мы проблемы с некоторыми устройствами, если заработать слишком быстро ?
Ваше здоровье
Лаурет

Rogerclark
Пн 17 октября 2016 г., 8:56 вечера
Без проблем

Wi6labs опубликовали в другой ветке, в котором говорится, что они исправит проблемы, и заставит доску запустить с правильной скоростью 80 МГц

Я думаю, что они сказали, что сделают скорость SPI по умолчанию до 5 МГц, что выше, чем AVR Arduino, но я думаю, что это будет в порядке, так как большинство устройств будут работать более 5 МГц.

Скорость SPI часто устанавливается в библиотеке для конкретного периферийного эпохи, например,. ЖК -экран, но они часто пишут для AVR, поэтому их необходимо изменить, чтобы поддержать любые другие доски, даже другие доски Arduino Arm, например, Due.
Но это становится менее проблемой, поскольку все больше людей используют устройства с более высокой скоростью, а библиотеки изменяются для работы с более широким спектром процессоров.

Lmestm
Пт 21 октября 2016 г. 12:47
Обновление статуса часов - исправление было доставлено и доступно
https: // github.com/stm32duino/arduino_c ... его/Мастер
Ядро L476 работает сейчас на скорости по умолчанию 80 МГц
Скорость SPI была UDPED до 5 МГц :-)
Также другие настройки, такие как I2C, были обновлены соответственно
Наслаждаться
Лоран

Rogerclark
Пт 21 октября 2016 г., 19:52
Спасибо

Rogerclark
Вт 29 ноября 2016 г., 3:41
Только что запустил эталон на моем новом F407VET, и я получаю

.ManagementEndpoint = { .bLength = sizeof(usb_descriptor_endpoint), .bDescriptorType = USB_DESCRIPTOR_TYPE_ENDPOINT, .bEndpointAddress = (USB_DESCRIPTOR_ENDPOINT_IN | USB_CDCACM_MANAGEMENT_ENDP), .bmAttributes = USB_EP_TYPE_INTERRUPT, .wMaxPacketSize = USB_CDCACM_MANAGEMENT_EPSIZE, .bInterval = 0xFF, },

Martinayotte
Вт 29 ноября 2016 г. 14:38
Это даже лучше, чем число, которое я предоставил в сентябре 2015 года для моего F405:

Vax mips rating = 134.23

Rogerclark
Вт 29 ноября 2016 г., 19:10
Какой такта была вашей F405?

Я только что выбрал F407 из меню «Доски», и я думаю, что это устанавливает часы на 168 МГц

Martinayotte
Вт 29 ноября 2016 г., 19:24
Та же PLL 168 Гц, от 8 МГц кристалл.
Итак, я не понимаю, откуда поступают различия, так как F405/F407 должен быть одинаковым (за исключением ETH и камеры I/F)

Rogerclark
Вт 29 ноября 2016 г., 19:36
мммм.

Кто -то изменил состояния ожидания в глубине души ?

Пито
Сб, 07 января 2017 г., 17:37
Привет, не могли бы вы указать мне, пожалуйста, где в этой теме можно найти самую фактическую версию эталона W или D в форме эскиза для BPILL или любого F103? Те, которые используются в последнее время от post 1?
Я хочу запустить его на моей новой плате Bluezex, чтобы увидеть, как он работает :)

Martinayotte
Сб, 07 января 2017 г., 19:35
На первой странице потока это было http: // www.Саанлима.com/скачать/dhry21a.молния
Но на самом деле это только дхристон ...

Пито
Сб, 07 января 2017 г. 20:21
Спасибо сделано! :)

103zet6 работает во вспышке.
// mbed online - F411RE // Loops: 1000, Iterations: 1, Duration: 25 sec. // C Converted Double Precision Whetstones: 4.0 MIPS // gcc4mbed - F411RE // Loops: 1000, Iterations: 1, Duration: 17 sec. // C Converted Double Precision Whetstones: 5.9 MIPS // gcc4mbed - F103RE (Blue Pill) // Loops: 1000, Iterations: 1, Duration: 34 sec. // C Converted Double Precision Whetstones: 2.9 MIPS // STM32duino Blue Pill // Loops: 1000 Iterations: 1 Duration: 19838 millisec. // C Converted Double Precision Whetstones: 5.04 MIPS

Пито
Солнце 08 января 2017 13:56
F103Zet6 (плата Bluezex) при процессоре 128 МГц, Dhrystone, работающий с 512 КБ Exram (10NS SRAM Settings D1, A0): GCC_DEFINES += -D__CORTEX_M4 -DARM_MATH_CM4 -D__FPU_PRESENT=1 C_FLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mthumb-interwork ASM_FLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=softfp LD_FLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=softfp

Пито
Ср 12 апреля 2017 г., 19:37
Black F407Zet6 доски на 168 МГц:

Уэтстоун Dhrystone Benchmark, Version 2.1 (Language: C on Arduino UNO 16MHz Execution starts, 30000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 90.63 Dhrystones per Second: 11034.28 VAX MIPS rating = 6.28 Dhrystone Benchmark, Version 2.1 (Language: C on Launchpad LM4F120 80MHz Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 10.65 Dhrystones per Second: 93933.32 VAX MIPS rating = 53.46

AG123
Вт 18 апреля 2017 г. 10:41
Я наконец-то собрал свой Dhrystone, это на черном варианте STM32F407VET6, который в настоящее время работает в процессе работы
Обратите внимание, что я использую оптимизация -O2 и на Arm -GCC 6 Loops: 1000, Iterations: 1, Duration: 11 sec. C Converted Double Precision Whetstones: 9.1 MIPS

Martinayotte
Вт 18 апреля 2017 г. 13:18
Что -то выглядит странно: я сделал тесты на сентябрем 2015 года (посмотрите на страницу 4 в текущем потоке), и F405 дал 130 MIPS.
Вы разгорели свой F407 ?

AG123
Вт 18 апреля 2017 г. 13:23
Нет, я работаю над ветвью разработки F4 Libmaple в репозитории Стива
https: // github.com/stevstrong/arduino_s ... F4_variant

В настоящее время f_cpu = 168000000L
Я на самом деле не изучаю коды установки часов буквально, и я не слишком уверен, что даже эта настройка могла бы привести к тому, что F4 фактически работает на более высокой скорости, чем максимум запаса

Несколько вещей, которые я делаю, составляют с -O2, выключают все настройки отладки
И я использую ARM GCC Toolchain 6-2017-Q1-UPDATE 23 февраля 2017 г
https: // Разработчик.рука.com/с открытым исходным кодом/g ... /Загрузки

Но я прочитал на отдельном форуме BOINC, что оптимизация GCC может фактически удалить разделы кодов, на которые не упоминаются, я не слишком уверен, что -O2 или какой -то не смогли бы удалить эти коды
эн.глин. Если есть заявление C = A + B и на C, C, не ссылается, GCC может буквально удалить это утверждение при выполнении компилятов

Я просто повторил компиляцию с -O0 - без оптимизации Loops: 1000, Iterations: 1, Duration: 11 sec. C Converted Double Precision Whetstones: 9.1 MIPS

Пито
Вт 18 апреля 2017 г. 14:49
С 9-2023-q2-update 14 мая 2023 г. мы получим 521.21 Ваксмипс.
:ржу не могу:

AG123
Вт 18 апреля 2017 г. 14:57
Это может быть экспоненциальным, к тому времени это может быть Mips Infinity, GCC считает, что все эти коды не нужны, и удалить его :ржу не могу:

victor_pv
Вт 18 апреля 2017 г. 15:47
AG123 написал:Это может быть экспоненциальным, к тому времени это может быть Mips Infinity, GCC считает, что все эти коды не нужны, и удалить его :ржу не могу:

Стивестронг
Вт 18 апреля 2017 г. 16:17
На F1 оптимизация по умолчанию - «ОС». Это дает самый короткий размер и все еще хорошую скорость.

Было бы интересно увидеть результат, используя «O3».

AG123
Вт 18 апреля 2017 г. 16:29
Вот иди STM32F103 Maple Mini
Опять же, это основано на оптимизациях -O2, отладки флагах Loops: 1000, Iterations: 1, Duration: 19 sec. C Converted Double Precision Whetstones: 5.3 MIPS

Пито
Вт 18 апреля 2017 г. 16:36
48-49 с F103 -OS -это то, что было измерено в прошлом, так что, кажется, в порядке.
48/62 = 1.29 с F103 и 160/232 = 1.45 с F407 - это разница, хотя..

AG123
Вт 18 апреля 2017 г. 16:54
Я предполагаю, что на F4 наборы аппаратного обеспечения (E.глин. контроллеры памяти и т. Д.) Похоже, способны более эффективно кормить трубопровод процессора
http: // Infocenter.рука.com/help/index.младший ... Gjicf.HTML
^^ Если, как указывают на эту ссылку, F3 и F4, вероятно, будут иметь аналогичную трубопроводную линию, но примечательно, что трубопровод процессора способен к двойной инструкции
Просто развернуть петли (e.глин. -O2) и наличие, возможно, лучшего контроллера памяти внутри, может объяснить прыжок в производительности, на стороне выбора, он может быть буквально удвоен только для выбора, если петли развернуты

Я опубликовал свои коды в первоначальном сообщении на тестах (в прикрепленном zip -файле)
http: // www.STM32duino.com/viewtopic.PHP ... 110#P26557

AG123
Вт 18 апреля 2017 г., 17:17
-Оптимизация O3 для F407VET6 STM32F746VGT6 216MHz Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 3.33 Dhrystones per Second: 300000 VAX MIPS rating = 170.74

Пито
Вт 18 апреля 2017 г., 17:49
Попробуйте разгонять 407. Это может работать до 250 МГц.. Я думаю, что 240 МГц такая, вы получаете 48 МГц за USB..

AG123
Вт 18 апреля 2017 г., 17:52
Я не уверен, нужен жидкий азот :ржу не могу:

О, кстати, как мне это сделать, могу ли я просто изменить f_cpu = 168000000L? Ой, подождите минуту, USB по-прежнему работает, это USB-сериал?
Удивительно, но F_CPU, похоже, не упоминается в исходных кодах C/C ++

ОК, сдавайся на данный момент, необходимо изучить коды RCC :ржу не могу:

victor_pv
Вторник 18 апреля 2017 г. 18:01
AG123 написал:Я не уверен, нужен жидкий азот :ржу не могу:

О, кстати, как мне это сделать, могу ли я просто изменить f_cpu = 168000000L? Ой, подождите минуту, USB по-прежнему работает, это USB-сериал? :ржу не могу:
Удивительно, но F_CPU, похоже, не упоминается в исходных кодах C/C ++

Тем временем, приближаясь ...

AG123
Вт 18 апреля 2017 г., 18:07
Спасибо, Виктор

Нашел различные коды в STM32F4/Cores/Maple/Libmaple/RCCF4.в
проверяет, как определены эти переменные PLL

Ну, прерывания, безусловно, имеют значение, но я предполагаю, что это в основном просто случайный тест, чтобы увидеть, что практически достижимо (E.глин. без необходимости переходить на часы) и как «быстро» : D

Представление о том, что F4 достигает этих старых скоростей пентиума E.глин. Первые Pentiums 133 МГц позволяют нам догадаться, каковы будут хорошие приложения для запуска на платформе. Я вспомнил, что когда эти Pentiums 133 МГц рядом, Windows 95 - это почти общая настольная ОС
Следовательно, F4 - это мини -ПК этого «класса», просто он не делает MMU, и в любом случае внутренний SRAM довольно ограничен, предполагая, что мы не будем беспокоиться о внешнем SRAM или SDRAM, поскольку они будут «трудно подключиться» Учитывая количество параллельных булавок для настройки и, возможно, дорогостоящего также.

Эти MCU фактически являются «компьютером на чипе», и он достигает этих старых рабочих компьютеров только с очень ограниченной ОЗУ

Пито
Вт 18 апреля 2017 г., 18:21
Откройте конфигуратор Cubemx для 407 и установите часы. Вы должны изменить около 4 разделителей вокруг PLL.
8 МГц /4 (PLLM) *240 (PLLN) /2 (PLLP) Это дает вам часы 240 МГц.
Затем установите USB -делитель на 10 (PLLQ).
407 240mhz.jpg
407 240 МГц.JPG (91.16 киб) просмотрено 255 раз

AG123
Вт 18 апреля 2017 г., 18:25
Спасибо, Пито : D
Упс, мне нужно было настроить Cube-MX, у меня есть несколько мало дискового пространства, я думаю, я бы попробовал прочитать RM0009 и сначала просмотреть исходные коды

Но предложение в размере 240 МГц заставляет меня задуматься, нужно ли мне в отставке огнетушитель, мне, возможно, нужно посмотреть, что такое более низкий «безопасная» скорость скорости :ржу не могу:

Вместо USB я могу попробовать с UART, чтобы поддерживать работу USB было меньшей проблемой

О, я думаю, что эти флаги -о -это «хорошая вещь», это «бесплатный» прирост производительности, пока приложение может жить во вспышке, нам не обязательно ограничивать себя по умолчанию по умолчанию. Даже Maple Mini и различные синие таблетки имеют 128 тыс. Вспышки, это много для небольших приложений

Пито
Вторник 18 апреля 2017 г. 18:29
заставляет меня задуматься, нужно ли мне в отставке огнетушительВы не заметите изменения температуры (может быть, 4DEGC). Кажется, что разгона не твое хобби :)
Вы не должны устанавливать Cubemx, просто следите за изображением и намеками выше :)
Когда все правильно установлено, вы должны увидеть ~ 374 Vaxmips (-O3).. РЕДАКТИРОВАТЬ: :ржу не могу:
О контроллере памяти, я понимаю, что F1 просто имеет префект -буфер, в то время как F407 имеет самый большой прогноз буфера + ветви или другие льготы, которые дополнительно увеличивают скорость. F4 включает в себя «Art» акселератор, который утверждает, что опустите 5 Flash Waitdates до 0. Это может сделать F4 более эффективным при оптимизации с -O3..

Пито
Вт 18 апреля 2017 г., 21:34
Мои результаты разгона для черного F407Zet:

-OS, -G, EABI -4.8.3-2014Q1, 240 МГц Dhrystone Benchmark, Version 2.1 (Language: C MCU:STM32F415, System PLL Clock:168MHz Execution starts, 1,000,000 runs through Dhrystone Execution ends start 12801 end 2,364,679 micros Microseconds for one run through Dhrystone: 1,080,967,159 Dhrystones per Second: 536,968,336 VAX MIPS rating = 536,968,336

Пито
Вт 18 апреля 2017 г. 22:01
Уэтстоун рассказывает другую историю (Black F407Zet):

-OS, -G, EABI -4.8.3-2014Q1, 240 МГц Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 200000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 67.84 Dhrystones per Second: 14740.04 VAX MIPS rating = 8.39

AG123
Ср 19 апреля 2017 г. 2:52 утра
ух ты : D

На стороне примечание:
http: // www.ул.com/resource/en/dataheet/stm32f407ve.PDF 2.2.2 Адаптивный ускоритель памяти в реальном времени (Art Acceleratortm)
Art Acceleratortm - это ускоритель памяти, который оптимизирован для промышленности STM32-
Standard Arm® Cortex®-M4 с процессорами FPU. Он уравновешивает неотъемлемая производительность
Преимущество ARM Cortex-M4 с FPU по технологиям флэш-памяти, которая
Обычно процессор требует, чтобы процессор ждал флэш -памяти на более высоких частотах.
Чтобы выпустить процессор Full 210 DMIPS на этой частоте, ускоритель
реализует очередь предварительной обработки инструкции и кеш филиала, которая увеличивает программу
Скорость выполнения из 128-битной флэш-памяти. На основании эталона Coremark,
Производительность достигнута благодаря Art Accelerator, эквивалентна 0 Программа ожидания штата
выполнение из флэш -памяти на частоте процессора до 168 МГц.
И наши тесты с -O3 1 Vax MIPS на STM32F103
http: // www.STM32duino.com/viewtopic.PHP ... 120#P26581
Также ставит таблетки Maple Mini/Blue в 70X DMIPS, чем намного более крупный VAX-11/780 или IBM System/360 : D
https: // en.Википедия.org/wiki/vax Некоторое время VAX-11/780 использовался в качестве стандарта в контрольных показателях ЦП. Первоначально он был описан как машина с одним путем, потому что его производительность была эквивалентна системе IBM/360, которая работала на одном MIPS

Пито
Ср 19 апреля 2017 г. 8:37
К вашему сведению - единственный точный камень на черном F407ZET на часах 240 МГц:
-ОС Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 200000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 67.84 Dhrystones per Second: 14740.04 VAX MIPS rating = 8.39

AG123
Ср 19 апреля 2017 г. 11:27
Я тоже получаю различные проблемы с компиляцией :ржу не могу: void math_add ( void ) { Serial.print ("Time - ADD :\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyDoubles [ l ] = double ( a_d + b_d * double ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyFloats [ l ] = float ( a_f + b_f * float ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { Myints [ l ] = a_i + b_i * l; } } t = micros () - t; Serial.println ( t / max_c ); } void math_sub ( void ) { Serial.print ("Time - SUB :\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyDoubles [ l ] = double ( a_d - b_d * double ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyFloats [ l ] = float ( a_f - b_f * float ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { Myints [ l ] = a_i - b_i * l; } } t = micros () - t; Serial.println ( t / max_c ); } void math_mul ( void ) { Serial.print ("Time - MUL :\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyDoubles [ l ] = double ( a_d * b_d * double ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyFloats [ l ] = float ( a_f * b_f * float ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { Myints [ l ] = a_i * b_i * l; } } t = micros () - t; Serial.println ( t / max_c ); } void math_div ( void ) { Serial.print ("Time - DIV :\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyDoubles [ l ] = double ( a_d / b_d * double ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { MyFloats [ l ] = float ( a_f / b_f * float ( l ) ); } } t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); for ( c = 0 ; c < max_c ; c ++ ) { for ( l = 0 ; l < 512 ; l ++ ) { Myints [ l ] = a_i / b_i * l; } } t = micros () - t; Serial.println ( t / max_c ); }

Стивестронг
Ср 19 апреля 2017 г. 11:54
Пито написал:Следующий шаг: включите FPU (нелегко, кстати.)

AG123
Ср 19 апреля 2017 г. 13:10
STM32F407VET, Compile -os (оптимизированный размер), без отладка
программное обеспечение плавающей запятой, двойная точность void math_... ( void ) { Serial.print ("Time - ... :\t "); t = micros (); ... t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); ... t = micros () - t; Serial.print( t / max_c ); Serial.print("\t\t "); t = micros (); ... t = micros () - t; Serial.println ( t / max_c ); }

Пито
Ср 19 апреля 2017 г. 13:27
Стивестронг написал:Пито написал:Следующий шаг: включите FPU (нелегко, кстати.)

AG123
Ср 19 апреля 2017 г. 14:03
Аппаратный поплавок висит : o , Оставьте отладку на другой день, думайте, что Пито прав, не просто (по крайней мере, не «автоматически») :ржу не могу: - Нужны коды, чтобы включить FPU

STM32F407VET, Compile -os (оптимизированный размер), без отладка
аппаратное плавание, единственная точность Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 12.20 Dhrystones per Second: 81949.97 VAX MIPS rating = 46.64

Пито
Ср 19 апреля 2017 г. 16:34
@ag123: сомневаюсь, что ваши единственные результаты точности в порядке. Дважды проверьте свой источник. Мне кажется, ты все еще делаешь.

AG123
Ср 19 апреля 2017 г. 16:54
Спасибо, посмотрите, спасибо, что опубликовали о FPU
http: // www.STM32duino.com/viewtopic.PHP?F = 39&T = 2001
Я думаю, мы сможем вернуться на FPU в другой раз

О, код Whetstone имеет свисающую двойную локальную переменную в одной подпрограмме, фиксированной, прикрепленной несколько постов назад

Удивительно, но результаты оптимизации -O2 и -O3 остались неизменными
-ос (оптимизированный размер) улучшен

Bingo600
Ср 19 апреля 2017 г. 16:54
@AG123

Вы видели Ansver 3 сверху
Вы должны включить FPU (несколько линий ASM, если не использовать SystemInit из CMSIS)

Пример
https: // www.Микроконтроллер.net/тема/261021#3959896

Док
http: // www.ул.com/resource/en/applicati ... 047230.PDF


Дополнительная информация о HW-Float
https: // visualgdb.com/turnerials/arm/stm32/fpu/


/Бинго

AG123
Ср 19 апреля 2017 г., 17:43
Спасибо @bingo600 и @pito
Первые тесты на аппаратном FPU, обновляя пару сообщений назад ... : D

Пито
Ср 19 апреля 2017 г., 18:48
@AG123: вы все еще делаете двойную точность :) Дважды проверьте свой источник.. Подсказка: sin () и sinf () не совпадает..
На FPU есть специальная нить. Функции включения FPU уже есть, но этого недостаточно, кажется.

AG123
Ср 19 апреля 2017 г., 19:03
Спасибо, Пито
проверил бы это снова

Включение кодов FPU выглядит следующим образом
http: // Infocenter.рука.com/help/topic/co ... BJHIG.HTML ENABLE_HIGH_SPEED

AG123
Ср 19 апреля 2017 г., 19:47
OK Исправлена ​​единственная точность для вызова единой точности математической функции, обновил результаты аппаратного поплавка, теперь единственная точность с плавающей запятой выглядит намного лучше : D

Аппаратная плавающая темпа Дополнительные тесты с флагом-FSINGLE-PRECIONS-CONSTANT

STM32F407VET
Скомпилированная оптимизация -os (оптимизированный размер), без отладки, -fsingle -presision -constant
аппаратное плавание, единственная точность Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 9.75 Dhrystones per Second: 102609.18 VAX MIPS rating = 58.40

Пито
Чт 20 апреля 2017 г., 7:31
-O0, -g, 4.8.3-2014q1, -mfloat-abi = hard -mfpu = fpv4-sp-d16 -fsingle-presision-constant, черный F407Zet при 168 МГц Dhrystone Benchmark, Version 2.1 (Language: C) Clock speed is 80000000 Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 9.56 Dhrystones per Second: 104628.52 VAX MIPS rating = 59.55 Dhrystone Benchmark, Version 2.1 (Language: C) Clock speed is 64000000 Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 11.97 Dhrystones per Second: 83549.77 VAX MIPS rating = 47.55

AG123
Чт 20 апреля 2017 г. 7:53 утра
Я бы подумал, что -ос нормально, так как это в значительной степени де -факто оптимизация, в этих критериях нельзя быть слишком серьезно
Если MFLOPS, или VAX MIPS становится намного быстрее, чем это, я думаю, Intel & Остальные чип -гиганты могут начать тщательно изучить результаты для нового «нового конкурента» :ржу не могу:

Я сомневаюсь, что эти критерии отражают точные технические границы, учитывая оптимизацию GCC -O, я думаю, что даже без оптимизации было бы довольно сложно сказать, может ли компилятор оптимизировать »коды как часть своего процесса сборки

Но, тем не менее, это отражает, что -O2 могут сделать коды более быстрее работать на STM32F1 и STM32F4, поскольку эталоны отражают это. Это хорошо, так как это просто означает использование большего количества вспышки. эн.глин. Для проекта осциллографа я не слишком уверен, может ли -O2 на самом деле помочь, кроме как выполнять аналоговые чтения, он набирает график на ЖК -дисплее, поэтому эти коды рисования могут быть ускорены. Просто указать -O2
И это не будет потреблять SRAM, поскольку коды выполняются непосредственно от Flash

О, и F4 - довольно быстрый чип, по крайней мере, как показывают эти тесты, я думаю, что это, вероятно, превзошло старый Cray 1 или даже близко на суперкомпьютерах Cray 2, и, кроме того, это не менее MCU, в значительной степени один чип -компьютер. Тесты Dhrystone показывают «силу» ускорителя искусства :ржу не могу:

victor_pv
Солнце 23 апреля 2017 г. 3:56 утра
Я сделал шанс на единый точный код Whetstone AG, опубликованный несколько сообщений назад.
Настройки:
Основанное на либмапле ядро.
407в
Нет серийного или USB, используя SWO, поэтому нет никаких прерываний, надеюсь.
168 МГц
Нет FPU
-ОС

Начало эталона Whetstone в 168 МГц ...
Петли: 1000, итерации: 1, Продолжительность: 6205.83 миллисек
C преобразованный двойной точность Whetstones: 16.11 MFLOPS

AG123
Солнце 23 апреля 2017 г. 6:05
@Виктор
Результаты, которые вы показали, предназначены для двойной точности, для единственной точности редактирования Whetstone.CPP Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 68.66 Dhrystones per Second: 14564.68 VAX MIPS rating = 8.29

victor_pv
Солнце 23 апреля 2017 г. 15:03
AG123 написал:@Виктор
Результаты, которые вы показали, предназначены для двойной точности, для единственной точности редактирования Whetstone.CPP Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 3000000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 3.66 Dhrystones per Second: 273545.90 VAX MIPS rating = 155.69

AG123
Солнце 23 апреля 2017 г. 15:27
Попробуйте -O2 (оптимизируйте больше) и -O3 (оптимизируйте больше всего) и выключите отладку : D
Обратите внимание, что я скомпилировал с -mfloat -abi = жестко, когда я выполняю тесты FPU, это, вероятно, также подняло базовые результаты
---
О, вау 120 мфлпов, которые последним результатом : D

victor_pv
Солнце 23 апреля 2017 г. 15:31
AG123 написал:Попробуйте -O2 (оптимизируйте больше) и -O3 (оптимизируйте больше всего) и выключите отладку : D
Обратите внимание, что я скомпилировал с -mfloat -abi = жестко, когда я выполняю тесты FPU, это, вероятно, также подняло базовые результаты

AG123
Солнце 23 апреля 2017 г. 15:34
компилировать без -G : D

victor_pv
Солнце 23 апреля 2017 г. 16:19
F407
168 МГц
Жесткий FPU с жесткими звонками
Единственная препарата
-Ос Starting Whetstone benchmark... Loops: 1000Iterations: 1Duration: 20366 millisec. C Converted Double Precision Whetstones: 4.91 MIPS <<< 72MHz Loops: 1000Iterations: 1Duration: 15250 millisec. C Converted Double Precision Whetstones: 6.56 MIPS <<< 96MHz Loops: 1000Iterations: 1Duration: 12201 millisec. C Converted Double Precision Whetstones: 8.20 MIPS <<< 120MHz Loops: 1000Iterations: 1Duration: 11438 millisec. C Converted Double Precision Whetstones: 8.74 MIPS <<< 128MHz Dhrystone Benchmark, Version 2.1 (Language: C) <<< 128MHz Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 7.28 Dhrystones per Second: 137397.93 VAX MIPS rating = 78.20

Пито
Солнце 23 апреля 2017 г. 16:20
-ОС, НЕТ -Г, EABI -4.8.3-2014q1, -mfloat-abi = hard -mfpu = fpv4-sp-d16 -fsingle-presision-constant, 168 МГц
Old Repo, классический источник в 1 файле. Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 300000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 57.35 Dhrystones per Second: 17437.22 VAX MIPS rating = 9.92 ***

victor_pv
Солнце 23 апреля 2017 г. 16:24
Пито написал:-ОС, НЕТ -Г, EABI -4.8.3-2014q1, -mfloat-abi = hard -mfpu = fpv4-sp-d16 -fsingle-presision-constant, 168 МГц Loops: 1000Iterations: 1Duration: 6251 millisec. C Converted Double Precision Whetstones: 16.00 MIPS

Пито
Солнце 23 апреля 2017 г. 16:32
-ОС, НЕТ -Г, EABI -4.8.3-2014q1, -mfloat-abi = hard -mfpu = fpv4-sp-d16 -fsingle-presision-constant, 240 МГц, часы, черный 407zet Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 3000000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 2.46 Dhrystones per Second: 407225.93 VAX MIPS rating = 231.77

victor_pv
Солнце 23 апреля 2017 г., 17:26
Пито написал:-ОС, НЕТ -Г, EABI -4.8.3-2014q1, -mfloat-abi = hard -mfpu = fpv4-sp-d16 -fsingle-presision-constant, 240 МГц, часы, черный 407zet Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 3000000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 10.16 Dhrystones per Second: 98448.63 VAX MIPS rating = 56.03

AG123
Солнце 23 апреля 2017 г., 17:28
Попробуйте Serial вместо serialusb (обратите внимание, я не мог получить сериал для работы, поэтому я в основном использовал serialusb : P )
Я где -то читал, что USB должен продолжать проверять хост на наличие сообщений, я предполагаю, что это может быть много * прерываний * и, следовательно, медленнее (с serialusb), просто предположение : D

Пито
Солнце 23 апреля 2017 г., 17:37
Разделение исходного файла на три абсолютно необходимо !!!
Я вчера испортил, решая следующую проблему:
1. В CMSIS DSP пример FFT я сгенерировал 3 синусовых тона с Diff FREQ и AMPLS
2. В цикле я суммирую 3 греха, чтобы получить сигнал
3. В то время как я работал с 1 файлом, он принял только 1 (один) SINF в цикле, и с особой заботой о параметрах - добавление другого sinf/cosf или любая другая математическая функция Crashed
4. Вчера я все перепутал с этим весь день, отладка разбилась почти случайным образом в RCC (!!!)
5. Затем я разделил его на 3 файла (ino, h, cpp), и это работает без каких -либо проблем с абсолютно всем, что я положил внутри.

Пито
Пн 24 апреля 2017 г. 11:01
-O0, -g, eabi -4.8.3-2014Q1, New Victor 'Generic STM32F4V Series ", Hardfpu с жесткими звонками, 240 МГц, черные 407Zet, Serialusb, Whetstone AG123: Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 3000000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 9.21 Dhrystones per Second: 108569.65 VAX MIPS rating = 61.79

AG123
Пн 24 апреля 2017 г. 20:12
Я предполагаю, что эти контрольные показатели 500 млн. Флопсов всегда являются поднятием бровей, в любом случае этот эталон в основном * веселый *, и это комбинированная «сила» слишком «умного» GCC -O3 и ускорителя искусства :ржу не могу:

монсонт
Пт 22 сентября 2017 г., 8:00 вечера
Всем привет,

Немного поздно до вечеринки, но теперь тестирование 80 МГц STM32L433, которая теперь доступна на Arduino IDE.

Микросекунд для одного пробега через Дхристон: 9.00
Дристоны в секунду: 111163.81
Vax mips rating = 63.27

Вы можете найти ядро ​​доски для этого STM32 здесь и здесь

https: // github.com/grumpyoldpizza/arduino-stm32l4

https: // github.com/millerresearch/arduino-mystorm

Мы используем STM32L433 в качестве чипа Suport для нашей платы ICE40 FPGA с открытым исходным кодом - Blackice

Мисторм.Великобритания


Ваше здоровье


Кен

Chismicro
Сб 23 сентября 2017 г., 4:10
Мы используем STM32L433 в качестве чипа Suport для нашей платы ICE40 FPGA с открытым исходным кодом - Blackice Вот этот?:
https: // www.Fpgarelated.com/thread/799/ ... -Dev-Board
Его написано: ICE40HX4K и STM32F103 Cortex M3

Дэнниф
Сб 23 сентября 2017 г. 9:09 вечера
Немного поздно до вечеринки, но теперь тестирование 80 МГц STM32L433, которая теперь доступна на Arduino IDE.

Микросекунд для одного пробега через Дхристон: 9.00
Я не видел ваш код, но в целом использование функции времени Arduino Timing Millis () для сравнительного анализа может привести к значительным ошибкам -> Стандартный код недооценивает время.

Лучше использовать Systick, или DWT.

Вы можете одолжить код Systick / Dwt (coreticks ()) здесь: https: // dannyelectronics.WordPress.ком/ ... k-on-mcus/

Я также много написал о производительности Dhrystone / Whetstone в разных случаях MCUS. Как правило, они соответствуют тому, что можно ожидать, за двумя исключениями:

1. PIC24 является исключительным в целочисленной производительности;
2. MSP432 ужасен в целочисленной математике с собственным компилятором Ti.

Пито
Сб 23 сентября 2017 г. 22:00
Я не видел ваш код, но в целом использование функции времени Arduino Timing Millis () для сравнительного анализа может привести к значительным ошибкам -> Стандартный код недооценивает время. Есть ли у вас доказательства такого неудачи миллиса () для поддержки заявления?

victor_pv
Сб 23 сентября 2017 г. 11:34
[Chismicro - Сб 23 сентября 2017 г. 4:10]] - Мы используем STM32L433 в качестве чипа Suport для нашей платы ICE40 FPGA с открытым исходным кодом - Blackice Вот этот?:
https: // www.Fpgarelated.com/thread/799/ ... -Dev-Board
Его написано: ICE40HX4K и STM32F103 Cortex M3
Я подозреваю, что это может быть новая версия доски, так как он назвал это Blackice, а в ссылке ICE40.

Дэнниф
Солнце 24 сентября 2017 г. 1:05
Вы можете одолжить код Systick / Dwt (coreticks ()) здесь: https: // dannyelectronics.WordPress.ком/ ... k-on-mcus/ Мне было отмечено, что я на самом деле не предоставил код эталона Whetstone -> с тех пор, как исправлено, :)

Использование довольно просто:
Dhrystone Benchmark, Version 2.1 (Language: C) Execution starts, 3000000 runs through Dhrystone Execution ends Microseconds for one run through Dhrystone: 2.16 Dhrystones per Second: 462753.58 VAX MIPS rating = 263.38

AG123
Солнце 24 сентября 2017 г., 4:37
Ну, тесты «просто для развлечения». Но да, F407 намного быстрее, чем F103 для ускоренного кода FPU с плавающей запятой, вы можете игнорировать неточности в миллисекундах, это дневные и ночные различия :ржу не могу:
ViewTopic.PHP?F = 39&T = 2001

Дэнниф
Солнце 24 сентября 2017 г. 16:50
Если вы больше заинтересованы в ориентированном на MCU эталон, вы можете взглянуть на этот документ от TI: http: // www.тип.com/lit/an/slaa205c/slaa205c.PDF

Результаты интересны.

Кроме того, у меня есть код в наборе .час/.C файлы и могут опубликовать их, если кто -то заинтересован.

Chismicro
Пн 25 сентября 2017 г. 7:18 утра
[victor_pv - Сб 23 сентября 2017 г., 23:34] -
[Chismicro - Сб 23 сентября 2017 г. 4:10]] - Мы используем STM32L433 в качестве чипа Suport для нашей платы ICE40 FPGA с открытым исходным кодом - Blackice Вот этот?:
https: // www.Fpgarelated.com/thread/799/ ... -Dev-Board
Его написано: ICE40HX4K и STM32F103 Cortex M3
Я подозреваю, что это может быть новая версия доски, так как он назвал это Blackice, а в ссылке ICE40.
Сегодня на Hackaday с этой доской есть что -то:
https: // chackaday.com/2017/09/24/a-orive- ... Би-би-си-micro/
Даже упоминается, что доска теперь может быть запрограммирована с Arduino-ade.
Я думаю, что это связано с работой людей на этом форуме.

Мне нравится комбинация STM32 и FPGA. С этой конфигурацией гораздо больше приложений.

Ахулл
Пн 25 сентября 2017 г., 8:22 вечера
У этой доски здесь есть своя нить... ->ViewTopic.PHP?t = 1276

Bluepill на Hackaday снова