Размещение массивов и замена кода

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

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

  1. Создайте табличный файл определения, который содержит функциональное определение. Например:

    function hTable = crl_table_rowmajor_matrix
  2. В теле функции составьте таблицу путем вызова функционального RTW.TflTable.

    hTable = RTW.TflTable;
  3. Создайте запись для отображения оператора с вызовом функции RTW.TflCOperationEntry.

    % Create operation entry
    hEnt = RTW.TflCOperationEntry;
    
  4. Установите параметры записи оператора с вызовом функции setTflCOperationEntryParameters. В вызове функции, установленном параметр ArrayLayout на ROW_MAJOR

    setTflCOperationEntryParameters(hEnt, ...
                        'Key',                      'RTW_OP_ADD', ...
                        'Priority',                 100, ...
                        'ArrayLayout',              'ROW_MAJOR', ...   
                        'ImplementationName',        'MyMul_ROW', ...
                        'ImplementationHeaderFile', 'MyMul_ROW.h', ...
                        'ImplementationSourceFile', 'MyMul_ROW.c');
  5. Создайте концептуальные аргументы y1, u1 и u2. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы RTW.TflArgMatrix и функций addConceptualArg, чтобы создать и добавить аргументы.

    arg = RTW.TflArgMatrix('y1', 'RTW_IO_OUTPUT',  'double'); 
    arg.DimRange = [2 2; 50 50]; 
    hEnt.addConceptualArg(arg); 
    
    arg = RTW.TflArgMatrix('u1', 'RTW_IO_INPUT',  'double'); 
    arg.DimRange = [2 3; 2 3]; 
    hEnt.addConceptualArg(arg); 
    
    arg = RTW.TflArgMatrix('u2', 'RTW_IO_INPUT',  'double'); 
    arg.DimRange = [3 4; 3 4]; 
    hEnt.addConceptualArg(arg); 
    
  6. Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы функции getTflArgFromString, чтобы создать аргументы. При определении возвращаемого аргумента функции реализации задайте выходной аргумент void. При определении аргумента функции реализации для концептуального выходного аргумента (y1), набор выходной аргумент оператора как дополнительный входной параметр. Отметьте его IOType, как выведено. Сделайте его тип типом указателя. setReturn удобных методов и addArgument задают, является ли аргумент возвращаемым значением или аргументом и добавляет аргумент в массив записи аргументов реализации.

    % Implementation Args  
    arg = hEnt.getTflArgFromString('unused','void'); 
    arg.IOType = 'RTW_IO_OUTPUT'; 
    hEnt.Implementation.setReturn(arg);  
    
    arg = hEnt.getTflArgFromString('u1','double*'); 
    hEnt.Implementation.addArgument(arg); 
    
    arg = hEnt.getTflArgFromString('u2','double*'); 
    hEnt.Implementation.addArgument(arg); 
    
    arg = hEnt.getTflArgFromString('y1','double*'); 
    arg.IOType = 'RTW_IO_OUTPUT'; 
    hEnt.Implementation.addArgument(arg); 
    
    arg = hEnt.getTflArgFromString('u3','uint32',2); 
    arg.Type.ReadOnly = true; 
    hEnt.Implementation.addArgument(arg); 
    
    arg = hEnt.getTflArgFromString('u4','uint32',3); 
    hEnt.Implementation.addArgument(arg); 
    
    arg = hEnt.getTflArgFromString('u5','uint32',3); 
    hEnt.Implementation.addArgument(arg); 
    
    arg = hEnt.getTflArgFromString('u6','uint32',4); 
    hEnt.Implementation.addArgument(arg); 
    
  7. Добавьте запись в заменяющую таблицу кода с вызовом функции addEntry.

    addEntry(hTable, hEnt);
  8. Сохраните табличный файл определения. Чтобы назвать файл, используйте имя табличной функции определения. Затем сгенерируйте код, и генерация кода сообщают и рассматривают замены кода.

Смотрите также

| |

Похожие темы