代练中介网站有得做吗,wordpress托管平台,河北手机网站制作价格,2022年新闻热点摘抄为了提高某些低级向量生成的代码的执行速度#xff0c;并 矩阵运算#xff08;如矩阵乘法#xff09;在独立代码中#xff0c;指定您 要MATLAB Coder™生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库#xff0c;它具有 几个高度优化的机器特定实现。代码生成…为了提高某些低级向量生成的代码的执行速度并 矩阵运算如矩阵乘法在独立代码中指定您 要MATLAB Coder™®生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库它具有 几个高度优化的机器特定实现。代码生成器使用 CBLAS C 接口来 哎呀。如果指定要生成 BLAS 调用并且 矩阵函数满足特定条件代码生成器生成 BLAS 调用。 否则代码生成器将为矩阵函数生成代码。
对于独立代码中的 BLAS 调用MATLAB Coder 使用您指定的 BLAS 库。指定针对您的执行环境进行优化的 BLAS 库。
指定 BLAS 库
若要在独立代码中生成 BLAS 调用必须有权访问 BLAS Callback 类。BLAS 回调类指定 BLAS 库、CBLAS 头文件、 特定 CBLAS 接口使用的某些 C 数据类型以及编译器和 生成过程的链接器选项。执行下列操作之一
在命令行中将代码配置对象属性设置为回调的名称 类。CustomBLASCallback
在 MATLAB 中 Coder app将 Custom BLAS library callback 设置为回调类的名称。
编写 BLAS 回调类
若要在生成的代码中生成对特定 BLAS 库的调用请编写 BLAS 回调类。与希望在独立代码中使用此 BLAS 库进行 BLAS 调用的其他人共享回调类。
回调类必须派生自抽象类编码器。BLASCallback的。此示例是回调类的实现用于与 Windows 平台上的英特尔 MKL BLAS 库集成。mklcallback®
classdef mklcallback coder.BLASCallbackmethods (Static)function updateBuildInfo(buildInfo, ~)libPath fullfile(pwd,mkl,WIN,lib,intel64);libPriority ;libPreCompiled true;libLinkOnly true;libs {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,WIN,include));buildInfo.addDefines(-DMKL_ILP64);endfunction headerName getHeaderFilename()headerName mkl_cblas.h;endfunction intTypeName getBLASIntTypeName()intTypeName MKL_INT;endend
end必须提供 、 和 方法。该方法返回 CBLAS 头文件 名字。如果您使用的是其他 BLAS 库请替换为 CBLAS 头文件的名称。该方法返回 CBLAS 接口使用的整数数据类型的名称。如果你 正在使用不同的 BLAS 库请替换为 特定于 CBLAS 接口的整数数据类型。该方法提供了 构建过程以链接到 BLAS 库。使用类似于示例中的代码的代码 callback 类指定头文件的位置BLAS 的完整路径名 库以及编译器和链接器选项。如果您使用英特尔 MKL BLAS 库请使用 Link Line Advisor用于查看哪些库和编译器选项 推荐用于您的用例。getHeaderFilenamegetBLASIntTypeNameupdateBuildInfogetHeaderFilenamemkl_cblas.hgetBLASIntTypeNameMKL_INTupdateBuildInfo
中已经实现了其他三种方法。这些方法是 、 和 。默认情况下您的回调类 继承了这些实现。在某些 情况下在定义时必须使用自己的定义覆盖这些方法 你的回调类。coder.BLASCallbackgetBLASDoubleComplexTypeNamegetBLASSingleComplexTypeNameuseEnumNameRatherThanTypedefcoder.BLASCallback
该方法返回用于 生成代码中的双精度复变量。如果您的 BLAS 库采用 除 和 for 以外的类型 双精度复数组参数将此方法包含在回调类中 定义。getBLASDoubleComplexTypeNamedoublevoid
function doubleComplexTypeName getBLASDoubleComplexTypeName()
doubleComplexTypeName my_double_complex_type;
end替换为 BLAS 库采用的类型 用于双精度复数组参数。my_double_complex_type
该方法返回用于 生成代码中的单精度复变量。如果您的 BLAS 库采用 除 和 for 以外的类型 单精度复数组参数将此方法包含在回调类中 定义。getBLASSingleComplexTypeNamefloatvoid
function singleComplexTypeName getBLASSingleComplexTypeName()
doubleComplexTypeName my_single_complex_type;
end替换为 BLAS 库采用的类型 用于单精度复数组参数。my_single_complex_type
该方法返回 违约。如果 BLAS 库中的枚举类型包含关键字请重新定义此方法以在回调类定义中返回。useEnumNameRatherThanTypedeffalseenumtrue
function p useEnumNameRatherThanTypedef()
p true;
end包含关键字的生成 C 源代码的摘录如下enum
enum CBLAS_SIDE t;
enum CBLAS_UPLO b_t;
double temp;
enum CBLAS_TRANSPOSE c_t;
enum CBLAS_DIAG d_t;通过指定 BLAS 回调类生成 BLAS 调用
此示例演示如何生成在特定 BLAS 库中调用 BLAS 函数的代码。 BLAS 回调类指定 BLAS 库 想要在此示例中使用。useMyBLAS
编写一个 MATLAB 函数该函数调用函数进行基本矩阵运算。 例如编写一个乘法函数 两个矩阵和 .myMultiplyAB
function C myMultiply(A,B) %#codegen
C A*B;
end动态定义静态库的代码配置对象 链接库或可执行程序。例如定义配置 对象用于 Windows 平台上的动态链接库。
cfg coder.config(dll);指定 BLAS 回调类 。useMyBLAS
cfg.CustomBLASCallback useMyBLAS;回调类必须位于 MATLAB 路径上。
生成代码。指定输入和 是 1000×1000 的双精度数组。AB
codegen myMultiply -args {zeros(1000),zeros(1000)} -config cfg -report如果 和 足够大则 代码生成器为矩阵乘法生成 BLAS 调用 功能。AB
在执行环境中找到 BLAS 库
BLAS 库必须在您的执行环境中可用。如果您的 BLAS 库是 shared则使用环境变量或链接器选项来指定 BLAS 库的位置。
在 Windows 平台上修改 PATH 环境变量。
在 Linux 平台上修改 LD_LIBRARY_PATH 环境变量或 使用链接器选项。®rpath
在 macOS 平台上修改 DYLD_LIBRARY_PATH 环境变量或 使用链接器选项。rpath
若要指定链接器选项请使用 BLAS 回调类的方法中的 information 方法。为 示例对于 GCC 编译器rpathaddLinkFlagsupdateBuildInfo
buildInfo.addLinkFlags(sprintf(‘-Wl,-rpath,“%s”’,libPath));
OpenBLAS 库的使用说明和限制
如果生成的代码包含对 OpenBLAS 库函数的调用请按照以下步骤操作 这些准则和限制
如果生成包含对 OpenBLAS 库函数的调用的 C 代码 使用该选项编译它会产生警告。自 禁用编译器选项将这些行包含在 方法-pedantic-pedanticupdateBuildInfo
if ctx.getTargetLang() CbuildInfo.addCompileFlags(-Wno-pedantic);
endOpenBLAS 不支持 C89/C90 标准。