当前位置: 首页 > news >正文

【mindspore系列】- 算子源码分析

本文会介绍mindspore的算子源码结构、执行过程以及如何编写一个自定义的mindspore算子。

源码介绍

首先,我们先从https://gitee.com/mindspore/mindspore/ 官网中clone源代码下来。
clone好代码后,可以看到源码的文件夹结构如下(只列出比较重要的文件夹):

  • docs
  • mindspore
    • ccsrc
    • core
    • ops
    • python
  • tests

前端接口

在算子开发过程中,主要涉及这三个文件夹。
docs文件夹是所有mindspore API的接口文档,包括中英文接口文档。
tests文件夹是所有的测试代码,包括UT用例和ST用例等。
mindspore文件夹是重点关注对象,核心实现逻辑基本都在这个文件夹里。

mindspore文件夹里,有四个子文件夹。其中 python文件夹是前端的接口定义。
例如mindspore/python/mindspore/ops/function/array_func.py这个文件里定义了很多关于array相关的算子,譬如def min(xxx), def max(xxx) 等这些常见算子。
如果你仔细研究过这个文件夹,你会发现在这个文件夹下,有的函数有时候会被定义两次,但是他们所属的包路径却不一样。
例如包路径下有ops.min这个函数定义,同时还有mint.min这个函数的定义。
实际上,mindspore目前的有两套接口定义。例如:

import mindspore
from mindspore import ops, mint, Tensor# ops下的接口
print(ops.max(Tensor([1,2,3]))# mint下的接口
print(mint.max(Tensor([1,2,3])))

这两个的区别从官网上就能看出。之所有会搞两套接口定义,是因为mindspore前期是抄袭TensorFlow的架构和接口定义,因此细心的你能发现ops下的接口定义基本与Tensorflow的接口定义保持一致。但是随着Torch的火爆,越来越多的人在使用Torch,mindspore为了让这部分人无痛迁移脚本,就搞出来一套mint下的接口,简称 mindspore is not torch,翻译过来大概就是此地无银三百两吧。
目前ops和mint的关系:如果ops下的接口定义与Torch的定义一致,那么mint的接口会直接引用ops下的接口。如果不一致,则会新增xxx_ext接口,即增加后缀名以区分函数的方式来增加mint下的接口。

后端实现

mindspore.ops文件夹是算子具体的后端实现,

相关文章:

  • Spring IoC容器初始化过程
  • Mysql索引的数据结构
  • CMA软件实验室体系建设中的测试方法部分
  • 内网渗透——红日靶场四
  • 【知识点】关于vue3中markRow、shallowRef、shallowReactive的了解
  • 【办公类-18-06】20250523(Python)“口腔检查涂氟信息”批量生成打印(学号、姓名、学校、班级、身份证、户籍、性别、民族)
  • 【AS32X601驱动系列教程】GPIO_按键检测详解
  • DDR DFI 5.2 协议接口学习梳理笔记01
  • 基于SpringBoot+Vue的足球青训俱乐部管理后台系统的设计与开发
  • rac-rac dg 用role自动启动service
  • leetcode hot100:十三、解题思路大全:多维动态规划(不同路径、最小路径和、最长回文子串、 最长公共子序列、编辑距离)
  • NHANES指标推荐:MHR
  • 101 alpha_59
  • LaTeX中所有数字都应该在数学环境中吗?
  • 消息队列RabbitMQ与AMQP协议详解
  • PCIe Gen3 phy(编解码,token相关)
  • 交流电能表基本介绍
  • 阿里云服务器 篇十五:自动签到服务(基于Cookie,脚本和数据分离)
  • RIP和BFD是怎么协同工作的?
  • Opixs: Fluxim推出的全新显示仿真模拟软件
  • 网页设计介绍说明/北海百度seo
  • 网站集约化建设力度/百度seo排名点击器app
  • 做一家算命的网站/培训机构优化
  • 网站建设添加视频/游戏推广
  • 网站建设安排/自动秒收录网
  • 建站系统的选用分析/广点通广告平台