文档
注册

样例介绍

获取样例

单击gemm获取样例

功能描述

该样例主要实现矩阵-矩阵相乘的运算:C = αAB + βC,A、B、C都是16*16的矩阵,即:m=16,n=16,k=16。矩阵乘的结果是一个16*16的矩阵。

图1 Sample示例

原理介绍

在该样例中,涉及的关键功能点,如下表所示。

表1 关键功能点

初始化

  • 调用aclInit接口初始化AscendCL配置。
  • 调用aclFinalize接口实现AscendCL去初始化。

Device管理

  • 调用aclrtSetDevice接口指定用于运算的Device。
  • 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
  • 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。

Stream管理

  • 调用aclrtCreateStream接口创建Stream。
  • 调用aclrtDestroyStream接口销毁Stream。
  • 调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成。

内存管理

  • 调用aclrtMallocHost接口申请Host上内存。
  • 调用aclrtFreeHost释放Host上的内存。
  • 调用aclrtMalloc接口申请Device上的内存。
  • 调用aclrtFree接口释放Device上的内存。

数据传输

如果在Host上运行应用,则需调用aclrtMemcpy接口:

  • 将数据从Host传输到Device上,作为解码的输入数据。
  • 模型推理结束后,将推理结果从Device传输到Host。

如果在板端环境上运行应用,则无需进行数据传输。

单算子调用

  • 调用aclblasGemmEx接口实现矩阵-矩阵相乘的运算,由用户指定矩阵中元素的数据类型。在aclblasGemmEx接口内部封装了系统内置的矩阵乘算子GEMM。
  • 使用ATC(Ascend Tensor Compiler)工具将内置的矩阵乘算子GEMM的算子描述信息(包括输入输出Tensor描述、算子属性等)编译成适配昇腾AI处理器的离线模型(*.om文件),用于验证矩阵乘算子GEMM的运行结果。

目录结构

样例代码结构如下所示。

├── inc                                 
│   ├── common.h                    //定义公共函数(例如:文件读取函数)的头文件
│   ├── gemm_runner.h               //定义矩阵乘运算相关函数的头文件
                 
├── run
│   ├── out  
│   │   ├──test_data
│   │   │   ├── config                           
│   │   │   │     ├── acl.json           //系统初始化的配置文件
│   │   │   │     ├── gemm.json          //矩阵乘算子的算子描述信息
│   │   │   ├── data                           
│   │   │   │     ├── generate_data.py   //用于生成矩阵A、矩阵B的数据

├── src
│   ├── CMakeLists.txt             //编译脚本
│   ├── common.cpp                 //公共函数(例如:文件读取函数)的实现文件
│   ├── gemm_main.cpp              //主函数的实现文件                         
│   ├── gemm_runner.cpp            //执行矩阵乘运算相关函数的实现文件
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词