代码替换数据对齐
代码替换库可以使数据对象传递给一个替换函数到指定的边界。
代码替换数据对齐
您可以利用函数实现,需要对齐的数据来优化应用程序的性能。配置数据对齐的功能实现:
代码替换条目中指定数据的对齐要求。为每个实现函数参数指定对齐单独或集体所有函数参数。看到函数参数指定数据一致性要求。
指定数据对齐功能和一个或多个编译器的语法。包括对齐规范在图书馆登记进入
rtwTargetInfo.m
文件。看到为编译器提供数据校准规范。注册库包含表条目和校准规范的对象。
配置代码生成器使用的代码替换库和生成代码。观察结果。
有关示例,请参见基本代码替换数据对齐的例子”和“数据对齐功能实现部分优化生成的代码通过开发和使用代码替换库——仿真软件®金宝app示例页面。
函数参数指定数据一致性要求
指定数据的对齐要求代码替换条目中一个论点:
如果你定义一个替换函数的代码替换表登记文件,创建一个参数描述符对象(
RTW.ArgumentDescriptor
)。使用它的AlignmentBoundary
属性来指定所需的对齐边界和分配对象的说法描述符
财产。如果你定义一个使用替换功能代码替换工具,在映射信息选项卡,参数属性部分替代函数,输入一个值对齐值参数。
的AlignmentBoundary
财产(或对齐值参数)指定对齐边界数据传递给函数的参数,在的字节数。的AlignmentBoundary
属性是有效的只有可寻址的对象,包括矩阵和指针参数。它并不适用于值参数。有效值:
1
(默认)——如果数据金宝appSimulink.Bus
,金宝appSimulink.Signal
,或金宝appSimulink.Parameter
对象,指定代码生成器根据使用情况确定一个最优的对齐。否则,指定没有这个论点的对齐要求。正整数是2的幂,不超过128——指定的字节数的边界。的起始数据分配内存地址函数参数是指定值的倍数。如果你指定一个对齐边界不到的自然调整参数数据类型,对齐指令发射在生成的代码。然而,目标编译器忽略了指令。
下面的代码指定了AlignmentBoundary
为一个论点16字节。
hLib = RTW.TflTable;输入= RTW.TflCOperationEntry;arg = getTflArgFromString (hLib,‘u1’,“单*”);desc = RTW.ArgumentDescriptor;desc.AlignmentBoundary = 16;参数。描述符= desc;entry.Implementation.addArgument (arg);
等效边界对齐规范的代码替换工具对话框在这个图。
请注意
如果您的模型进口金宝appSimulink.Bus
,金宝appSimulink.Parameter
,或金宝appSimulink.Signal
对象,在对象属性指定一个对齐边界,使用对齐财产。有关更多信息,请参见金宝appSimulink.Bus
,金宝appSimulink.Parameter
,金宝appSimulink.Signal
。
为编译器提供数据校准规范
支持数金宝app据对齐在生成的代码,描述数据对齐功能和语法编译器的代码替换库登记。为每个编译器提供一个或多个对齐规范在图书馆注册表项。
描述一个编译器的数据对齐功能和语法:
如果你定义一个代码替换库登记进入
rtwTargetInfo.m
定制文件,添加一个或多个AlignmentSpecification
对象一个RTW.DataAlignment
对象。附加RTW.DataAlignment
对象的TargetCharacteristics
对象的注册表项。的
RTW.DataAlignment
对象也有房产DefaultMallocAlignment
指定默认的对齐边界,在字节,编译器使用动态分配的内存。如果代码生成器使用动态内存分配数据对象参与代码替换,该值确定是否更换的内存满足一致性要求。如果不是这样,代码生成器不使用替代。的默认值DefaultMallocAlignment
是1
,表明动态分配的内存使用的默认对齐边界是未知的。在这种情况下,代码生成器使用的自然对齐数据类型来决定是否允许一个替换。此外,您可以指定对齐边界复杂类型使用
addComplexTypeAlignment
函数。如果你使用代码生成一个定制文件的函数替换工具,填写以下字段为每个编译器。
单击加号(+)符号添加额外的编译器规格。
为每个数据校准规范,提供以下信息。
|
对话框参数 |
描述 |
---|---|---|
|
对齐类型 |
单元阵列预定义的枚举字符串,指定类型的对齐这个规范支持。金宝app
必须指定至少每个校准规范 |
|
对齐的位置 |
预先定义的枚举字符串指定的位置必须将编译器校准对齐类型指令
对齐类型以外 |
|
对齐的语法 |
指定对齐指示编译器支持的字符串。金宝app字符串被注册为一个语法模板,有占位符。这些占位符支持:金宝app
例如,gcc编译器,您可以指定 |
|
金宝app支持的语言 |
单元阵列指定此校准规范适用的语言中 |
这是一个数据对齐规范GCC编译器:
da = RTW.DataAlignment;= RTW.AlignmentSpecification;作为。AlignmentType = {“DATA_ALIGNMENT_LOCAL_VAR”,…“DATA_ALIGNMENT_STRUCT_FIELD”,…“DATA_ALIGNMENT_GLOBAL_VAR”};作为。AlignmentSyntaxTemplate =“使用__attribute__((对齐(% n)))”;作为。AlignmentPosition =“DATA_ALIGNMENT_PREDIRECTIVE”;作为。金宝appSupportedLanguages = {“c”,“c++”};da.addAlignmentSpecification ();tc = RTW.TargetCharacteristics;tc。DataAlignment = da;
这是中相应的规范生成的定制对话框的代码替换工具。
基本代码替换数据对齐的例子
完整的工作流程的一个简单的示例代码替换为指定数据对齐:
创建并保存以下代码替换表定义文件,
crl_table_mmul_4x4_single_align.m
。这个表定义了一个替换条目*(乘法)运营商单
数据类型,和输入维度(4,4)
。入口还指定了数据的16字节边界对齐每个替代函数参数。入口表达了要求的起始数据分配内存地址函数参数在代码生成是16的倍数。函数hLib = crl_table_mmul_4x4_single_align% CRL_TABLE_MMUL_4x4_SINGLE_ALIGN—描述矩阵算子条目的数据对齐hLib = RTW.TflTable;输入= RTW.TflCOperationEntry;setTflCOperationEntryParameters(条目,…“关键”,“RTW_OP_MUL”,…“优先”,90,…“ImplementationName”,“matrix_mul_4x4_s”);%概念参数createAndAddConceptualArg(条目,“RTW.TflArgMatrix”,…“名字”,“日元”,…“IOType”,“RTW_IO_OUTPUT”,…“基类型”,“单一”,…“DimRange”4 [4]);createAndAddConceptualArg(条目,“RTW.TflArgMatrix”,…“名字”,‘u1’,…“基类型”,“单一”,…“DimRange”4 [4]);createAndAddConceptualArg(条目,“RTW.TflArgMatrix”,…“名字”,“u2”,…“基类型”,“单一”,…“DimRange”4 [4]);%实现参数arg = getTflArgFromString (hLib,“日元”,“空白”);参数。IOType =“RTW_IO_OUTPUT”;entry.Implementation.setReturn (arg);arg = getTflArgFromString (hLib,“日元”,“单*”);参数。IOType =“RTW_IO_OUTPUT”;desc = RTW.ArgumentDescriptor;desc.AlignmentBoundary = 16;参数。描述符= desc;entry.Implementation.addArgument (arg);arg = getTflArgFromString (hLib,‘u1’,“单*”);desc = RTW.ArgumentDescriptor;desc.AlignmentBoundary = 16;参数。描述符= desc;entry.Implementation.addArgument (arg);arg = getTflArgFromString (hLib,“u2”,“单*”);desc = RTW.ArgumentDescriptor;desc.AlignmentBoundary = 16;参数。描述符= desc;entry.Implementation.addArgument (arg);hLib.addEntry(入口);
创建并保存以下注册文件,
rtwTargetInfo.m
。如果你想编译生成的代码在这个例子中,第一次修改AlignmentSyntaxTemplate
编译器使用的财产。例如,MSVC的编译器,更换gcc模板规范__attribute__((对齐(% n)))
与使用__declspec(对齐(% n))
。函数rtwTargetInfo (cm)% rtwTargetInfo函数来注册一个代码替换库(CRL)%用于代码生成% locCrlRegFcn在当地注册CRL定义函数cm.registerTargetInfo (@locCrlRegFcn);结束% RTWTARGETINFO年底%本地函数定义一个包含crl_table_mmul_4x4_single_align CRL函数thisCrl = locCrlRegFcn%创建一个校准规范对象,假定gcc= RTW.AlignmentSpecification;作为。AlignmentType = {“DATA_ALIGNMENT_LOCAL_VAR”,…“DATA_ALIGNMENT_GLOBAL_VAR”,…“DATA_ALIGNMENT_STRUCT_FIELD”};作为。AlignmentSyntaxTemplate =“使用__attribute__((对齐(% n)))”;as.金宝appSupportedLanguages = {“c”,“c++”};%添加校准规范对象da = RTW.DataAlignment;da.addAlignmentSpecification ();%数据对齐对象添加到目标特征tc = RTW.TargetCharacteristics;tc。DataAlignment = da;%实例化一个CRL注册表项thisCrl = RTW.TflRegistry;%定义CRL属性thisCrl。Name =的数据对齐的例子;thisCrl。描述=替代数据对齐的例子;thisCrl。TableList = {“crl_table_mmul_4x4_single_align”};thisCrl。TargetCharacteristics = tc;结束% LOCCRLREGFCN年底
注册你的库代码生成器,而无需重新启动MATLAB®,输入这个命令:
RTW.TargetRegistry.getInstance (“重置”);
配置代码生成器来使用您的代码替换库。
生成代码和代码生成报告。
审查代码替换。例如,检查是否一个乘法操作取代
matrix_mul_4x4_s
函数调用。在mmalign.h
,检查gcc是否对齐指令__attribute__((对齐(16)))
使生成的函数变量。