MKLDNN

mkldnn的文件目录结构如下:
doc/:文档说明,基本在 http://intel.github.io/mkl-dnn/index.html 中已经展示
	advanced/:关于int8量化和版本更新的说明
	build/: 关于build、build_options和link 
	design/:关于memory layout(format)的图片
	performance_considerations/:关于性能调试、基准、dump jit code
	primitives/:关于mkdnn的primitives公式和使用说明
	programming_model/:关于mkldnn基本概念、mkldnn API、添加primitives属性、编程模型的介绍,其中images很直观
	usage_models/:关于inference、training的介绍以及它们使用int和bf16的介绍
cmake/: 用于linux、win、mac不同平台上的cmake文件
examples/:mkldnn各种sample code
scripts/:个人认为没什么用
include/:
	mkldnn.h:对以下概念的创建、初始化、get、set、销毁的声明
		mkldnn_memory 
		mkldnn_primitive
		mkldnn_post_ops
		mkldnn_<op>_forward
		mkldnn_<op>_backward
		mkldnn_engine
		mkldnn_stream
		mkldnn_sgemm
		
	mkldnn.hpp:对 mkldnn.h 进行 C++ 的类封装
		error:返回当前API的状态
handle:所有mkldnn中op类的基类,如 primitive_desc,mkldnn_primitive
		memory:memory和memory描述、存储等相关操作
		algorithm:对 eltwise, pooling 等的算法进行选择
		primitive_attr:对 post_ops 进行设置
		primitive_desc:Primitive descriptors 的数据结构
		query:用于获得 Primitive descriptor 的相关信息
		primitive:原语,即深度学习中各种op的抽象
		post_ops:fuse op后的sum、eltwise操作
		<op>_forward:是 primitive 的子类,实现各种前向推理 op 的定义
		<op>_backward:是 primitive 的子类,实现各种反向传播 op 的定义
		engine:指定cpu还是gpu
		stream:用于对primitive的调度管理
		reorder, concat, sum:其他 op 类型
	
	mkldnn_debug.h:将mkldnn中各种数据结构转换成string
		mkldnn_status2str(mkldnn_status_t v);
		mkldnn_dt2str(mkldnn_data_type_t v);
		mkldnn_fmt_kind2str(mkldnn_format_kind_t v);
		mkldnn_fmt_tag2str(mkldnn_format_tag_t v);
		mkldnn_prop_kind2str(mkldnn_prop_kind_t v);
		mkldnn_prim_kind2str(mkldnn_primitive_kind_t v);
		mkldnn_alg_kind2str(mkldnn_alg_kind_t v);
		mkldnn_rnn_flags2str(mkldnn_rnn_flags_t v);
		mkldnn_rnn_direction2str(mkldnn_rnn_direction_t v);
		mkldnn_engine_kind2str(mkldnn_engine_kind_t v);
		mkldnn_scratchpad_mode2str(mkldnn_scratchpad_mode_t v);
	
	mkldnn_types.h :关于mkldnn中各种数据结构和宏定义
		mkldnn_version_t;
		mkldnn_status_t: success, out_of_memory;
		mkldnn_data_type_t: f32;
		mkldnn_format_kind_t: any;
		mkldnn_format_tag_t: nchw;
		mkldnn_normalization_flags_t;
		mkldnn_convolution_desc_t;
		mkldnn_pooling_desc_t;
		mkldnn_inner_product_desc_t;
		mkldnn_eltwise_desc_t;
		mkldnn_engine_kind_t;
		#define MKLDNN_ARG_SRC_0  1
src/:
	common/:是cpu和ocl的头文件声明
	cpu/:采用cpu实现op,包括avx,sse、纯cpu等
		gemm/:gemm的float、bf16、s8x8s32的cpu实现
		rnn/:rnn, gru、lstm的cpu实现
		xbyak/:调用jit的库函数
		jit_utils/:jit 的通用函数
		cpu_xxx.hpp:针对cpu进行实现cpu的primitive descriptor 
		cpu_xxx.cpp
		gemm_xxx.hpp:封装gemm/文件中的各种实现计算密集型的op,如convolution、inner product
		gemm_xxx.cpp
		Jit_avx2_xxx.hpp:采用avx2实现convolution op
		Jit_avx2_xxx.cpp
		Jit_avx512_xxx.hpp:采用avx512实现convolution 、bf16/f32 convolution 
		Jit_avx512_xxx.cpp
		Jit_sse41_xxx.hpp:采用sse41实现convolution op
		Jit_sse41_xxx.cpp
		Jit_uni_xxx.hpp:采用cpu中的硬件特性实现通用的计算型op
		Jit_uni_xxx.cpp
		ref_xxx.hpp:采用纯cpu实现各种op
		ref_xxx.cpp
	ocl/:采用gpu实现op
tests/:

onednn不同版本的手册:https://oneapi-src.github.io/oneDNN/v1.5/dev_guide_matmul.html


AR:
(1)zero padding实现
(2)execute_forward_nCspBc_padded,execute_forward_dense,execute_forward_generic区别

posted @ 2024-07-01 10:38  qccz123456  阅读(26)  评论(0编辑  收藏  举报