加速线性代数生成的代码MATLAB函数块
提高为某些线性代数函数生成的代码的执行速度MATLAB函数块,指定代码生成器生成的内容LAPACK调用。LAPACK是一个数值线性代数的软件库。代码生成器使用LAPACKEC接口到LAPACK。如果指定要生成LAPACK调用,并且线性代数函数的输入数组满足某些条件,则代码生成器将生成LAPACK调用。否则,代码生成器为线性代数函数生成代码。
代码生成器使用您指定的LAPACK库。指定针对您的执行环境优化的LAPACK库。看到www.netlib.org/lapack/faq.html _what_and_where_are_the_lapack_vendors_implementations.
指定LAPACK库
要生成LAPACK调用,必须访问LAPACK回调类。LAPACK回调类为LAPACK调用指定LAPACK库和LAPACKE头文件。若要指示您想要生成LAPACK调用,并且希望使用特定的LAPACK库,请指定LAPACK回调类的名称。2 .在“配置参数”对话框中设置自定义LAPACK库回调回调类的名称,例如,useMyLAPACK
.
写LAPACK回调类
要指定特定LAPACK库和LAPACKE头文件的位置,请编写LAPACK回调类。与其他希望在生成的代码中使用此LAPACK库进行LAPACK调用的人共享回调类。
回调类必须派生自抽象类编码器。LAPACKCallback
.使用这个示例回调类作为模板。
classdefuseMyLAPACK <编码器。LAPACKCallback方法(静态)函数hn = getHeaderFilename() hn =“mylapacke_custom.h”;结束函数updateBuildInfo(buildInfo, buildctx)“包括”));库名=“mylapack”;libPath = fullfile(pwd,“自由”);[~, linklibetxt] = buildctx.getStdLibInfo();buildInfo。addLinkObjects([libName linklibetxt], libPath,...”,真,真);buildInfo.addDefines (“HAVE_LAPACK_CONFIG_H”);buildInfo.addDefines (“LAPACK_COMPLEX_STRUCTURE”);buildInfo.addDefines (“LAPACK_ILP64”);结束结束结束
你必须提供getHeaderFilename
而且updateBuildInfo
方法。的getHeaderFilename
方法返回LAPACKE头文件名。在示例回调类中,replacemylapacke_custom.h
使用LAPACKE头文件的名称。的updateBuildInfo
方法提供构建过程链接到LAPACK库所需的信息。使用类似模板中的代码来指定头文件的位置和LAPACK库的完整路径名。在示例回调类中,replacemylapack
您的LAPACK库的名称。
如果编译器只支持表示为结构的复杂数金宝app据类型,请将这些行包含在updateBuildInfo
方法。
buildInfo.addDefines (“HAVE_LAPACK_CONFIG_H”);buildInfo.addDefines (“LAPACK_COMPLEX_STRUCTURE”);
必须指定LAPACK库使用的整数类型。不指定此整数类型可能导致错误行为或崩溃。做以下其中一件事:
中包含这些行
updateBuildInfo
方法。buildInfo.addDefines (“HAVE_LAPACK_CONFIG_H”);buildInfo.addDefines (“LAPACK_ILP64”);
或者,您也可以直接指定LAPACK库使用的整数类型。例如,如果整数类型为
很久很久
,将这一行包含在updateBuildInfo
方法。buildInfo.addDefines (“lapack_int =很久”);
通过指定LAPACK回调类生成LAPACK调用
这个例子展示了如何生成调用特定LAPACK库中的LAPACK函数的代码。对于本例,假设LAPACK回调类useMyLAPACK
指定所需的LAPACK库。
创建一个Simul金宝appink®模型。
添加一个MATLAB函数块到模型。
在MATLAB函数块,添加调用线性代数函数的代码。例如,添加函数
mysvd
调用MATLAB®函数圣言会
.函数s = mysvd(A)% # codegens = svd(A);结束
添加一个常数挡在左边MATLAB函数块。将值设置为
0 (500)
.添加一个外港块的右边MATLAB函数块。
把积木连接起来。
设置配置参数>代码生成>先进的参数>自定义LAPACK库回调参数
useMyLAPACK
.回调类必须在MATLAB路径上。
构建模型。
如果输入为mysvd
是足够大的,代码生成器产生LAPACK调用圣言会
.调用LAPACK库函数的示例圣言会
是:
info_t = LAPACKE_dgesvd(…LAPACK_COL_MAJOR, 'N', 'N', (lapack_int)500,…500年(lapack_int),和[0],(lapack_int) 500年,谨此告知[0],……NULL,(lapack_int)1, NULL,(lapack_int)1, &超级[0]);
在执行环境中找到LAPACK库
LAPACK库必须在您的执行环境中可用。如果您的LAPACK库是共享的,请使用环境变量或链接器选项来指定LAPACK库的位置。
Windows操作系统®平台,修改PATH环境变量。
Linux操作系统®平台,修改LD_LIBRARY_PATH环境变量或使用
rpath
链接器选项。在一个macOS平台,修改DYLD_LIBRARY_PATH环境变量或使用
rpath
链接器选项。
要指定rpath
链接器选项,您可以使用构建信息addLinkFlags
方法中的updateBuildInfo
你的方法编码器。LAPACKCallback
类。例如,对于GCC编译器:
buildInfo.addLinkFlags (sprintf (' - wl rpath、“% s”,libPath));