Генерация кода матриц и массивов

MATLAB® сохраняет матричные данные и массивы (1-D, 2-D,...) в формате основной столбец в качестве вектора. Simulink® и генератор кода может хранить данные массива в формате основной или основной строки. Для массива, хранящегося в размещении основного столбца, элементы столбцов смежны в памяти. В основных размещениях элементы строк смежны. Размещение массива также упоминается как порядок, формат и представление. Порядок хранения элементов может быть важным для интегрирования, удобства использования и эффективности. Некоторые алгоритмы лучше работают с данными, хранящимися в конкретном порядке.

Языки и окружения программирования предполагают одно размещение массива для всех данных. MATLAB и Фортран по умолчанию используют размещение основной столбца, в то время как C и C++ используют размещение основной строки. С помощью Coder™ Simulink можно сгенерировать код C/C + +, который использует размещение основной строки или размещение основной столбца.

Устройство хранения массивов в памяти компьютера

Память компьютера хранит данные в терминах одномерных массивов. Для примера, когда вы объявляете матрицу 3 на 3, программное обеспечение хранит эту матрицу как одномерный массив с девятью элементами. По умолчанию MATLAB хранит эти элементы с размещением массива основного столбца. Элементы каждого столбца смежны в памяти.

Рассмотрим матрицу A:

A =
    1   2   3
    4   5   6
    7   8   9
A переводится в массив длиной 9 в следующем порядке:
A(1) = A(1,1) = 1; 
A(2) = A(2,1) = 4; 
A(3) = A(3,1) = 7; 
A(4) = A(1,2) = 2; 
A(5) = A(2,2) = 5;
и так далее.

В формате основной колонки доступ к следующему элементу массива в памяти осуществляется путем увеличения первого индекса массива. Для примера эти пары элементов сохраняются последовательно в памяти:

  • A(i) и A(i+1)

  • B(i,j) и B(i+1,j)

  • C(i,j,k) и C(i+1,j,k)

Матрица A представлен в памяти по умолчанию с таким расположением:

     1     4     7     2     5     8     3     6     9

В размещении массива с основной строкой язык программирования сохраняет элементы строк непрерывно в памяти. В размещении с основной строкой элементы массива хранятся как:

     1     2     3     4     5     6     7     8     9

Можно хранить N-мерные массивы в основном или строковом размещении. В размещении с основным столбцом элементы из первого (крайнего левого) размерности или индекса смежны в памяти. В основной строке размещения элементы из последнего (крайнего правого) размерности или индекса смежны.

Для получения дополнительной информации о внутреннем представлении данных MATLAB, см. MATLAB Data.

Программное обеспечение генерации кода по умолчанию использует формат основной колонки по нескольким причинам:

  • Мир обработки сигналов и массивов в значительной степени находится в основной для столбцов размещении массива: библиотеках MATLAB, LAPack, Fortran90 и DSP.

  • Столбец эквивалентен каналу при обработке на основе кадров. В этом случае хранилище основной емкости столбца является более эффективным.

  • Массив с основным столбцом самосогласован со своими подматрицами компонентов:

    • Массив 2-D основной столбец является простой конкатенацией 1-D массивов.

    • Основной трехмерный массив столбца является простой конкатенацией 2-D массивов.

    • stride - это количество расположений памяти для индекса к следующему элементу той же размерности. Шаг первой размерности является одним элементом. Шаг n-го элемента измерения является продуктом размеров нижних размерностей.

    • Основной для строк n-D массивы имеют шаг 1 для наивысшей размерности. Манипуляции с Submatrix обычно получают доступ к набору данного , имеющего разброса в памяти, что не позволяет эффективно индексировать.

C использует формат основной строки. По умолчанию MATLAB и Simulink используют основной формат столбца. Можно сконфигурировать программное обеспечение генерации кода, чтобы сгенерировать код с размещением массива основной строки. Если вы интегрируете внешние Коды С с сгенерированным кодом, смотрите факторы, перечисленные в этой таблице.

ДействиеРассмотреть
Сконфигурируйте размещение массива модели для генерации кода.В диалоговом окне Параметров конфигурации установите значение параметра конфигурации модели Array layout Column-major или Row-major.
Включите эффективные алгоритмы основной строки для симуляции и генерации кода.Выберите Use algorithms optimized for row-major array layout параметра конфигурации модели.
Интеграция внешних функций кода С с сгенерированным кодом в размещение массива с основной строкой.

