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

mlir learn

https://github.com/j2kun/mlir-tutorial
学习这个项目
https://www.jeremykun.com/2023/08/10/mlir-getting-started/
get start
用我的mac编译一下试试看
然后遇到架构不对的问题
因为他的提交默认是x86
https://github.com/j2kun/mlir-tutorial/pull/1/commits/5a267e269d579da0b4ee90f3c7452017fea1ec28#diff-5493ff8e9397811510e780de47c57abb70137f1afe85d1519130dc3679d60ce5
而我的是AARCH64,在这个链接可以看到所有的_LLVM_TARGETS
https://forums.gentoo.org/viewtopic-p-8776988.html?sid=12f4b13276660e37d4bfafa765d54ef3

然后就可以编译成功了

命令是

https://github.com/j2kun/mlir-tutorial.git
git reset --hard 60cfbe01804aa5c157d56a9fb9370521d18f5578

然后修改bazel/setup_llvm.bzl
里面的_LLVM_TARGETS改成AARCH64

bazel build @llvm-project//mlir:IR
bazel build @llvm-project//mlir/...:all
bazel run @llvm-project//mlir:mlir-opt -- --help

第二篇

// 定义一个函数 main,接收一个 i32 类型的参数 arg0,并返回一个 i32 类型的值
func.func @main(%arg0: i32) -> i32 {// 调用函数 my_ctlz,传递参数 arg0,返回值存储在 %0 中%0 = func.call @my_ctlz(%arg0) : (i32) -> i32// 返回 %0 作为结果func.return %0 : i32
}// 定义函数 my_ctlz,计算前导零的数量,接收一个 i32 类型的参数 arg0,并返回一个 i32 类型的值
func.func @my_ctlz(%arg0: i32) -> i32 {// 定义常量 32 和 0,都是 i32 类型%c32_i32 = arith.constant 32 : i32%c0_i32 = arith.constant 0 : i32// 比较 arg0 是否等于 0,结果存储在 %0 中%0 = arith.cmpi eq, %arg0, %c0_i32 : i32// 如果 arg0 等于 0,返回常量 32,表示 32 个前导零%1 = scf.if %0 -> (i32) {scf.yield %c32_i32 : i32} else {// 否则,进入循环逻辑// 定义一些常量:1 (index类型),1 (i32类型),32 (index类型),0 (i32类型)%c1 = arith.constant 1 : index%c1_i32 = arith.constant 1 : i32%c32 = arith.constant 32 : index%c0_i32_0 = arith.constant 0 : i32// 使用 for 循环,从 1 到 32,每次步进 1// 迭代参数为 %arg2 (初始值为 arg0),%arg3 (初始值为 0),返回 i32 和 i32 类型的结果%2:2 = scf.for %arg1 = %c1 to %c32 step %c1 iter_args(%arg2 = %arg0, %arg3 = %c0_i32_0) -> (i32, i32) {// 比较 arg2 是否为负数(即左移后是否变为负数)%3 = arith.cmpi slt, %arg2, %c0_i32 : i32// 如果 %arg2 为负数,终止循环并返回当前 %arg2 和 %arg3%4:2 = scf.if %3 -> (i32, i32) {scf.yield %arg2, %arg3 : i32, i32} else {// 否则,更新 %arg3(即前导零的数量加 1)%5 = arith.addi %arg3, %c1_i32 : i32// 同时将 %arg2 左移 1 位%6 = arith.shli %arg2, %c1_i32 : i32// 返回更新后的 %arg2 和 %arg3scf.yield %6, %5 : i32, i32}// 循环结束时,返回当前的 %arg2 和 %arg3scf.yield %4#0, %4#1 : i32, i32}// 返回前导零的计数,即循环中 %2#1 的值scf.yield %2#1 : i32}// 返回结果 %1func.return %1 : i32
}

这是ctlz的一个实现,是mlir-opt自动生成的,从

module {func.func @main(%arg0: i32) -> i32 {%0 = math.ctlz %arg0 : i32return %0 : i32}
}

生成的

git reset --hard 1b4cf45ca0f095c66fc22fd3adc8feaf2da67af2

不要用苹果电脑,会报x86的codegen错误

bazel安装还是挺简单的

只需要看这个https://ym9omojhd5.feishu.cn/wiki/Hrw0wazfCitLGgky6pfc8pMgnbg
软件包下这个https://mirrors.huaweicloud.com/bazel/6.2.1/bazel-6.2.1-linux-x86_64
chmod一下就可以食用了
然后export一下就可以快速使用

然后在mlir-tutorial下使用

bazel test //tests:all

或者

bazel test //tests:ctlz.mlir.test    

搞了我好久才弄懂

如果把mlir-tutorial/tests/ctlz_simple.mlir
改成

// RUN: mlir-opt %s --convert-math-to-funcs=convert-ctlz | FileCheck %sfunc.func @main(%arg0: i32) -> i32 {// CHECK: call// CHECK: foo// CHECK: return%0 = math.ctlz %arg0 : i32func.return %0 : i32
}

