文档

加速矩阵运算的代码生成Matlab功能堵塞

类中为某些低级向量和矩阵运算(如矩阵乘法)生成的代码的执行速度Matlab功能块,指定要生成的代码生成器布拉斯调用。BLAS是一个用于低级向量和矩阵计算的软件库,具有几个高度优化的特定于机器的实现。代码生成器使用CBLAS.到BLAS的C接口。如果您指定要生成BLAS调用,并且矩阵函数的输入数组满足特定的条件,那么代码生成器将生成BLAS调用。否则,代码生成器将为矩阵函数生成代码。

代码生成器使用您指定的BLAS库。指定一个布拉斯特区图书馆这针对您的执行环境进行了优化。

指定BLAS库

要生成生成代码中的BLAS调用,您必须访问BLAS回调类。Blas Callback类指定Blas库,CBLAS头文件,某些C数据类型特定的CBLAS接口使用以及构建过程的编译器和链接器选项。

要指示您要生成BLAS调用并使用特定的BLAS库,请指定BLAS回调类的名称。在“配置参数”对话框中设置自定义BLAS库回调到回调类的名称。

写Blas回调类

要在生成的代码中生成对特定BLAS库的调用,请编写一个BLAS回调类。与希望在独立代码中使用这个BLAS库进行BLAS调用的其他人共享回调类。

回调类必须从抽象类中派生编码器。布拉斯Callback.这个例子是回调类的一个实现mklcallback英特尔MKL.窗户上的blas图书馆®平台。

classdefmklcallback <编码器。BLASCallback方法(静止的)功能UpdateBuildInfo(BuildInfo,〜)libpath = fullfile(pwd,“mkl”“赢”“自由”'英特尔64');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,'bin'“win64”),...libPriority、libPreCompiled libLinkOnly);buildInfo.addIncludePaths (fullfile (pwd,“mkl”“赢”“包括”));buildInfo.addDefines (“-DMKL_ILP64”);结束功能头部名称= getheaderfilename()头部名称='mkl_cblas.h'结束功能intTypeName = getBLASIntTypeName() intTypeName ='mkl_int'结束结束结束

你必须提供getheaderfilename.getblasinttypename., 和UpdateBuildInfo.方法。的getheaderfilename.方法返回CBLAS头文件名。如果您使用的是不同的Blas库,请更换mkl_cblas.h.使用CBLAS头文件的名称。的getblasinttypename.方法返回CBLAS接口使用的整数数据类型的名称。如果您使用的是不同的Blas库,请更换mkl_int.使用特定于CBLAS接口的整数数据类型的名称。的UpdateBuildInfo.方法提供构建过程链接到BLAS库所需的信息。使用类似于示例回调类中的代码来指定头文件的位置、BLAS库的完整路径名以及编译器和链接器选项。如果您使用Intel MKL BLAS库,请使用链接线顾问要查看您的用例建议使用哪些库和编译器选项。

中已经实现了其他三个方法编码器。布拉斯Callback.这些方法getblasdoublecomplextypename.getBLASSingleComplexTypeName, 和useEnumNameRatherThanTypedef.默认情况下,你的回调类继承这些实现编码器。布拉斯Callback.在某些情况下,当您定义回调类时,您必须使用自己的定义覆盖这些方法。

getblasdoublecomplextypename.方法返回生成的代码中用于双精度复杂变量的类型。如果BLAS库接受的类型不是双倍的*空白*对于双精度复杂数组参数,请在回调类定义中包含此方法。

功能doubleecomplextypename = getBLASDoubleComplexTypeName('my_double_complex_type'结束

取代my_double_complex_type.使用BLAS库为双精度复杂数组参数所接受的类型。

getBLASSingleComplexTypeName方法返回生成的代码中用于单精度复杂变量的类型。如果BLAS库接受的类型不是漂浮*空白*对于单精度复杂数组参数,请在回调类定义中包含此方法。

功能singlecomplextypename = getbrassinglecomplextypename()doublecomplextypename =“my_single_complex_type”结束

取代my_single_complex_type使用Blas库需要单精度复杂阵列参数的类型。

useEnumNameRatherThanTypedef方法退货错误的默认情况下。如果BLAS库中的枚举类型包括枚举关键字,重新定义此方法返回真的在您的回调类定义中。

功能p = Undenumnameraththantypedef()p = true;结束

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

enum cblas_side t;enum cblas_uplo b_t;双温度;枚举cblas_transoshes c_t;枚举cblas_diag d_t;

通过指定BLAS回调类来生成BLAS调用

此示例显示了如何生成调用特定BLA库中的函数的代码。blas回调类useMyBLAS指定在此示例中要使用的BLAS库。

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

  2. 添加A.Matlab功能块到模型。

  3. 在里面Matlab功能块,添加调用基本矩阵操作函数的代码。例如,添加功能我多了两个矩阵相乘一个B

    功能c = multiply(a,b)% # codegenC = A * B;结束

  4. 添加两个持续的街区左侧Matlab功能块。将其值设置为0 (1000)

  5. 添加一个外港块到右边Matlab功能块。

  6. 连接块。

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

    回调类必须在MATLAB上®小路。

  8. 构建模型。

    如果一个B足够大,代码生成器为矩阵乘法函数产生BLAS呼叫。

在执行环境中找到BLAS库

BLAS库必须在执行环境中可用。如果您的BLAS库是共享的,请使用环境变量或链接器选项来指定BLAS库的位置。

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

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

  • 在一个苹果系统,修改DYLD_LIBRARY_PATH环境变量或使用rpath链接选项。

指定rpath链接器选项,使用构建信息addLinkFlags方法中的方法UpdateBuildInfo.Blas回调类的方法。例如,对于GCC编译器:

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

OpenBlas库的使用说明和限制

如果您生成的代码包含对OpenBLAS图书馆功能,遵循以下指南和限制:

  • 如果生成的c++代码包含对OpenBLAS库函数的调用,则使用-选择产生警告。禁用-选项中包含这些行UpdateBuildInfo.方法:

    如果ctx.getTargetLang () = =“c++”buildinfo.addcompileflags(“-Wno-pedantic”);结束
  • OpenBLAS不支持C89/C90金宝app标准。

另请参阅

相关的话题

外部网站