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

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

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

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

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

model = 'ex_rowmajor_algorithm';
open_system(model);

Модель содержит блок Sum of Elements, и вход блока является массивом. По умолчанию Simulink конфигурирует модель с алгоритмами основного столбца и размещением массива основного столбца. В этом примере вы конфигурируете размещение массива этой модели как основную строку. Чтобы задать размещение массива, откройте приложение Embedded Coder, а затем откройте диалоговое окно Параметров конфигурации. На панели Генерации кода > Интерфейс установите значение параметра конфигурации Массива размещения 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, оптимизированные для параметра конфигурации размещения массива основной строки, устанавливаются в offгенератор кода использует алгоритмы большого столбца. Алгоритмы проходят по данным в основном порядке, хотя данные находятся в основном порядке строк. Этот процесс требует некоторых дополнительных операций в сгенерированном коде, что делает код менее эффективным, но в то же время приводит к более высокой точности числовых результатов. Если вам нужна более высокая точность числовых результатов, где менее эффективный код не является проблемой, рекомендуется использовать алгоритмы основной строки для размещения массива.

Сгенерируйте код при помощи алгоритмов Row-Major для размещения массива Row-Major

Чтобы включить алгоритмы основной строки, на панели Math & Data Types установите флажок параметр конфигурации Использовать алгоритмы, оптимизированные для размещения массива основной строки. Этот параметр включает алгоритмы, которые оптимизированы для размещения массива с основной строкой. Кроме того, в Командном Окне 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, оптимизированные для параметра конфигурации размещения массива основной строки, устанавливаются в onгенератор кода генерирует эффективный код. Генератор кода использует алгоритмы больших строк, которые проходят через данные в основном порядке строк, что уменьшает количество операций в сгенерированном коде. Но точность числовых результатов может быть не такой высокой, как в предыдущем примере. Таким образом, вы можете испытать незначительные числовые различия в выходе алгоритмов column-major и row-major. Если вам нужен эффективный код, где числовая точность не является проблемой, рекомендуется использовать алгоритмы основной строки для размещения массива основной строки.

Похожие темы