【2023 · CANN训练营第一季】应用开发(初级)——第一章 AscendCL概述

image.png

ACL基本概念

ACL基本概念

  • Host:
    Host指与Device相连接的X86服务器、ARM服务器,会利用Device提供的NN (Neural-Network )计算能力,完成业务。
  • Device:
    Device指安装了芯片的硬件设备,利用PCle接口与Host侧连接,为Host提供NN计算能力.
  • 同步/异步:
    同步、异步是站在调用者和执行者的角度来观察的,在当前场景下,若在Host调用接口后不等待Device执行完成再返回,则表示Host的调度是异步的;若在Host调用接口后需等待Device执行完成再返回,则表示Host的调度是同步的。
  • 进程/线程:
    本课程中提及的进程、线程,若无特别注明,则表示Host上的进程、线程。
  • Context:
    Context作为一个容器,管理了所有对象(包括Stream、Event、设备内存等)的生命周期。不同Context的Stream.
    不同Context的Event是完全隔离的,无法建立同步等待关系。

Context分为两种:
默认Context:调用aclrtSetDevice接口指定用于运算的Device时,系统会自动隐式创建一个默认Context,一个Device对应一个默认Context,默认Context不能通过aclrtDestroyContext接口来释放。
显式创建的Context:在进程或线程中调用aclrtCreateContext接口显式创建一个Context。

  • Stream:
    Stream用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在Device上执行。基于Stream的kernel执行和数据传输能够实现以下几种类型的并行:
    Host运算操作和Device运算操作并行;
    Host运算操作和“Host到Device的数据传输”并行;“Host到Device的数据传输”和Device运算操作并行
    Device内的运算并行

Stream分两种:
默认Stream:调用aclrtSetDevice接口指定用于运算的Device时,系统会自动隐式创建一个默认Stream,一个Device对应一个默认Stream,默认Stream不能通过aclrtDestroyStream接口来释放。
显式创建的Stream:在进程或线程中调用aclrtCreateStream接口显式创建一个Stream。

  • Event:
    支持调用ACL接口同步Stream之间的任务,包括同步Host与Device之间的任务、Device与Device间的任务.>例如,若stream2的任务依赖stream1的任务,想保证stream1中的任务先完成,这时可创建一个Event,并将Event插入到stream1,在执行stream2的任务前,先同步等待Event完成。
  • 动态AIPP:
    AIPP (Al Preprocessing)用于在Al Core上完成图像预处理,包括色域转换(转换图像格式)、图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络需要大小的图片)等。>AIPP区分为静态AIPP和动态AIPP。您只能选择静态AIPP或动态AIPP方式来处理图片,不能同时配置静态AIPP和动态AIPP两种方式。
    – 静态AIPP:模型转换时设置APP模式为静态,同时设置AIPP参数,模型生成后,AIPP参数值被保存在离线模型("om)中每次模型推理过程采用固定的AIPP预处理参数(无法修改)。
    如果使用静态AIPP方式,多Batch情况下共用同一份AIPP参数。
    – 动态AIPP:模型转换时仅设置AIPP模式为动态,每次模型推理前,根据需求,在执行模型前设置动态AIPP参数值,然后在模型执行时可使用不同的AIPP参数。设置动态AIPP参数值的接口请参见设置动态AIPP参数如果使用动态AIPP方式,多Batch可使用不同的AIPP参数。

主要接口调用流程

image.png

猜你喜欢

转载自blog.csdn.net/qq_45257495/article/details/130874724