【ESWIN实习】第一次培训笔记(宁宇leader主讲)

本文介绍了ESWIN公司的AI芯片软件栈,包括自主轻量级推理框架、AI性能分析工具、并行计算编译器等内容。文章还探讨了软件栈如何支持TensorFlow等主流框架,并深入讨论了算子优化、性能调优等关键议题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

培训主题:要做什么?能做什么?需要做什么?

成熟的AI软件团队

  • 开发了从底层驱动,AI算子库,并行计算框架,AI框架的完整工具链
  • 对接了Tensorflow等通用框架,用户程序可以零修改运行到自主AI芯片上
  • 开发了自主轻量级推理框架,实现模型转换,图优化,高效运行推理模型
  • 开发了AI性能分析,量化等工具
  • 开发了基于LLVM/GCC 的并行计算编译器,OpenCL 编译器

ESWIN 是一个芯片公司,成都site主要是软件团队!

一个芯片能不能卖,卖的如何,决定性因素除了硬件还有软件!

  • 软件做到什么程度,用户用的顺手与否?
  • 它的工具是否丰富?
  • 对生态支持完不完善?

以上因素综合决定了它在后期市场上的表现!

软件团队主要是配合硬件在市场上与客户对接!

涉及面广,深度比较深,从下往上:指令集、架构都是自己开发的。

从编译、驱动、框架、模型算法、应用(对接通用的训练框架、AI框架)

底层的话用的是 RISC-V 的指令集,一个趋势。指令集演变趋势:x86 -> ARM -> RISC-V

RSIC-V除了通用的指令集,针对AI加速(PINT平台)制定了自己的指令。

自组指令的支持,编程上性能优化。涉及东西比较多。

底层基于Linux平台开发,涉及到内核态、用户态的驱动。

驱动作用,让硬件怎么样可以用软件的方式去驱动!

并行计算:

  • NVIDIA 通过 CUDA 对接 GPU
  • ESWIN 通过 OpenCL 对接 PINT

EAS0020软件栈

  • 通过第一代产品迭代,已形成较为完整AI软件栈
  • 可以与已有通用框架无缝对接
    • 无缝对接Tensorflow
    • 用户程序零改动运行

对 Tensorflow 的后端进行支持,Tensorflow 默认是基于CUDA,PINT 即把基于CUDA的后端直接port到基于PINT的后端。

利用其存储生态,训练推理框架可以直接对接到我们的产品上!

NVIDIA 是利用CUDA这样一个库,来后面对接实现自己的算子,在他们厂的硬件上进行运算和加速!
PINT 是利用OpenCL这样一个库,针对各个算子,针对自己的硬件平台进行功能实现和性能优化!

曾颖超主要做算子的优化这方面的!

优化的跟平台和硬件设计特别相关,

在这里插入图片描述

在这里插入图片描述

从客户来讲,基于成熟的硬件训练平台,如TensorFlow等,结合自己的业务会生成自己的算法或模型。不会愿意花费太多的精力在另一个平台上学东西。因此PINT 框架支持了模型转换、性能调优。

用户可以拿他们的模型在PINT上方便的部署,并且对性能进行一定的调优。

驱动框架是下面的驱动和通用平台之间的适配层。目前主要是OpenCL,但是也提供了类似CUDA的Driver API的PINT API。

进来的同学:应用、算子、RTL(仿真)【不太偏底层】

RTL说白了,可能就是利用API或OpenCL加速一些相应的计算,应用领域不一样,实现方式略有不同!

为了支持这种生态,进行了接口上的适配和功能上的实现。

软件栈

在这里插入图片描述

编程模型

在这里插入图片描述

APU成都软件团队介绍

mcore + ncore = APU

在这里插入图片描述

指令架构

  • RISC-V、Spc/Customer、GCC/LLVM

系统集成

  • Driver PCIe/Decoder/UAP、Framework OpenCL/PintUP

运行框架

  • Training TensorFlow、Inference PintMini

算子算法

  • Multiple Scenario、Detect/Identify/Track/…

应用工具

  • Debug/Performance/Demo

自动化测试

  • CI/CD Jenkins

协同验证

  • Simulation/FPGA/ASIC

项目管理

  • Confluence(会议、文档)/Jira(任务)/Bitbucket(代码)
  • OA(事务的处理:请假出差、财务上的流程)

成都软件团队

  • 系统驱动【编译、内核态用户态实现】
  • 系统应用【API、Demo、用户对接比较多】
  • 框架【对主流AI框架移植,自有的高效推理框架实现小组】
  • 算子【针对硬件平台进行功能实现、性能加速的小组】
  • 算法【针对项目的模型的调试,现有及以后算法趋势的研究,对产品的架构和设计提供参考】
  • 测试

