昇腾社区首页
中文
注册

开发流程

基本原则

根据图1可知,确定性调度的三个核心要素是确定的计算资源、确定的事件调度器和确定的业务执行。其中确定的事件调度器可由平台和操作系统保证,而确定的计算资源需要根据实际业务场景做好分配和预留、确定的业务执行需要根据业务实际诉求做相应的适配和改造。

  • 确定的计算资源

    计算资源包括CPU资源、内存资源、双倍数据速率(Double Data Rate,简称DDR)带宽资源,以及AI Core、AI Vector Core、DVPP等硬件加速器资源。若分配给确定业务的计算资源超过预期的占有率,应当扩充计算资源或者限制输入。

  • 确定的业务执行
    现有的Linux系统是一个基于时间片轮转的公平调度系统,为了保证任务的执行时间是确定的,就需要确保任务的执行过程不会被打断。当前事件调度采用了如下策略:
    • 事件调度器确保某个CPU核上只有一个就绪任务,使得操作系统无法切换到其他任务。
    • 调度过程中不会抢占已分配给CPU的任务,保证已运行的任务不会被打断。

    事件调度器和操作系统调度在调度策略上保证了任务不会被切换后,任务自身还需保证不会主动出让CPU,因此业务代码需保证:

    • 没有主动sleep。
    • 避免信号量等待。
    • 没有其他可能陷入内核态的系统调用。

    此外,业务代码在排除主动出让CPU的可能后,还需尽量减少单次执行的时间(暂定不超过10ms),以便其他任务有机会执行。对于业务自己创建的线程,默认归属操作系统调度,不在确定性调度框架范围,因此如需保证确定性,业务需要去除线程,采用OpenHiva接口通信及调度。对于时延敏感的业务(如需确保10ms的间隔),业务需调用OpenHiva的实时定时器接口,并分配独立的CPU资源。

开发步骤

图1 开发流程
  1. 准备环境,包括开发环境板端环境,环境的要求请参见环境准备
  2. 开发场景分析。

    根据开发场景分析涉及哪些功能(例如数据传输、模型推理等)的开发,确定功能后,再根据消息订阅-发布指导开发对应的功能。

  3. 创建代码目录。

    在开发应用前,您需要先创建目录,存放代码文件、编译脚本、测试数据、模型文件等。

  4. 开发应用,请参见消息订阅-发布
    1. 资源初始化。
    2. 消息发布和订阅。
    3. 所有数据处理结束后,需及时释放资源。
  5. 编译运行应用,请参见编译和运行