美文网首页
mkldnn/onednn/openblas

mkldnn/onednn/openblas

作者: D_Major | 来源:发表于2020-09-24 18:41 被阅读0次

    测试mkldnn矩阵乘

    需要将MKL_LIB_PATH="intel_2020.3.279/lib/intel64:intel_2020.3.279/mkl/lib/intel64"加入到LD_LIBRARY_PATH中。
    example 目录 intel_2020.3.279/mkl/examples/cblas/source/cblas_sgemmx.c 这是mkl自带的example,还有cblas_gemm_s8u8s32x.c代表signed int8,unsigned int8,signed int32,对应传入的A、B、C矩阵数据类型,表示INT8量化加速接口。
    编译命令:
    make libintel64 function=cblas_gemm_s8u8s32 compiler=gnu
    make libintel64 function=cblas_sgemm compiler=gnu
    可以指定编译器为gnu还是intel的,也可以指定是并行多线程parallel还是单线程

    Linux安装oneDNN

    先从git clone,然后需要指定make install的安装目录:

    mkdir -p build && cd build
    cmake -D CMAKE_INSTALL_PREFIX=/data1/duoren/oneDNN ..
    make -j
    make install
    

    编译程序时使用命令g++ -g -o sgemm -std=c++11 -I${DNNLROOT}/include -L${DNNLROOT}/lib64 cpu_sgemm_and_matmul.cpp -ldnnl
    其中$DNNLROOT是make install的目录,否则会报dnnl_config.h.in以及libdnnl.so找不到的错误。
    其中oneDNN/examples/tutorials/matmul/cpu_sgemm_and_matmul.cpp是测试矩阵乘接口的文件,但是要放到examples目录下,因为需要引入example_utils.hpp头文件。
    在onednn中,gemm有三种实现方案,gemm,static gemm和dynamic gemm。这些在mkl是没有的。
    旧版mkl-dnn的gemm使用的是mkl的gemm,mkl对于小矩阵的计算,速度并不快。旧版mkl-dnn主要是做cnn和lstm的优化
    onednn中,有两个选择,1继续使用mkl的gemm,2使用新的gemm。

    安装OpenBlas

    make
    make install PREFIX=your_installation_directory
    

    默认安装到/opt/OpenBLAS/lib,否则需要将其加到LD_LIBRARY_PATH。
    编译命令:g++ -g -o sgemm compare_sgemm_shgemm.c -I/opt/OpenBLAS/include -L/opt/OpenBLAS/lib/ -lopenblas

    linux查看CPU型号

    centos7.6 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
    ubuntu18.04 grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}'
    IDC服务器:Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
    MIT服务器:Intel(R) Core(TM) i7-7800X CPU @ 3.50GHz

    相关文章

      网友评论

          本文标题:mkldnn/onednn/openblas

          本文链接:https://www.haomeiwen.com/subject/xgrtuktx.html