硬件介绍

并行加速的芯片,可以同时运算的计算单元。主要概念就是core,基于RSIC-V指令,是标量计算。

AI里面运算量比较大的,如矩阵运算等,PINT也有一些硬件加速,如Systolic Array。

PINT core 类比 NVIDIA 的 CUDA Core
Systolic Array 类比 NVIDIA 的 Tensor Core
core也是分区域的,8个core是一组PE,PE 类比 NVIDIA 的 SM

Systolic Array对卷积和矩阵运算效率比较高!在CV领域,对特定计算进行加速,对性能提示!

各个core连接到Interconnection Network进行处理,进行并行计算的时候,各个core都可以对自己需要的一些数据进行处理,处理完之后,在框架上得到想要的结果。

对外的接口,产品有两种形态,一种加速卡,一个叫边缘盒子,对外接口的话通过PCIE对host端进行交互!

芯片架构介绍

在这里插入图片描述

做算子对具体的硬件设计要求比较高,特别在计算里面对性能提升多的,比如存储的访问,对计算加速的特殊指令使用。

在这里插入图片描述
core的计算,它的性能,数据流怎么走?

core对资源的访问,分了几级的存储,比如说对它自己来讲有Dcache,其他 core 不能访问它的Dcache。故Dcache对该core来讲是访问最快的!

对于所有core 来讲,有shared-cache,全局的。

在shared-cache以下有一个DDR。

很多算子要提升性能,就是在这里考虑很多事情,比如访问的存储资源的空间的分配,怎么比较优!
优即该资源在对应的Dcache里就能拿到,没必要去其他地方去取。有点类似Local Memory。

性能分析和调优,即访

在这里插入图片描述

异构并行加速器的框架

在这里插入图片描述
ncore:实现并行的能力
mcore:相当于对并行core的汇总的一个关系

不退出设备的前提实现多个并行处理!NVIDIA的CUDA不能这样!

Pint OpenCL简介

  • OpenCL针对并行计算的通用框架,接口的规范工作。
  • 异构并行计算机能加速计算任务的完成,异构框架下的加速器衍生出了多种类型,如GPU、FPGA、APU、TPU等,每种类型的加速器也会有不同厂家产品,如AMD、NVIDIA、Intel等,各厂商通常仅仅提供对于自己设备编程的实现,这样对上层应用的规范和迁移带来困难。
  • OpenCL(Open Computing Language),旨在满足上述需求, 它是一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片异构计算(heterogeneous)的标准,它是跨平台的。
  • OpenCL( 官网链接)的标准定义和学习资料在官网和互联网上都非常容易获取,不多做赘述。
  • OpenCL编程模型的系统框图如下边:

在这里插入图片描述

相当于针对并行计算的通用框架,进行接口的规范。

利用OpenCL框架做,也是考虑到生态,我们的东西与其他第三方的进行对接,采用相应的标准,对后续的拓展和兼容是比较好的,可以省下后续的成本。

框架和应用也是通过OpenCL的方式把它封装起来!

算子在设备端运行,主要用的RSIC-V编译器,将我们的算子通过OpenCL的语法,将其编译成我们设备端能运行的形式。

基本上软件实现的从上到下的一个框架

设备代码编译与运行

  • 使用OpenCL Kernel Wrapper/C++编程方式
  • 实现kernel函数(可使用完整C++语法),记为cpp_kernel
  • cpp_kernel包装成标准C语言可以调用的函数,记为clinkage_kernel
  • 使用riscv-gcc编译器,将clinkage_kernel编译为静态库(.a文件)
  • 将clinkage_kernel包装成opencl C语法的kernel函数,记为ocl_kernel
  • 编写CPU端opencl程序。使用build from source的方式,将ocl_kernel源码文件送入opencl与生成的静态库一起进行编译。之后创建kernel,运行kernel。

