主要内容

加速线性代数在生成的代码MATLAB函数

提高代码的执行速度为某些线性代数函数生成MATLAB函数块,指定代码生成器产生LAPACK调用。LAPACK是数值线性代数的软件库。代码生成器使用LAPACKELAPACK C接口。如果你指定你想要产生LAPACK电话,和输入数组的线性代数函数满足一定标准,代码生成器产生LAPACK调用。否则,代码生成器生成的代码线性代数函数。

代码生成器使用您指定的LAPACK图书馆。指定一个LAPACK库优化执行环境。看到netlib.org/lapack/faq.html # _what_and_where_are_the_lapack_vendors_implementations

指定LAPACK图书馆

生成LAPACK电话,你必须访问一个LAPACK回调类。LAPACK回调类指定LAPACK图书馆和LAPACKE LAPACK调用头文件。表明你想生成LAPACK电话和您想要使用特定LAPACK图书馆,指定LAPACK回调类的名称。在配置参数对话框中,设置定制LAPACK库调回调类的名称,例如,useMyLAPACK

写LAPACK Callback类

指定一个特定的位置LAPACK图书馆和LAPACKE头文件,编写一个LAPACK回调类。与人分享的回调类想用这个LAPACK图书馆LAPACK调用生成的代码。

回调类必须来自抽象类coder.LAPACKCallback。使用这个例子callback类作为一个模板。

classdefuseMyLAPACK < coder.LAPACKCallback方法(静态)函数hn = getHeaderFilename () hn =“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.hLAPACKE头文件的名称。的updateBuildInfo方法提供了所需的信息链接LAPACK库的构建过程。使用代码模板中的代码来指定头文件的位置和LAPACK库的完整路径名。在回调类的例子中,替换mylapackLAPACK库的名称。

如果你的编译器只支持复杂的数据类型金宝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],……零(lapack_int) 1、零(lapack_int) 1、精湛的[0]);

定位LAPACK图书馆执行环境

LAPACK图书馆必须执行环境中可用。如果你LAPACK图书馆共享,使用环境变量或链接器选项来指定LAPACK库的位置。

  • 在Windows®平台,修改PATH环境变量。

  • 在Linux®平台,修改LD_LIBRARY_PATH环境变量或使用rpath链接器选项。

  • 在一个macOS平台,修改DYLD_LIBRARY_PATH环境变量或使用rpath链接器选项。

指定rpath链接器选项,您可以使用构建信息addLinkFlags方法updateBuildInfo你的方法coder.LAPACKCallback类。例如,对于一个GCC编译器:

buildInfo.addLinkFlags (sprintf (' - wl rpath、“% s”, libPath));

另请参阅

相关的话题

外部网站