PDA

Просмотреть полную версию : Поговорим о быстродействии контроллеров


Arsie
18.07.2016, 15:28
В данной статье будут рассмотрены вопросы быстродействия контроллеров.

На написание статьи меня натолкнуло неоднократное упоминание в переписке на то, что наши контроллеры "по слухам" не могут обработать много аналоговых сигналов. Что нет у них ресурсов программных для этого.

Также иногда всплывает вопрос, сколько точек сигналов может обработать контроллер.

Не знаю, кто и где распускает эти слухи, но реальность следующая.

---------------------------

Вопрос: В нашей схеме всего 184 канала ввода/вывода. Я так, с первого взгляда, понял, что Segnetics не располагает штатно модулями, чтобы покрыть нужное нам количество каналов. Это предполагает использование модулей сторонних производителей по RS-485? 112 каналов подразумевается именно по системной шине или всего на контроллер, включая и те, что будут на RS-485?

Ответ: В описании подразумеваются именно штатные модули расширения по шине. По RS485 можно подключить до 31 сторонних модуля или же ещё 31 любой контроллер (например, Pixel25) с ещё 8 модулями расширения - эти контроллеры будут банально предоставлять входы/выходы, типа как это делают "коммутаторы" модулей расширения у того же Сименса.

Если говорить о валовой производительности, то для SMH2G(i) предельное число точек ввода/вывода находится за гранью разумного, т.е. 65535 точек на ввод и 65535 точек на вывод.


Вопрос: Ну просто Cray, как минимум. Хочется Вам верить, что все так лучезарно.

Ответ: 2x 65535 - это ограничение программной обработки. Лично я не вижу способа ввести столько точек внутрь алгоритма, не затрачивая при этом уймы времени на сам ввод/вывод. Сила крэя не в синтетической обработке данных, а в том, что его узлы могут поставлять данные и отводить результаты с той скоростью, с которой он их образует. Хотя, опять же, всё дело во времени, т.к. за 100 мсек данных в программу ввести можно однозначно меньше, чем за секунду. Я же ориентируюсь на цикл обработки данных, равным именно 100 мсек.


Вопрос: Так как на данный момент есть указание от Заказчика на "имопортозамещение", параллельно рассматриваем **** и Segnetics. У последнего есть сложности с большим объемом контролируемых каналов, а точнее - ограничение по ПИДам на единичном контроллере в одном программном цикле.


Ответ: Я скажу на это следующее. Если задаться временем программного цикла, равным 100 мсек - этого времени с лихвой хватает на любые задачи ИТП/ЦТП/Вентиляции, то самый слабый наш контроллер, Пиксель-12, без проблем отработает 56 регуляторов за 78 мсек. Подтверждение на прилагаемой картинке - это скриншот из режима отладки, в этом режиме контроллер работает медленнее на 30%. Обратите внимание на выход "RealTick" блока Device(kernel) - это реальное время выполнения полного цикла программы.

Для сравнения, та же программа на контроллере SMH2G(i) - время выполнения 3 мсек. И дополнительно скриншот с более, чем 36000 FBD (смотрите на счётчик внизу справа), набранных именно ПИД-регуляторами. Сколько их штук получилось я, если честно даже не готов сказать - не считал, просто давил "Ctrl+V, вставить из буфера", на калькуляторе получилось больше полутора тысяч. Обратите внимание на время выполнения полного цикла - 38 мсек.

Trim5 имеет в разы бОльшее быстродействие. SMH4 процентов на 10 быстрее Trim5. Matrix имеет быстродействие, аналогичное SMH4.

Arsie
18.07.2016, 16:51
Таблица быстродействия контроллеров в математике


Важное уточнение! Невозможно правильно указать быстродействие на одну операцию, т.к. перед выполнением математических действий контроллер оптимизирует расчёты исходя из размерностей и значений операндов. Поэтому будут указаны два значения:

* Наилучшее значение, полученное в случае хорошей оптимизируемости операндов. Это те случаи, когда один из операндов равен нулю или нацело делится на двойку и другие.

* Наихудшее значение, полученное в случае, когда ни одна из оптимизаций не сработала.

---------------------------------

SMH2010, 1000 FBD

Сложение и вычитание, тип INTEGER: 30 мсек / 30 мсек

Умножение, тип INTEGER: 33 мсек / 33 мсек

Деление, тип INTEGER: 50 мсек / 50 мсек

Сложение и вычитание, тип LONG: 32 мсек / 32 мсек

Умножение, тип LONG: 37 мсек / 37 мсек

Деление, тип LONG: 95 мсек / 85 мсек

Сложение и вычитание, тип REAL: 36 мсек / 41 мсек

Умножение, тип REAL: 36 мсек / 48 мсек

Деление, тип REAL: 35 мсек / 71 мсек



SMH2G, 1000 FBD

Сложение и вычитание, тип INTEGER: 28 мсек / 28 мсек

Умножение, тип INTEGER: 30 мсек / 30 мсек

Деление, тип INTEGER: 48 мсек / 49 мсек

Сложение и вычитание, тип LONG: 30 мсек / 30 мсек

Умножение, тип LONG: 35 мсек / 35 мсек

Деление, тип LONG: 100 мсек / 83 мсек

Сложение и вычитание, тип REAL: 35 мсек / 45 мсек

Умножение, тип REAL: 34 мсек / 57 мсек

Деление, тип REAL: 35 мсек / 110 мсек



SMH2G(i), 1000 FBD

Сложение и вычитание, тип INTEGER: 0.5 мсек