再执行bazel test //tests:ctlz_simple.mlir.test
就会报错

在这里插入图片描述
ctlz_runner.mlir文件是对功能进行测试

// RUN: mlir-opt %s \
// RUN:   -pass-pipeline="builtin.module( \
// RUN:      convert-math-to-funcs{convert-ctlz}, \
// RUN:      func.func(convert-scf-to-cf,convert-arith-to-llvm), \
// RUN:      convert-func-to-llvm, \
// RUN:      convert-cf-to-llvm, \
// RUN:      reconcile-unrealized-casts)" \
// RUN: | mlir-cpu-runner -e test_7i32_to_29 -entry-point-result=i32 > %t
// RUN: FileCheck %s --check-prefix=CHECK_TEST_7i32_TO_29 < %tfunc.func @test_7i32_to_29() -> i32 {%arg = arith.constant 7 : i32%0 = math.ctlz %arg : i32func.return %0 : i32
}
// CHECK_TEST_7i32_TO_29: 29// RUN: mlir-opt %s \
// RUN:   -pass-pipeline="builtin.module( \
// RUN:      convert-math-to-funcs{convert-ctlz}, \
// RUN:      func.func(convert-scf-to-cf,convert-arith-to-llvm), \
// RUN:      convert-func-to-llvm, \
// RUN:      convert-cf-to-llvm, \
// RUN:      reconcile-unrealized-casts)" \
// RUN: | mlir-cpu-runner -e test_7i64_to_61 -entry-point-result=i64 > %t
// RUN:  FileCheck %s --check-prefix=CHECK_TEST_7i64_TO_61 < %t
func.func @test_7i64_to_61() -> i64 {%arg = arith.constant 7 : i64%0 = math.ctlz %arg : i64func.return %0 : i64
}
// CHECK_TEST_7i64_TO_61: 61

这里的mlir经过了多级下降成为llvm,最后使用mlir-cpu-runner运行起来
里面测试了32位的7的ctlz的结果是29
64位的ctlz的7结果是61

相关文章:

mlir learn

https://github.com/j2kun/mlir-tutorial 学习这个项目 https://www.jeremykun.com/2023/08/10/mlir-getting-started/ get start 用我的mac编译一下试试看 然后遇到架构不对的问题 因为他的提交默认是x86 https://github.com/j2kun/mlir-tutorial/pull/1/commits/5a267e269d57…...

Windows安装RabbitMQ 4.0.2(图文教程)

本章教程,主要记录在Windows 10上RabbitMQ 4.0.2的安装过程。 一、下载安装包 1、官方下载(速度不稳定) Erlang:https://github.com/erlang/otp/releases/download/OTP-26.0/otp_win64_26.0.exe RabbitMQ 4.0.2:https://github.com/rabbitmq/rabbitmq-server/releases/do…...

分布式系统中为什么需要使用消息队列

本文转载自 linkedkeeper.com 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&#…...

Linux环境配置(学生适用)

1.挑选最便宜的云服务器 如腾讯云服务器&#xff0c;华为云服务器&#xff0c;百度云服务器等等…… 2.找到你的云服务器实例&#xff0c;然后找到你的公网IP。 3.云服务器实例 ---更多 --- 重置root密码 (一定要重置&#xff09; 4. 下载并安装 xshell 或者其他登陆软件 xshel…...

麦禾软件:Mac用户找免费开源工具的最佳选择

抖知书老师推荐&#xff1a; ​麦禾软件已经成为众多Mac用户的必备平台&#xff0c;尤其对于那些经常寻找免费、开源、正版软件的用户来说&#xff0c;绝对是一个福音。随着科技的不断进步和用户需求的提升&#xff0c;安全、便捷的软件下载体验成为用户选择平台的核心标准。而…...

OpenCV4.8 开发实战系列专栏之 08 - 通道分离与合并

大家好&#xff0c;欢迎大家学习OpenCV4.8 开发实战专栏&#xff0c;长期更新&#xff0c;不断分享源码。 专栏代码全部基于C 与Python双语演示&#xff0c;专栏答疑群 请联系微信 OpenCVXueTang_Asst 本文关键知识点&#xff1a; OpenCV中默认imread函数加载图像文件&#…...

iOS 18.1 RC 版本发布,修复iPhone16随机重启、浏览视频卡顿等bug

今日&#xff0c;苹果发布 iOS 18.1 RC 版本升级&#xff0c;内部版本号为 22B82。 iOS 18.1 RC 也就是 iOS 18.1 准正式版&#xff0c;如果没有大的 Bug&#xff0c;这将是 iOS 18.1 正式版发布前最后一次更新&#xff0c;正式版预计下周向消费者推送。 该 RC 版除了为海外用…...

安装buildkit,并使用buildkit构建containerd镜像

