使用查找表块的模型的列-主布局到行-主布局转换
万博1manbetxSimulin万博1manbetxk®Coder™支持行主数组布局,用于代码生成。可以将使用行主数组布局的现有应用程序与行主数组布局中生成的代码集成在一起。当您将带有查找表(LUT)块的现有模型从列主数组布局转换为行主数组布局时,建议将LUT块从列主算法转换为行主算法。使用行主算法生成的代码在对行主数组布局的表数据进行操作时具有最佳的速度和内存使用量。使用列主算法生成的代码在列主数组布局下性能最好。
这个例子展示了将一个带有LUT块的模型从列主布局转换为行主布局的工作流,从而在行主数组布局上实现最佳性能。
在这个例子中,你:
确定阵列布局,选择优化算法。
通过表排列保持语义。
通过使用行主算法和数组布局生成代码。
使用列主算法模拟和生成代码
1.打开示例模型rtwdemo_row_lutcol2row_workflow
.
open_system (“rtwdemo_row_lutcol2row_workflow”);
默认情况下,Simuli万博1manbetxnk将模型配置为使用列-主算法和列-主数组布局。这些参数是“配置参数”对话框中的配置参数。
数学和数据类型>使用针对行主数组布局优化的算法—该参数会影响模拟和代码生成。
代码生成>接口>阵列布局—该参数只影响代码生成。
2.在建模选项卡上,单击运行模拟模型并观察记录在工作空间变量中的输出你
.
3.在MATLAB®中将当前文件夹更改为可写文件夹。在C代码选项卡上,单击构建生成C代码。
选择行主阵列布局的优化算法
在校准领域中,经常使用行主阵列布局的表数据。要将行主表数据与现有模型连接起来,请更新列主表模型以有效地操作行主表数据。
使用针对指定数组布局进行优化的算法,以实现最佳性能。例如,当阵列布局设置为行
在代码生成期间。
1.要启用行主算法,请打开“配置参数”对话框。在数学和数据类型窗格中,选择配置参数使用针对行主数组布局优化的算法.或者,在MATLAB命令窗口中输入:
set_param (“rtwdemo_row_lutcol2row_workflow”,“UseRowMajorAlgorithm”,“上”);
2.点击运行模拟模型。万博1manbetxSimulink报告错误是因为它在预查找和插值块之间遇到不一致的断点和表数据。这个错误的原因是当你从列主算法切换到行主算法时发生的两个语义变化,也就是说,当你:
在插值块中从三维表中选择一个平面。
通过直接查找表块从4-D表中选择一个平面。
使用表排列保存语义
1.对于插值前的子表选择,或输出向量或2-D矩阵的直接查找,当您通过选择配置参数从列主算法切换到行主算法时,模型语义会发生变化使用针对行主数组布局优化的算法.为了保持语义并修复前面的错误,使用以下命令排列表数据:
T4d_str = get_param(“rtwdemo_row_lutcol2row_workflow /直接附近地区”,“表”);set_param (“rtwdemo_row_lutcol2row_workflow /直接附近地区”,“表”,...[“排列(”T4d_str,”,[3、4、1、2])”]);
T3d_str = get_param(“rtwdemo_row_lutcol2row_workflow / Interp2”,“表”);set_param (“rtwdemo_row_lutcol2row_workflow / Interp2”,“表”,...[“排列(”T3d_str,”,[3 1 2])”]);
2.在从文件导入表数据之前,必须重新排列文件中的表数据。这种排列使表在整个模拟和代码生成工作流中保持可调。
基于行主算法和数组布局的代码生成
在排列表数据之后,Simulink配置模型万博1manbetxrtwdemo_row_lutcol2row_workflow
用于行大调模拟。该模型等价于预配置的模型rtwdemo_row_lutcol2row_workflow_rowrow
它对表数据进行了排列,并使用了行主算法。
1.打开示例模型rtwdemo_row_lutcol2row_workflow_rowrow
.
open_system (“rtwdemo_row_lutcol2row_workflow_rowrow”);
2.要为行主代码生成设置这些模型,请打开Configuration Parameters对话框。除了启用使用针对行主数组布局优化的算法的配置参数代码生成>接口窗格中,设置配置参数阵列布局来行
选择。的阵列布局参数启用用于生成行主代码的模型。或者,在MATLAB命令窗口中输入:
%用于模型“rtwdemo_row_lutcol2row_workflow_rowrow”set_param (“rtwdemo_row_lutcol2row_workflow_rowrow”,“ArrayLayout”,“行”);%用于模型“rtwdemo_row_lutcol2row_workflow”set_param (“rtwdemo_row_lutcol2row_workflow”,“ArrayLayout”,“行”);
3.在块对话框中,检查排列的3-D表。
4.在MATLAB中将当前文件夹更改为可写文件夹。在C代码选项卡上,单击构建生成C代码。在生成的代码中,观察行主数组布局的表数据
在生成的代码中memcpy
函数替换为
循环。使用memcpy
减少用于存储数据的内存量。这种优化提高了执行速度。
观察针对行主数据优化的算法。
close_system (“rtwdemo_row_lutcol2row_workflow”, 0);close_system (“rtwdemo_row_lutcol2row_workflow_rowrow”, 0);