问题提问

  • 结合自己要从事方向
  • 并行计算的芯片公司,做出来的东西可能要给客户用,怎么样能把自己做的事融入到项目里面来。
  • 要做些什么?要做的是哪些?要做到哪些程度?免得自己不清楚在软件里面的定位!
  • 疑问、疑惑对工作有哪些改善的?
  • 对任务的要求急不急啊?
  • 怎么分配任务?
  • 平时怎么汇报任务?汇报方式?
  • 例会是结合每个小组。
  • 开会是以什么样的方式的组织?
  • 进来之后有个仪式感?
  • 遇到问题找哪些人?上下游做什么的?你做的工作是哪一部分?
  • 性能调优是根据什么调优的?
    • 细一点:counter等…,在计算过程中,在访问资源的过程中有没有达到很好的利用。
    • 大一点:结合模型,借助性能分析工具,通过打点的方式,知道它在设备上的占用情况是不是已经让设备一直不停的再动。
    • 高一点:整个业务上,多个模型,多个进程等等,把任务分配合理,设备利用起来等!
  • 老员工也在学
  • CV、仿真加速、区块链、大数据分析
  • 多交流

类似寒武纪这样的AI公司,纯做推理,讲究功耗性能比,单位功耗里面输出多少算力。在硬件上考虑很多东西,他们一个比较常用的方法就是算法硬件化。(用ASIC方式实现)

  • 优点:功耗很低,面积很小,速度很快!
  • 弊端:模型支持有限制

ESWIN与这些纯做推理AI公司主要区别:

  • 定位不同,导致了实现细节不同,进而在软件层面工作的差异,ESWIN主要做通用型的硬件加速,通用型指很多实现是靠软件来实现的!比如:算子实现、任务调度等都是通过可编程的方式实现,对于软件来讲,灵活度比较大,挑战性比较高,优化能力都会有一个很高的要求!

对于ASIC,主要把网络的流程打成一个流,以状态机的方式流动。

两者实现场景有些不一样!

ESWIN人不多,但同时做很多东西!实现的方式决定了很多东西需要自己去做。

