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

Чтобы улучшить скорость выполнения алгоритмов или упростить интегрирование с внешним кодом или данными, можно задать отображения замены кода, которые применяют определенное размещение для хранения элементов массива в памяти. По умолчанию генератор кода хранит элементы массива в размещении с основным столбцом. Чтобы изменить размещение на row-major, измените значение параметра entry 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. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы к getTflArgFromString и 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. Сохраните файл определения таблицы. Чтобы назвать файл, используйте имя функции определения таблицы. Затем сгенерируйте код и отчет о генерации кода и проверьте замены кода.

См. также

| |

Похожие темы