主要内容

加速线性代数的代码生成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回调类的名称。在“配置参数”对话框中设置自定义LAPACK库回调更改回调类的名称,例如,useMyLAPACK

写LAPACK回调类

要指定特定LAPACK库和LAPACKE头文件的位置,请编写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”);结束结束结束

你必须提供getHeaderFilenameupdateBuildInfo方法。的getHeaderFilename方法返回LAPACKE头文件名称。在回调类的例子中,替换mylapacke_custom.h用你的LAPACKE头文件的名字。的updateBuildInfo方法提供了链接到LAPACK库的构建过程所需的信息。使用类似于模板中的代码的代码来指定头文件的位置和LAPACK库的完整路径名。在回调类的例子中,替换mylapack你的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库。

  1. 创建一个模型金宝app®模型。

  2. 添加一个MATLAB函数块到模型。

  3. MATLAB函数块,添加调用线性代数函数的代码。例如,添加函数mysvd调用MATLAB®函数圣言会

    函数s = mysvd (A)% # codegens =圣言();结束

  4. 添加一个常数街区的左边MATLAB函数块。将值设置为0 (500)

  5. 添加一个外港街区的右边MATLAB函数块。

  6. 连接块。

  7. 设置配置参数>代码生成>先进的参数>自定义LAPACK库回调参数useMyLAPACK

    回调类必须在MATLAB路径上。

  8. 构建的模型。

如果输入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, &superb[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));

另请参阅

相关的话题

外部网站