From cb72284eb454eb2ee95e749334ed5dbfdedd180e Mon Sep 17 00:00:00 2001 From: Old_cpu <1471913775@qq.com> Date: Sat, 22 Nov 2025 11:33:41 +0800 Subject: [PATCH] [Doc] add activate xcode and Buddy compiler --- docs/zh/technical/AI/Buddy-MLIR_introduce.md | 63 +++++++++++++++++++ .../Basic-knowlegde/xcode_activate_CLI.md | 54 ++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 docs/zh/technical/AI/Buddy-MLIR_introduce.md create mode 100644 docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md diff --git a/docs/zh/technical/AI/Buddy-MLIR_introduce.md b/docs/zh/technical/AI/Buddy-MLIR_introduce.md new file mode 100644 index 0000000..b8760a6 --- /dev/null +++ b/docs/zh/technical/AI/Buddy-MLIR_introduce.md @@ -0,0 +1,63 @@ +# Buddy-MLIR 技术解析与应用研究指南 + +Buddy-MLIR 是一个旨在简化基于 MLIR(Multi-Level Intermediate Representation)构建人工智能(AI)编译器和工具开发的开源项目。它通过提供更易于上手的工具、模块化组件和清晰的端到端流程,作为开发者的“伙伴”,帮助他们克服原生 MLIR 生态中复杂的学习障碍。 + + +## 一、 Buddy-MLIR 的核心优点(为什么选择它?) + +Buddy-MLIR 的价值在于它在继承 MLIR 强大功能的同时,极大地提升了开发者的效率和体验。 + +1. **极大地降低了 MLIR 的学习曲线** + - 清晰的端到端示例:提供从模型导入到代码生成的完整、可运行的示例。这些示例是初学者快速理解 MLIR 编译器工作流的最佳实践。 + - 高层抽象的工具链:封装了原生 MLIR 的复杂性,提供更简洁的 API 和工具链,使开发者无需成为 MLIR 专家也能快速构建功能。 + +2. **增强了模块化和可复用性** + - 解耦的组件:架构设计高度模块化。其运行时(Runtime)、驱动程序和特定的优化 Pass 都是独立的组件,方便开发者抽取并集成到其他 AI 编译器或工具链中。 + - 易于定制的后端:开发者可以基于 Buddy-MLIR 的基础架构,轻松地添加或修改针对特定硬件(如自定义加速器、FPGA 等)的后端支持。 + +3. **提供完整的 AI 编译流程和运行时支持** + - 全流程覆盖:区别于只关注某个转换阶段的项目,Buddy-MLIR 展示了一个从主流 AI 框架模型(如 ONNX/TensorFlow)输入,经过多级优化,直到生成可执行目标代码的完整、可部署的流程。 + - 集成的运行时:包含一个轻量级、可定制的 C++ 运行时库,负责关键的部署任务,例如内存管理、权重加载和函数调用。 + +4. **聚焦于 AI 领域的性能优化** + AI 友好型 Pass:提供针对 AI 模型性能的关键优化 Pass,包括: + - 算子融合 (Operator Fusion):减少内存访问和内核启动开销。 + - 内存布局优化:提高数据局部性(Data Locality)。 + - 高性能循环转换:利用循环分块、循环展开等技术提升效率。 + + +## 二、 模型优化和编译研究的使用指南 + +要开始使用 Buddy-MLIR 进行模型优化和编译研究,建议按以下三个阶段循序渐进地深入。 + + +### 阶段一:环境搭建与前端(模型导入) + +| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究点 | +|------|------|-------------------------|------------| +| 1. 环境搭建 | 编译并运行 Buddy-MLIR 项目。 | 遵循项目文档,编译 C++ 核心库和 Python 绑定。 | 熟悉 MLIR 编译器依赖和构建流程(CMake)。 | +| 2. 模型导入 | 将外部模型转换为 MLIR IR。 | 使用 Buddy-MLIR 提供的工具链或示例,将 ONNX/TensorFlow 模型转换为高层 MLIR 方言(如 TOSA 或 MHLO)。 | 研究算子映射的正确性,确保前端转换过程中的语义保真度。 | +| 3. 基础运行 | 验证 IR 转换的正确性。 | 运行未经优化的模型,验证其在目标硬件上的功能正确性。 | 理解 Buddy-MLIR 的**运行时(Runtime)** 机制及其在数据管理中的作用。 | + + +### 阶段二:中层优化与转换(性能核心) + +这是利用 Buddy-MLIR 进行性能优化的核心研究阶段。 + +| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究方向 | +|------|------|-------------------------|--------------| +| 1. 算子融合 (Fusion) | 减少开销,提升性能。 | 观察和修改 Buddy-MLIR 中针对 Linalg 或特定 AI 算子设计的融合 Pass。 | 设计更高效的融合策略,以适应不同的模型结构(如 RNN、Transformer)和目标硬件特性。 | +| 2. 内存布局优化 | 提高数据局部性。 | 实验改变张量内存布局(如 NCHW $\rightarrow$ NHWC)的 Pass。 | 研究最优内存布局的自动选择机制,以及如何在多级缓存(L1/L2)的硬件上实现最佳的缓存命中率。 | +| 3. 高层转换 | 将 AI 语义降低到 Linalg 方言。 | 学习 TOSA/MHLO 等高层方言如何通过 Pass 转换到 linalg 方言。 | 专注于图优化技术,如常量折叠和图结构重写,以简化后续的编译工作。 | +| 4. 新优化 Pass 开发 | 实现自己的创新优化想法。 | 以 Buddy-MLIR 的现有 Pass 为模板,学习利用 MLIR 的 PassManager 和 PatternRewriter 来开发新的 Pass。 | 探索基于 MLIR 的硬件无关优化和形状推导。 | + + +### 阶段三:降低与代码生成(硬件适配) + +此阶段重点是将优化后的 IR 转换为目标硬件可执行的代码。 + +| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究方向 | +|------|------|-------------------------|--------------| +| 1. 逐步降低 | 将 Linalg 降级到 Affine/SCF/Vector。 | 观察 Pass 流水线如何将 Linalg 算子逐步转换为循环 (affine/scf) 和 SIMD 指令 (vector)。 | 研究循环转换(如分块、剥离、展开)的策略及其对性能的影响,并探索自动代码生成工具(如 mlir-opt)的使用。 | +| 2. 向量化与并行化 | 利用硬件的 SIMD/多核能力。 | 检查 IR 如何降低到 Vector 方言,以及如何利用 GPU 或 LLVM 方言进行并行化。 | 专注于自动向量化的挑战,设计更智能的 Pass 来识别和转换适合并行执行的模式。 | +| 3. 新硬件后端集成 | 适配自定义或新的硬件架构。 | 在 Buddy-MLIR 的 JIT/AOT 流程中,扩展代码生成后端,以支持目标硬件所需的指令集或运行时 API 调用。 | 研究如何为新的**特定领域架构(DSA)** 定制 MLIR 方言和降低策略,实现高效的编译。 |s \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md b/docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md new file mode 100644 index 0000000..8ecf245 --- /dev/null +++ b/docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md @@ -0,0 +1,54 @@ +# 激活xcode中CLI + +## 未激活状态 +输入 `xcode-select -p` + +应输出: + +``` +$ /Library/Developer/CommandLineTools + +或 + +$ xcode-select: error: unable to get active developer directory +``` + +## 进行激活 +执行下面这条命令(需要 sudo): +``` +sudo xcode-select -s /Applications/Xcode.app/Contents/Developer +``` + +⚠️ 注意:如果你的 Xcode 不在 `/Applications`(比如叫 “Xcode-beta.app”), + +可以用: + +``` +ls /Applications +``` + +找到确切的名字后再替换路径。 + +## 进行验证 +``` +$ xcode-select -p +``` +应输出: +``` +/Applications/Xcode.app/Contents/Developer +``` + +## xctrace验证(Apple Xcode 的性能分析命令行工具) + +``` +$ xcrun xctrace version + +或 + +$ xctrace version +``` + +应输出: +``` +$ xctrace version 16.0 (16F6) +``` \ No newline at end of file