加快矩阵运算生成独立的代码通过使用布拉斯特区调用
提高生成某些低级代码的执行速度向量和矩阵运算(如矩阵乘法)在独立的代码中,指定你想要的MATLAB®编码器™生成布拉斯特区调用。布拉斯特区是低级的软件库向量和矩阵计算几个高度优化的特定实现。代码生成器使用CBLAS布拉斯特区C接口。如果你指定你想要产生巴拉斯电话,和输入数组的矩阵函数满足一定标准,代码生成器产生BLAS调用。否则,代码生成器生成的代码矩阵函数。
布拉斯特区调用在独立的代码中,MATLAB编码器bla库,您指定使用。指定一个布拉斯特区图书馆这是优化执行环境。
指定布拉斯特区图书馆
bla调用生成独立的代码,您必须访问巴拉斯回调类。巴拉斯callback类指定BLAS图书馆,CBLAS头文件,某些特定CBLAS接口使用C数据类型,编译器和链接器选项构建过程。做下列之一:
在命令行,设置代码配置对象的属性
CustomBLASCallback
回调类的名称。在MATLAB编码器应用程序,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.h
CBLAS头文件的名称。的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库,在本例中您想要使用。
编写一个MATLAB函数调用一个函数为基本的矩阵运算。例如,编写一个函数
myMultiply
这两个矩阵乘法一个
和B
。函数C = myMultiply (A, B)% # codegenC = A * B;结束
静态库的代码定义一个配置对象,动态链接库,或可执行程序。例如,定义一个配置对象的一个动态链接库在Windows平台。
cfg = coder.config (“dll”);
指定BLAS回调类
useMyBLAS
。cfg。CustomBLASCallback =“useMyBLAS”;
回调类必须在MATLAB的道路。
生成的代码。指定的输入
一个
和B
1000 - 1000阵列的双打。codegenmyMultiplyarg游戏{0 0 (1000),(1000)}配置cfg报告
如果
一个
和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下偷偷收藏盒式标准。
另请参阅
相关的话题
外部网站
- https://www.netlib.org/blas/
- https://www.netlib.org/blas/faq.html _5_a_id_are_optimized_blas_libraries_available_where_can_i_find_vendor_supplied_blas_a_are_optimized_blas_libraries_available_where_can_i_find_optimized_blas_libraries
- https://www.intel.com/content/www/us/en/documentation-resources/developer.html
- https://www.intel.com/content/www/us/en/resources-documentation/developer.html