主要内容

加快在代码生成的矩阵运算MATLAB函数

提高生成某些低级代码的执行速度向量和矩阵运算(如矩阵乘法)MATLAB函数块,生产指定代码生成器布拉斯特区调用。布拉斯特区是低级的软件库向量和矩阵计算几个高度优化的特定实现。代码生成器使用CBLAS布拉斯特区C接口。如果你指定你想要产生巴拉斯电话,和输入数组的矩阵函数满足一定标准,代码生成器产生BLAS调用。否则,代码生成器生成的代码矩阵函数。

代码生成器bla库,您指定使用。指定一个布拉斯特区图书馆这是优化执行环境。

指定布拉斯特区图书馆

生产巴拉斯调用生成的代码,您必须访问巴拉斯回调类。巴拉斯callback类指定BLAS图书馆,CBLAS头文件,某些特定CBLAS接口使用C数据类型和编译器和链接器选项构建过程。

表明你想生成bla bla库,调用和使用特定bla callback类指定的名称。在配置参数对话框中,设置bla库自定义回调回调类的名称。

回调类写布拉斯

生成调用一个特定的布拉斯特区图书馆在生成的代码中,bla callback类写一个。与人分享的回调类想用这个bla bla调用在独立的代码库。

回调类必须来自抽象类coder.BLASCallback。这个例子是回调的实现类mklcallback集成的英特尔MKL布拉斯特区图书馆在Windows®平台。

classdefmklcallback < coder.BLASCallback方法(静态)函数updateBuildInfo (buildInfo ~) libPath = fullfile (pwd,“mkl”,“赢”,“自由”,“intel64”);libPriority =;libPreCompiled = true;libLinkOnly = true;填词= {“mkl_intel_ilp64.lib”“mkl_intel_thread.lib”“mkl_core.lib”};buildInfo.addLinkObjects (libs, libPath, libPriority, libPreCompiled,libLinkOnly);buildInfo.addLinkObjects (“libiomp5md.lib”fullfile (matlabroot“本”,“win64”)、libPriority libPreCompiled libLinkOnly);buildInfo.addIncludePaths (fullfile (pwd,“mkl”,“赢”,“包括”));buildInfo.addDefines (“-DMKL_ILP64”);结束函数headerName = getHeaderFilename () headerName =“mkl_cblas.h”;结束函数intTypeName = getBLASIntTypeName () intTypeName =“MKL_INT”;结束结束结束

你必须提供getHeaderFilename,getBLASIntTypeName,updateBuildInfo方法。的getHeaderFilename方法返回CBLAS头文件名称。如果您正在使用一个不同的布拉斯特区图书馆,取代mkl_cblas.hCBLAS头文件的名称。的getBLASIntTypeName方法返回整数数据类型的名称你CBLAS接口使用。如果您正在使用一个不同的布拉斯特区图书馆,取代MKL_INT整数数据类型的名称特定于您的CBLAS接口。的updateBuildInfo方法提供了所需的信息构建过程BLAS链接库。使用代码,就像例子中的代码回调类指定头文件的位置,bla库的完整路径名称,编译器和链接器选项。如果你使用英特尔MKL布拉斯特区库,使用链接线顾问看哪个库和编译器选项是推荐给你的用例。

有三个其他方法已经实现coder.BLASCallback。这些方法getBLASDoubleComplexTypeName,getBLASSingleComplexTypeName,useEnumNameRatherThanTypedef。默认情况下,你的回调类继承这些实现coder.BLASCallback。在某些情况下,你必须用自己的定义覆盖这些方法当你定义你的回调类。

getBLASDoubleComplexTypeName方法返回用于双精度类型复杂的变量在生成的代码中。如果你的布拉斯特区图书馆以外的其他类型双*void *对于双精度复杂的数组参数,该方法包含在您的类定义回调。

函数doubleComplexTypeName = getBLASDoubleComplexTypeName () doubleComplexTypeName =“my_double_complex_type”;结束

取代my_double_complex_type双精度类型,布拉斯特区图书馆需要的复杂的数组参数。

getBLASSingleComplexTypeName方法返回类型用于单精确复杂的变量在生成的代码中。如果你的布拉斯特区图书馆以外的其他类型浮*void *对于单精确复杂的数组参数,该方法包含在您的类定义回调。

函数singleComplexTypeName = getBLASSingleComplexTypeName () doubleComplexTypeName =“my_single_complex_type”;结束

取代my_single_complex_type布拉斯特区图书馆的类型有单精确复杂的数组参数。

useEnumNameRatherThanTypedef方法返回默认情况下。如果类型的枚举bla库包括在你的枚举关键字,重新定义这个方法返回真正的在你的类定义回调。

函数p = useEnumNameRatherThanTypedef p = true ();结束

摘录从生成的C源代码,包括枚举关键字:

enum CBLAS_SIDE t;enum CBLAS_UPLO b_t;双温度;enum CBLAS_TRANSPOSE c_t;enum CBLAS_DIAG d_t;

bla bla Callback类调用通过指定生成

这个例子展示了如何生成代码调用bla bla库函数在一个特定的。BLAS callback类useMyBLAS指定BLAS库,在本例中您想要使用。

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

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

  3. MATLAB函数块,添加代码调用一个函数为基本的矩阵运算。例如,添加功能myMultiply这两个矩阵乘法一个B

    函数C = myMultiply (A, B)% # codegenC = A * B;结束

  4. 添加两个常数块的左边MATLAB函数块。它们的值设置为0 (1000)

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

  6. 连接块。

  7. 在配置参数对话框中,设置bla库自定义回调回调类的名称useMyBLAS

    回调类必须在MATLAB®路径。

  8. 构建的模型。

    如果一个B足够大,代码生成器生成一个布拉斯特区要求矩阵乘法函数。

bla图书馆执行环境定位

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

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

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

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

指定rpath链接器选项,使用构建信息addLinkFlags方法updateBuildInfo巴拉斯回调类的方法。例如,对于一个GCC编译器:

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

使用说明和限制OpenBLAS图书馆

如果您生成代码,包括调用OpenBLAS库函数,遵循这些指导方针和限制:

  • 如果您生成c++代码包括OpenBLAS调用库函数,编译的学究式的选择产生警告。禁用学究式的编译器选项,包括这些行updateBuildInfo方法:

    如果ctx.getTargetLang () = =“c++”buildInfo.addCompileFlags (“-Wno-pedantic”);结束
  • OpenBLAS不支持C89 /人私金宝app下偷偷收藏盒式标准。

另请参阅

相关的话题

外部网站