Создайте S-функции, которые интегрируют функции внешнего кода с сгенерированным кодом при помощи:

Используйте блок C Caller для вызова внешних функций C в Simulink. Задайте размещение массива пользовательских функций C с помощью параметра конфигурации модели Default function array layout.

Вы также можете использовать coder.ceval в блоке MATLAB Function. Смотрите Интерфейс с основными данными строк в Блоке MATLAB function.

Параметры матрицы генератора кода

Скомпилированный файл модели, model.rtw, представляет матрицы как векторы символов в синтаксисе MATLAB, без подразумеваемого формата памяти. Этот формат позволяет вам скопировать вектор символов из .rtw файл, вставьте его в файл MATLAB и убедитесь, что MATLAB распознает его.

Основной столбец Размещения

Для примера матрица 3 на 3 в блоке Constant

    1   2   3
    4   5   6
    7   8   9
хранится в model.rtw как
Parameter {
      Identifier	      "Constant_Value"
      LogicalSrc	      P0
      Protected		      no
      Value		      [1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0]
      CGTypeIdx		      18
      ContainerCGTypeIdx      19
      ReferencedBy	      Matrix(1,4)
[[0, -1, 0, 0];]
      GraphicalRef	      Matrix(1,2)
[[0, 1];]
      BHMPrmIdx		      0
      GraphicalSource	      [0, 1]
      OwnerSysIdx	      [0, -1]
      VarGroupIdx	      [1, 0]
      WasAccessedAsVariable   1
    }

The model_data.c файл объявляет фактическое хранилище для матричного параметра. Вы можете увидеть, что формат в основном размещении.

Parameters model_P = {
  /* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]]
   * Referenced by: '<Root>/Constant  '
   */
  { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 }
};

Основная строка Размещения

Для примера матрица 3 на 3 в блоке Constant

    1   2   3
    4   5   6
    7   8   9
хранится в model.rtw как
Parameter {
      Identifier	      "Constant_Value"
      LogicalSrc	      P0
      Protected		      no
      Value		      [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
      CGTypeIdx		      18
      ContainerCGTypeIdx      19
      ReferencedBy	      Matrix(1,4)
[[0, -1, 0, 0];]
      GraphicalRef	      Matrix(1,2)
[[0, 1];]
      BHMPrmIdx		      0
      GraphicalSource	      [0, 1]
      OwnerSysIdx	      [0, -1]
      VarGroupIdx	      [1, 0]
      WasAccessedAsVariable   1
    }

The model_data.h файл объявляет фактическое хранилище для матричного параметра. Вы можете увидеть, что формат в основном размещении.

Parameters model_P = {
  /* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]]
   * Referenced by: '<Root>/Constant  '
   */
  { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 }
};

Внутреннее хранилище данных для массивов сложных чисел

Форматирование внутреннего хранилища данных Simulink и генератора кода отличается от форматирования внутреннего хранилища данных MATLAB только хранением комплексных массивов чисел. В MATLAB действительная и мнимая части хранятся в отдельных массивах. В Simulink и генераторе кода части хранятся в перемеженном формате. Цифры в памяти чередуются реальные, мнимые, реальные, мнимые и так далее. Это соглашение позволяет эффективно реализовывать маленькие сигналы на линиях Simulink, для блоков Mux и других блоков виртуальной манипуляции сигналами. Например, сигналы не активно копируют свои входы, только ссылки.

Неподдерживаемые блоки для генерации кода Row-Major

Генератор кода не поддерживает эти блоки для генерации кода в размещении массива с основной строкой.

Непрерывный

  • Производная

  • Интегратор

  • Интегратор с ограниченной ответственностью

  • Интегратор второго порядка

  • Интегратор, Second-Order Limited

  • ПИД-регулятор

  • ПИД-регулятор (2DOF)

  • Пространство состояний

  • Передача Fcn

  • Задержка транспортировки

  • Переменная задержка по времени

  • Переменная задержка транспорта

  • Ноль-полюс

Пользовательские функции

  • Интерпретированная функция MATLAB

  • Level-2 S-функцию MATLAB

  • Система MATLAB

Источники

  • Из электронной таблицы

Атрибуты сигнала

  • IC

Ограничения для генерации кода Row-Major

  • Сигналы переменного размера не поддерживаются для генерации кода основной строки.

Похожие темы