主要内容

加快生成独立的代码通过使用线性代数LAPACK调用

提高代码的执行速度为某些线性代数函数生成独立的(库或可执行程序)代码,指定你想要的MATLAB®编码器™生成LAPACK调用。LAPACK是数值线性代数的软件库。MATLAB编码器使用LAPACKELAPACK C接口。如果你指定你想要产生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图书馆,指定LAPACK回调类的名称。

  • 在命令行,设置代码配置对象的属性CustomLAPACKCallback回调类的名称。

  • MATLAB编码器应用程序,定制LAPACK库调回调类的名称。

写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. 编写一个MATLAB函数调用一个线性代数函数。例如,编写一个函数mysvd调用MATLAB函数圣言会

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

  2. 静态库的代码定义一个配置对象,动态链接库,或可执行程序。例如,为一个动态链接库定义一个配置对象在一个窗口®平台。

    cfg = coder.config (“dll”);

  3. 指定LAPACK回调类useMyLAPACK

    cfg。CustomLAPACKCallback =“useMyLAPACK”;

    回调类必须在MATLAB的道路。

  4. 生成的代码。指定的输入一个是500 - 500组双打。

    codegenmysvdarg游戏{0 (500)}配置cfg报告

如果一个足够大,代码生成器产生LAPACK呼吁吗圣言会。这是调用LAPACK库函数的一个例子圣言会

info_t = LAPACKE_dgesvd (LAPACK_COL_MAJOR,“N”、“N”(lapack_int) 500, (lapack_int) 500年,和[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你的方法coder.LAPACKCallback类。例如,对于一个GCC编译器:

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

另请参阅

相关的话题

外部网站