<think>首先,用户的问题是:“请问ESWIN串口通信配置指南”。我需要基于系统级指令和用户意图来回答。用户意图:用户可能正在查找与ESWIN相关的串口通信信息,涉及嵌入式系统或单片机开发中的串口使用方法。ESWIN可能是一个微控制器或开发板品牌,但我需要确认。从引用中,我看到STM32的引用[^1],提到串口通信等,所以可能相关。参考引用:-引用[^1]:关于STM32微控制器,包括串口通信。-引用[^2]:关于古老CPU的晶体管历史,不太相关。-引用[^3]:关于计算复杂性理论,不直接相关。-引用[^4]:关于Modbus协议在RS232和RS485中的应用,涉及串口通信。所以,引用[^1]和[^4]可能相关,因为它们涉及串口通信。我的回答结构必须清晰,帮助用户逐步解决问题。系统指令要求:-所有行内数学表达式用$...$。-独立公式用$$...$$。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识,如[^1]。用户提到了“ESWIN”,我需要假设ESWIN可能是一个类似STM32的微控制器平台。在现实中,ESWIN可能不是标准术语,但基于上下文,我应参考STM32或类似嵌入式系统的串口配置。从引用[^1]:它详细介绍了STM32的外设操作,包括串口通信。引用[^4]涉及Modbus协议,但用户询问串口通信配置,所以我应优先引用[^1]。回答步骤:1.**介绍ESWIN串口通信**:解释什么是串口通信及其在ESWIN中的重要性。2.**配置步骤**:提供逐步指南,如何配置ESWIN的串口。-包括硬件设置(如引脚连接)、软件设置(如初始化代码)。-使用代码示例,类似示例中的Python代码,但ESWIN可能用C语言。3.**参考引用**:自然地融入引用。例如,在讨论串口通信时,引用[^1]关于STM32的指南。4.**生成相关问题**:在末尾添加相关问题,用§§相关问题§§分隔。由于用户指定了“ESWIN”,我需要基于可用信息。引用中没有直接提到ESWIN,所以我应推断它为类似STM32的设备。或许ESWIN是某个特定产品,但我应假设它涉及嵌入式串口通信。回答内容:-开头:解释串口通信在嵌入式系统中的作用。-主体:-硬件配置:如连接UART引脚。-软件配置:使用HAL库或固件库初始化UART。-代码示例:提供C代码片段。-测试方法:如何发送和接收数据。-结尾:总结并添加相关问题。引用使用:-例如,“在STM32中,串口通信涉及GPIO配置和UART初始化[^1]。”自然地添加。生成相关问题:-类似示例:3个问题。-例如:1.ESWIN串口通信的常见问题?2.如何优化ESWIN的串口性能?3.ESWIN串口在工业自动化中的应用?确保LaTeX正确:用户问题中没有数学,但如果有变量,如波特率,用行内格式,如$9600$bps。完整回答结构:-标题或开头:ESWIN串口通信配置指南-步骤指南-代码块-相关问题最后,用中文回答。</think>### ESWIN串口通信配置指南 串口通信(UART)是嵌入式系统中常用的数据交换方式,广泛应用于设备间通信、调试和传感器数据采集。ESWIN 可能指一种基于 ARM Cortex-M 内核的微控制器平台(类似 STM32),其串口配置涉及硬件连接和软件初始化。本指南基于嵌入式开发通用原则,并结合参考资源中的最佳实践,提供逐步配置步骤。以下内容假设您使用 ESWIN 开发板及相关开发环境(如 Keil MDK 或 STM32CubeIDE),并参考了 STM32 的串口操作指南[^1] 和 Modbus 协议在工业通信中的应用[^4]。 #### 1. **硬件配置** - **引脚连接**:ESWIN 微控制器通常提供多个 UART 接口(如 UART1、UART2)。确保正确连接: - TX(发送)引脚连接到接收设备的 RX 引脚。 - RX(接收)引脚连接到发送设备的 TX 引脚。 - GND(地线)必须共享以避免噪声干扰。 - 对于 RS232 或 RS485 标准,可能需要外部电平转换芯片(如 MAX3232),这在工业自动化中常见[^4]。 - **波特率设置**:根据设备需求选择标准波特率,如$9600$、$115200$ bps。确保所有通信设备使用相同波特率。 #### 2. **软件配置** 使用固件库(如 HAL 库)初始化 UART。以下是基于 STM32 HAL 库的 C 语言示例代码(ESWIN 平台类似),适用于串口发送和接收数据。核心步骤包括: - **初始化 UART 参数**:设置波特率、数据位、停止位和校验位。 - **启用中断**(可选):用于异步数据接收,提高效率。 - **测试通信**:发送测试数据并验证接收。 ```c #include "stm32f1xx_hal.h" // 假设使用 STM32 HAL 库,ESWIN 平台需替换为相应头文件 UART_HandleTypeDef huart1; // 定义 UART 句柄 void UART_Init(void) { huart1.Instance = USART1; // 使用 UART1 接口 huart1.Init.BaudRate = 115200; // 波特率 $115200$ bps huart1.Init.WordLength = UART_WORDLENGTH_8B; // 8 位数据位 huart1.Init.StopBits = UART_STOPBITS_1; // 1 位停止位 huart1.Init.Parity = UART_PARITY_NONE; // 无校验位 huart1.Init.Mode = UART_MODE_TX_RX; // 发送和接收模式 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制 HAL_UART_Init(&huart1); // 初始化 UART } int main(void) { HAL_Init(); // 初始化 HAL 库 UART_Init(); // 调用 UART 初始化函数 char testMsg[] = "Hello ESWIN!\r\n"; // 测试消息 while (1) { HAL_UART_Transmit(&huart1, (uint8_t *)testMsg, strlen(testMsg), HAL_MAX_DELAY); // 发送数据 HAL_Delay(1000); // 延迟 1 秒 } } // UART 接收中断处理(示例) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART1) { uint8_t rxData; HAL_UART_Receive_IT(&huart1, &rxData, 1); // 重新启用中断接收 // 处理接收到的数据 rxData } } ``` - **说明**: - 在 ESWIN 平台,需根据具体型号修改`Instance`(如改为 UART2)和头文件。 - 波特率计算基于系统时钟频率,公式为 $\text{BaudRate} = \frac{\text{System Clock}}{\text{USARTDIV}}$,其中 USARTDIV 是分频系数[^1]。 - 启用中断时,需在初始化后调用`HAL_UART_Receive_IT()`启动接收。 #### 3. **测试与调试** - **工具使用**:连接 PC 串口调试助手(如 Putty 或 Tera Term),设置匹配的波特率,发送和接收数据。 - **常见问题**: - 无数据传输:检查引脚连接和 GND 共享。 - 数据错误:验证波特率是否一致,或添加校验位。 - 在工业场景中,可集成 Modbus 协议实现设备控制[^4]。 - **优化建议**:使用 DMA(直接内存访问)减少 CPU 负载,或结合 RTOS(如 FreeRTOS)管理多任务通信[^1]。 #### 4. **参考资源** - STM32 的 UART 配置详细指南,包括外设操作和调试技巧[^1]。 - Modbus 协议在 RS232/RS485 中的应用,可扩展 ESWIN 的工业通信能力[^4]。 通过以上步骤,您可以高效配置 ESWIN 的串口通信。如果遇到平台特定问题,建议查阅 ESWIN 官方文档或开发社区资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值