Intel MKL-DNN 开源项目使用教程
oneDNN项目地址:https://gitcode.com/gh_mirrors/mk/mkl-dnn
1. 项目的目录结构及介绍
Intel MKL-DNN 项目的目录结构如下:
mkl-dnn/
├── cmake/
├── contrib/
├── examples/
├── include/
├── LICENSE
├── Makefile
├── README.md
├── scripts/
├── src/
├── test/
└── tools/
目录结构介绍
- cmake/: 包含用于 CMake 构建系统的配置文件。
- contrib/: 包含第三方贡献的代码和工具。
- examples/: 包含使用 Intel MKL-DNN 的示例代码。
- include/: 包含项目的头文件。
- LICENSE: 项目的许可证文件。
- Makefile: 用于构建项目的 Makefile。
- README.md: 项目的基本介绍和使用说明。
- scripts/: 包含一些辅助脚本。
- src/: 包含项目的源代码。
- test/: 包含项目的测试代码。
- tools/: 包含一些辅助工具。
2. 项目的启动文件介绍
Intel MKL-DNN 项目的启动文件通常是 examples/
目录下的示例代码。以下是一个典型的启动文件示例:
// examples/simple_net.cpp
#include "mkldnn.hpp"
#include <iostream>
#include <numeric>
using namespace mkldnn;
void simple_net() {
// 初始化引擎
engine cpu_engine(engine::kind::cpu, 0);
// 创建内存对象
memory::dims src_dims = {2, 3, 227, 227};
memory::desc src_md(src_dims, memory::data_type::f32, memory::format_tag::nchw);
memory src_mem(src_md, cpu_engine);
// 创建卷积层
memory::dims weights_dims = {96, 3, 11, 11};
memory::desc weights_md(weights_dims, memory::data_type::f32, memory::format_tag::oihw);
memory weights_mem(weights_md, cpu_engine);
// 创建卷积操作
convolution_forward::desc conv_desc(prop_kind::forward_training,
algorithm::convolution_direct, src_md, weights_md,
memory::dims{96, 55, 55}, memory::dims{1, 1},
memory::dims{0, 0}, memory::dims{0, 0});
convolution_forward::primitive_desc conv_pd(conv_desc, cpu_engine);
// 创建卷积操作的执行对象
convolution_forward conv(conv_pd);
// 执行卷积操作
stream s(cpu_engine);
conv.execute(s, {{MKLDNN_ARG_SRC, src_mem}, {MKLDNN_ARG_WEIGHTS, weights_mem}});
s.wait();
}
int main() {
try {
simple_net();
} catch (error &e) {
std::cerr << "Intel MKL-DNN error: " << e.message << std::endl;
return 1;
}
return 0;
}
启动文件介绍
- simple_net.cpp: 这是一个简单的神经网络示例,展示了如何使用 Intel MKL-DNN 创建和执行卷积操作。
- 初始化引擎: 使用
engine
类初始化 CPU 引擎。 - 创建内存对象: 使用
memory
类创建输入和权重内存对象。 - 创建卷积层: 使用
convolution_forward::desc
和convolution_forward::primitive_desc
创建卷积层描述和原语描述。 - 创建卷积操作的执行对象: 使用
convolution_forward
类创建卷积操作的执行对象。 - 执行卷积操作: 使用
stream
类执行卷积操作并等待完成。
3. 项目的配置文件介绍
Intel MKL-DNN 项目的配置文件通常是 cmake/
目录下的 CMake 配置文件。以下是一个典型的配置文件示例:
# cmake