Умножение, тип INTEGER: 0.4 мсек

Деление, тип INTEGER: 0.7 мсек

Сложение и вычитание, тип LONG: 0.5 мсек

Умножение, тип LONG: 0.4 мсек

Деление, тип LONG: 0.9 мсек

Сложение и вычитание, тип REAL: 0.9 мсек

Умножение, тип REAL: 1.2 мсек

Деление, тип REAL: 1.6 мсек


TRIM5, SMH4, Matrix, 1000 FBD

Сложение и вычитание, тип INTEGER: 0.4 мсек

Умножение, тип INTEGER: 0.4 мсек

Деление, тип INTEGER: 0.4 мсек

Сложение и вычитание, тип LONG: 0.4 мсек

Умножение, тип LONG: 0.3 мсек

Деление, тип LONG: 0.4 мсек

Сложение и вычитание, тип REAL: 0.4 мсек

Умножение, тип REAL: 0.4 мсек

Деление, тип REAL: 0.4 мсек

Arsie
18.07.2016, 18:36
Таблица быстродействия контроллеров в логике



Тестовая программа из 1000 блоков AND, OR, XOR и NOT в равных долях.

SMH2010: 20 мсек

SMH2G: 20 мсек

SMH2G(i): 0.4 мсек

TRIM5, SMH4, Matrix: 0.3 мсек



Тестовая программа из 1000 блоков MUX() и DMUX() в равных долях.

SMH2010: 47 мсек

SMH2G: 47 мсек

SMH2G(i): 0.8 мсек

TRIM5, SMH4, Matrix: 0.5 мсек



Тестовая программа из 1000 блоков RS.


SMH2010: 33 мсек / 33 мсек

SMH2G: 34 мсек / 35 мсек

SMH2G(i): 0.5 мсек / 0.5 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.2 мсек



Тестовая программа из 1000 блоков CTU(16) и CTD(16) в равных долях.


SMH2010: 45 мсек / 45 мсек

SMH2G: 43 мсек / 44 мсек

SMH2G(i): 0.8 мсек / 0.8 мсек

TRIM5, SMH4, Matrix: 0.5 мсек / 0.5 мсек



Тестовая программа из 1000 блоков CTUD(16).


SMH2010: 45 мсек / 45 мсек

SMH2G: 43 мсек / 44 мсек

SMH2G(i): 0.8 мсек / 0.8 мсек

TRIM5, SMH4, Matrix: 0.5 мсек / 0.5 мсек



Тестовая программа из 1000 блоков CNTR(16).


SMH2010: 49 мсек / 52 мсек

SMH2G: 48 мсек / 49 мсек

SMH2G(i): 0.8 мсек / 0.9 мсек

TRIM5, SMH4, Matrix: 0.5 мсек / 0.5 мсек



Тестовая программа из 1000 блоков ROR(16), ROL(16), SHR(16) и SHL(16) в равных долях.


SMH2010: 42 мсек

SMH2G: 42 мсек

SMH2G(i): 0.4 мсек

TRIM5, SMH4, Matrix: 0.1 мсек



Тестовая программа из 1000 блоков ^D и D в равных долях.


SMH2010: 28 мсек / 30 мсек

SMH2G: 28 мсек / 30 мсек

SMH2G(i): 0.5 мсек / 0.5 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.2 мсек



Тестовая программа из 1000 блоков ^REG(int) и REG(int) в равных долях.


SMH2010: 30 мсек / 33 мсек

SMH2G: 31 мсек / 34 мсек

SMH2G(i): 0.6 мсек / 0.65 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.25 мсек



Тестовая программа из 1000 блоков ^REG(long), REG(long), ^REG(real) и REG(real) в равных долях.


SMH2010: 33 мсек / 39 мсек

SMH2G: 34 мсек / 39 мсек

SMH2G(i): 0.65 мсек / 0.95 мсек

TRIM5, SMH4, Matrix: 0.3 мсек / 0.5 мсек



Тестовая программа из 1000 блоков CMP(int).


SMH2010: 37 мсек / 37 мсек

SMH2G: 38 мсек / 34 мсек

SMH2G(i): 0.6 мсек / 0.6 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.2 мсек



Тестовая программа из 1000 блоков CMP(long).


SMH2010: 39 мсек / 39 мсек

SMH2G: 37 мсек / 37 мсек

SMH2G(i): 0.6 мсек / 0.6 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.2 мсек



Тестовая программа из 1000 блоков CMP(real).


SMH2010: 41 мсек / 42 мсек

SMH2G: 52 мсек / 52 мсек

SMH2G(i): 1.3 мсек / 1.3 мсек

TRIM5, SMH4, Matrix: 0.5 мсек / 0.5 мсек



Тестовая программа из 1000 блоков MINMAX(int).


SMH2010: 33 мсек / 33 мсек

SMH2G: 34 мсек / 35 мсек

SMH2G(i): 0.6 мсек / 0.6 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.2 мсек



Тестовая программа из 1000 блоков MINMAX(long).


SMH2010: 37 мсек / 37 мсек

SMH2G: 39 мсек / 39 мсек

SMH2G(i): 0.6 мсек / 0.6 мсек

TRIM5, SMH4, Matrix: 0.2 мсек / 0.2 мсек



Тестовая программа из 1000 блоков MINMAX(real).


SMH2010: 40 мсек / 41 мсек

SMH2G: 53 мсек / 55 мсек

SMH2G(i): 1.3 мсек / 1.3 мсек

TRIM5, SMH4, Matrix: 0.5 мсек / 0.5 мсек