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

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

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

| |

Похожие темы