要提高独立(库或可执行程序)代码中为某些线性代数函数生成的代码的执行速度,请指定您想要的MATLAB®编码器™生成LAPACK调用。LAPACK是一个数值线性代数的软件库。MATLAB编码器使用LAPACKEC接口到LAPACK。如果您指定要生成LAPACK调用,并且线性代数函数的输入数组满足特定的条件,那么代码生成器将生成LAPACK调用。否则,代码生成器将为线性代数函数生成代码。
对于独立代码中的LAPACK调用,MATLAB编码器使用指定的LAPACK库。指定一个针对您的执行环境进行优化的LAPACK库。看到www.netlib.org/lapack/faq.html _what_and_where_are_the_lapack_vendors_implementations.
要在独立代码中生成LAPACK调用,您必须访问LAPACK回调类。LAPACK回调类指定LAPACK调用的LAPACK库和LAPACKE头文件。要指示您想要生成LAPACK调用并且想要使用一个特定的LAPACK库,请指定LAPACK回调类的名称。
在命令行中,设置代码配置对象属性CustomLAPACKCallback
回调类的名称。
在MATLAB编码器应用程序,自定义LAPACK库回调回调类的名称。
要指定特定LAPACK库和LAPACKE头文件的位置,请编写LAPACK回调类。与其他希望在独立代码中使用LAPACK调用的LAPACK库共享回调类。
回调类必须从抽象类派生编码器。LAPACKCallback
.使用下面的示例回调类作为模板。
classdefuseMyLAPACK <编码器。LAPACKCallback方法(静态)函数hn = getHeaderFilename(“mylapacke_custom.h”;结束函数updateBuildInfo (buildInfo buildctx) buildInfo.addIncludePaths (fullfile (pwd,“包括”));库名=“mylapack”;libPath = fullfile (pwd,“自由”);[~, linkLibExt] = buildctx.getStdLibInfo ();buildInfo。libPath addLinkObjects([库名linkLibExt),...'',真的,真的);buildInfo.addDefines (“HAVE_LAPACK_CONFIG_H”);buildInfo.addDefines (“LAPACK_COMPLEX_STRUCTURE”);buildInfo.addDefines (“LAPACK_ILP64”);结束结束结束
你必须提供getHeaderFilename
和updateBuildInfo
方法。的getHeaderFilename
方法返回LAPACKE头文件名称。在回调类的例子中,替换mylapacke_custom.h
用你的LAPACKE头文件的名字。的updateBuildInfo
方法提供了链接到LAPACK库的构建过程所需的信息。使用类似于模板中的代码的代码来指定头文件的位置和LAPACK库的完整路径名。在回调类的例子中,替换mylapack
你的LAPACK库的名字。
如果编译器只支持以结构形式表示的复万博1manbetx杂数据类型,请在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回调类useMyLAPACK
指定要使用的LAPACK库。
编写一个MATLAB函数,调用线性代数函数。例如,编写一个函数mysvd
调用MATLAB函数圣言会
.
函数s = mysvd (A)% # codegens =圣言();结束
为静态库、动态链接库或可执行程序定义代码配置对象。例如,为Windows上动态链接的库定义配置对象®平台。
cfg = coder.config (“dll”);
指定LAPACK回调类useMyLAPACK
.
cfg。CustomLAPACKCallback =“useMyLAPACK”;
回调类必须在MATLAB路径上。
生成的代码。指定输入一个
是一个500乘500的双精度数组。
codegenmysvdarg游戏{0 (500)}配置cfg报告
如果一个
足够大时,代码生成器生成LAPACK调用圣言会
.下面是调用的LAPACK库函数的示例圣言会
.
info_t = LAPACKE_dgesvd(LAPACK_COL_MAJOR, 'N', 'N', (lapack_int)500, (lapack_int)500, &A[0], (lapack_int)500, &S[0], NULL, (lapack_int)1, NULL, (lapack_int)1, &superb[0]);
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));