exponenta event banner

coder.isColumnMajor

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

Описание

пример

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

пример

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

Примеры

свернуть все

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

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 обеспечивает эффективный доступ к памяти для любого варианта компоновки массива.

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

function bar
coder.columnMajor;
x = magic(3);
if coder.isColumnMajor(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 bar

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

bar_mex

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

свернуть все

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

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

Ограничения

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

Совет

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

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

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

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