背景 因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://github.com/moby/buildkit 简介 服务端为buildkitd,负责和runc或containerd后端连接干活,目前…...

maven jar包二进制文件 invalid stream header: EFBFBDEF 的错误

背景&#xff1a; 将jasper模板文件导入jar包后&#xff0c;生成文件报错 org.springframework.core.io.Resource resource new ClassPathResource("/template/XXXX.jasper");jasperPrint JasperFillManager.fillReport(resource.getInputStream(), paramentMap, …...

Git绑定Gitee或Github以及Git面试常见题

1.绑定Git或Gitee Git绑定Gitee或GitHub的过程相对简单&#xff0c;以下是详细的步骤说明&#xff1a; 一、绑定Gitee仓库 在Gitee上创建仓库 登录Gitee官网&#xff0c;点击首页右上角的“”号&#xff0c;选择“新建仓库”。在新建仓库页面&#xff0c;输入仓库的名称、描述…...

值得细读的8个视觉大模型生成式预训练方法

写在前面 大语言模型的进展催生出了ChatGPT这样的应用&#xff0c;让大家对“第四次工业革命”和“AGI”的来临有了一些期待&#xff0c;也作为部分原因共同造就了美股2023年的繁荣。LLM和视觉的结合也越来越多&#xff1a;比如把LLM作为一种通用的接口&#xff0c;把视觉特征…...

go 包相关知识

在Go语言中&#xff0c;包的引用和搜索路径是由环境变量GOPATH和GO111MODULE共同决定的。 GOPATH环境变量&#xff1a;这个变量定义了默认的工作目录&#xff0c;Go命令行工具将会在这个目录下查找包文件。这个目录通常包含三个子目录&#xff1a;src、bin和pkg。 src目录包含…...

机器学习:opencv--人脸检测以及微笑检测

目录 前言 一、人脸检测的原理 1.特征提取 2.分类器 二、代码实现 1.图片预处理 2.加载分类器 3.进行人脸识别 4.标注人脸及显示 三、微笑检测 前言 人脸检测是计算机视觉中的一个重要任务&#xff0c;旨在自动识别图像或视频中的人脸。它可以用于多种应用&#xff0…...

linux系统挂载硬盘

参考链接&#xff1a;https://www.cnblogs.com/wenhainan/p/12292823.html &#xff08;1&#xff09;lsblk命令查看磁盘挂载情况 &#xff08;2&#xff09;使用fdisk分区新磁盘 如果要分多个分区需指定每个分区的大小 &#xff08;3&#xff09;格式化新分区 mkfs命令格…...

MySQL实现主从同步

一、首先我们准备3台mysql 分别为&#xff1a; 主服务器&#xff1a;test-mysql-master,端口3306 从服务器&#xff1a;test-mysql-slave1,端口3307 从服务器&#xff1a;test-mysql-slave2,端口3308 注意&#xff1a;如果防火墙是开着的记得把关掉&#xff0c;并且重启docker…...

人工智能--数学基础

目录 ​编辑2.1 线性代数基础 2.2 微积分及优化理论 2.3 概率论与统计学 2.4 信息论简介 2.1 线性代数基础 线性代数是处理向量空间&#xff08;包括有限维或无限维&#xff09;以及这些空间上的线性映射的一门数学分支。在线性代数中&#xff0c;最核心的概念包括向量、矩…...

2024人工智能技术的普及 如何看待AI技术的应用前景

AI 技术的应用前景十分广阔&#xff0c;但也面临着一些挑战&#xff0c;以下是对其应用前景的一些看法&#xff1a; 积极方面&#xff1a; 多行业深度融合与效率提升5&#xff1a; 医疗领域&#xff1a;AI 在医疗影像分析、辅助诊断、疾病预测等方面具有巨大潜力。例如&#xf…...

日常记录:springboot 2.2.5 + es 6.8.12

前言 最近有用到搜索引擎的功能&#xff0c;这不得把之前的es过程实践一遍&#xff0c;但发现过程坎坷&#xff0c;因为版本太低了。 一、安装es 6.8.12 安装过程跟之前写那章日常记录&#xff1a;elasticsearch 在linux安装_elasticsearch linux安装-CSDN博客一样&#xff0…...

MySQL数据库备份与恢复详解

文章目录 一、为什么需要备份数据库&#xff1f;二、MySQL数据库的备份方式1. 逻辑备份2. 物理备份3. 二进制日志备份 三、恢复数据库1. 使用mysqldump备份文件恢复2. 使用物理备份恢复3. 使用二进制日志恢复 四、备份与恢复的最佳实践五、结语 在日常的数据库运维中&#xff0…...

10.22 MySQL

存储过程 存储函数 存储函数是有返回值的存储过程&#xff0c;存储函数的参数只能是in类型的。具体语法如下&#xff1a; characteristic 特性 练习&#xff1a; 从1到n的累加 ​​​​​​ create function fun1(n int) returns int deterministic begindeclare total i…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...