exponenta event banner

Основные алгоритмы строк для компоновки основного массива строк

В этом примере показано, как использовать основные алгоритмы строк для создания эффективного кода. Можно включить параметр конфигурации Use algoriths optimized for row-major array layout, чтобы включить эффективные алгоритмы row-major, оптимизированные для row-major array layout. Код, генерируемый с помощью основных алгоритмов, работает с более высокой скоростью и эффективным использованием памяти при работе с данными с макетом основного массива.

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

Создание кода с помощью столбцов по умолчанию - основные алгоритмы для макета главного массива строк

Открыть пример модели ex_rowmajor_algorithm.

model = 'ex_rowmajor_algorithm';
open_system(model);

Модель содержит блок Sum of Elements, а вход блока является массивом. По умолчанию Simulink настраивает модель с помощью алгоритмов «основной столбец» и компоновки массива «основной столбец». В этом примере компоновка массива этой модели настраивается как основная строка. Чтобы указать макет массива, откройте приложение Embedded Coder, а затем диалоговое окно Configuration Parameters. На панели «Создание кода» > «Интерфейс» задайте для параметра конфигурации «Макет массива» значение Row-Major вариант. Либо в окне команды MATLAB введите:

set_param(model,'ArrayLayout','Row-major');

Измените текущую папку в MATLAB на папку с возможностью записи. Затем создайте код из модели с помощью slbuild или нажатием клавиш Ctrl + B.

currentDir = pwd;
[~,cgDir] = rtwdemodir();
% Generate code and capture the code generation information to Value
Value=evalc('slbuild(''ex_rowmajor_algorithm'')');

Проверка созданного ex_rowmajor_algorithm_step пошаговая функция в ex_rowmajor_algorithm.c.

file = fullfile('ex_rowmajor_algorithm_ert_rtw','ex_rowmajor_algorithm.c');
rtwdemodbtype(file,'/* Model step function */','/* Model initialize function',1,1);
/* Model step function */
void ex_rowmajor_algorithm_step(void)
{
  int32_T i;
  int32_T i_0;
  int32_T tmp;

  /* Sum: '<Root>/Sum of Elements Dim1' incorporates:
   *  Constant: '<Root>/Constant1'
   */
  ex_rowmajor_algorithm_Y.Out2 = -0.0F;
  for (i = 0; i < 2; i++) {
    for (i_0 = 0; i_0 < 3; i_0++) {
      tmp = (i_0 << 1) + i;
      ex_rowmajor_algorithm_Y.Out2 =
        (((ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp] +
           ex_rowmajor_algorithm_Y.Out2) +
          ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp + 6]) +
         ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp + 12]) +
        ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp + 18];
    }
  }

  /* End of Sum: '<Root>/Sum of Elements Dim1' */
}

Если для параметра «Макет массива» задано значение Row-major и параметр конфигурации Use algoriths optimized for row-major array layout имеет значение offгенератор кода использует основные алгоритмы столбцов. Алгоритмы пересекают данные в основном порядке столбцов, хотя данные находятся в основном порядке строк. Этот процесс требует некоторых дополнительных операций в сгенерированном коде, что делает код менее эффективным, но в то же время приводит к более высокой точности числовых результатов. Если требуется более высокая точность числовых результатов, когда менее эффективный код не является проблемой, рекомендуется использовать алгоритмы «основной столбец» для компоновки массива «основная строка».

Создание кода с помощью алгоритмов «основные строки» для компоновки «основные строки»

Чтобы включить алгоритмы основных строк, на панели Математика и типы данных (Math & Data Types) установите флажок параметр конфигурации Использовать алгоритмы, оптимизированные для компоновки массива основных строк (Use algoriths optimized for row-major array layout). Этот параметр позволяет использовать алгоритмы, оптимизированные для компоновки основных массивов строк. Либо в окне команды MATLAB введите:

set_param(model,'UseRowMajorAlgorithm','on');

После включения основных алгоритмов строк создайте код.

Value=evalc('slbuild(''ex_rowmajor_algorithm'')');

Проверка созданного ex_rowmajor_algorithm_step пошаговая функция в ex_rowmajor_algorithm.c.

file = fullfile('ex_rowmajor_algorithm_ert_rtw','ex_rowmajor_algorithm.c');
rtwdemodbtype(file,'/* Model step function */','/* Model initialize function',1,1);
/* Model step function */
void ex_rowmajor_algorithm_step(void)
{
  int32_T i;

  /* Sum: '<Root>/Sum of Elements Dim1' incorporates:
   *  Constant: '<Root>/Constant1'
   */
  ex_rowmajor_algorithm_Y.Out2 = -0.0F;
  for (i = 0; i < 24; i++) {
    ex_rowmajor_algorithm_Y.Out2 +=
      ex_rowmajor_algorithm_ConstP.Constant1_Value[i];
  }

  /* End of Sum: '<Root>/Sum of Elements Dim1' */
}

По сравнению с предыдущим кодом, если для формата Array установлено значение Row-major и параметр конфигурации Use algoriths optimized for row-major array layout имеет значение onгенератор кода генерирует эффективный код. Генератор кода использует алгоритмы основной строки, которые пересекают данные в порядке основной строки, что уменьшает количество операций в сгенерированном коде. Но точность числовых результатов может быть не такой высокой, как в предыдущем примере. Таким образом, вы можете испытывать незначительные числовые различия в выходе алгоритмов «столбец-большая» и «строка-большая». Если требуется эффективный код, где числовая точность не является проблемой, рекомендуется использовать алгоритмы мажор-строка для компоновки мажор-строка массива.

Связанные темы