exponenta event banner

coder.isRowMajor

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

Описание

пример

coder.isRowMajor распознается как true в сгенерированном коде, если текущая функция использует макет массива «строка-большая». Используйте функцию в качестве выражения в потоке управления (if, else, switch) заявления.

пример

coder.isRowMajor(arg) разрешается как true, если текущая переменная использует макет массива «строка-большая».

Примеры

свернуть все

Чтобы запросить макет массива функции во время компиляции, используйте coder.isRowMajor или coder.isColumnMajor. Этот запрос может быть полезен для специализации созданного кода при использовании основных функций строк и столбцов. Например, рассмотрим эту функцию:

function S = addMatrixRouted(A,B)
 if coder.isRowMajor
     %execute this code if row major
     S = addMatrix_OptimizedForRowMajor(A,B); 
 elseif coder.isColumnMajor
     %execute this code if column major
     S = addMatrix_OptimizedForColumnMajor(A,B);
 end

Функция addMatrixRouted ведет себя по-разному в зависимости от того, используется ли компоновка строка-основная или компоновка столбец-главная. Формат, используемый функцией, например, может зависеть от того, вызывается ли она из функции, содержащей coder.rowMajor или coder.columnMajor. Когда addMatrixRouted использует макет основной строки, он вызывает addMatrix_OptimizedForRowMajor функция, которая имеет эффективный доступ к памяти для основных данных строки. Когда функция использует компоновку «основной столбец», она вызывает версию addMatrix функция оптимизирована для основных данных столбцов.

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

Рассмотрим функцию foo:

function foo
coder.rowMajor;
x = magic(3);
if coder.isRowMajor(x)
    fprintf('This will always be displayed in generated code.\n');
else
    fprintf('This will never be displayed in generated code.\n');
end
end

Создать код:

codegen foo

Для запуска функции MEX введите:

foo_mex

Входные аргументы

свернуть все

Переменная для запроса макета массива.

Пример: coder.isRowMajor(x);

Ограничения

  • Невозможно запросить макет массива поля структуры или свойства.

Совет

  • Вне создания и моделирования кода, coder.isRowMajor всегда имеет значение false.

  • Если coder.isRowMajor всегда принимает значение true для кода, другие ветви в if игнорируются генератором кода. В противном случае для каждого макета массива создается один экземпляр текущей функции.

Представлен в R2018a