开发者
下载

aclrtLaunchKernelAttrValue

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
typedef union aclrtLaunchKernelAttrValue {
    uint8_t schemMode;
    uint32_t dynUBufSize;
    aclrtEngineType engineType; 
    uint32_t blockDimOffset; 
    uint8_t isBlockTaskPrefetch; 
    uint8_t isDataDump; 
    uint16_t timeout;
    aclrtTimeoutUs timeoutUs;
    uint32_t rsv[4];
} aclrtLaunchKernelAttrValue;

成员说明如下:

  • schemMode

    表示调度模式。

    取值如下:

    • 0:普通调度模式,有空闲的核,就启动算子执行。例如,当numBlocks为8时,表示算子核函数将会在8个核上执行,这时如果指定普通调度模式,则表示只要有1个核空闲了,就启动算子执行。
    • 1:batch调度模式,必须所有所需的核都空闲了,才启动算子执行。例如,当numBlocks为8时,表示算子核函数将会在8个核上执行,这时如果指定batch调度模式,则表示必须等8个核都空闲了,才启动算子执行。
  • dynUBufSize

    用于指定SIMT(Single Instruction Multiple Thread)算子执行时需要的UB(Unified Buffer,统一缓冲区)动态内存大小,单位Byte。纯SIMD算子该参数仅支持设置为0。

    Atlas 350 加速卡支持该参数。

  • engineType

    表示算子执行引擎。类型定义请参见aclrtEngineType

    Atlas 推理系列产品支持该参数。

  • blockDimOffset

    表示numBlocks偏移量。numBlocks用于指定算子的核函数将会在几个核上执行。

    Atlas 推理系列产品支持该参数。
    • 如果numBlocks ≤ AI Core核数,则无需使用Vector Core上计算,可将engineType配置为ACL_RT_ENGINE_TYPE_AIC(表示在AI Core上计算),则此处的blockDimOffset配置为0。
    • 如果numBlocks > AI Core核数,则需:
      • 在一个Stream上下发任务,将engineType配置为ACL_RT_ENGINE_TYPE_AIC(表示在AI Core上计算),此处的blockDimOffset配置为0。
      • 在另一个Stream上下发任务,将engineType配置为ACL_RT_ENGINE_TYPE_AIV(表示在Vector Core上计算),此处的blockDimOffset配置为aicorenumBlocks,aicorenumBlocks的计算公式如下:
        • numBlocks ≤ AI Core核数+Vector Core核数时,aicorenumBlocks = AI Core核数
        • 否则,aicorenumBlocks = 向上取整 ( numBlocks * ( AI Core核数 ) / ( AI Core核数 + Vector Core核数 ))
  • isBlockTaskPrefetch

    任务下发时,是否阻止硬件预取本任务的信息取值如下:0,不阻止;1,阻止。

  • isDataDump

    表示是否开启Dump。取值如下:0,不开启;1,开启。

  • timeout

    表示任务调度器等待任务执行的超时时间。仅适用于执行AI CPU或AI Core算子的场景。

    取值如下:

    • 0:表示永久等待;
    • >0:配置具体的超时时间,单位是秒。
  • timeoutUs

    表示任务调度器等待任务执行的超时时间,单位微秒。类型定义请参见aclrtTimeoutUs

    若aclrtTimeoutUs结构体中,timeoutLow和timeoutHigh均被配置为0,则表示永久等待。

    对于同一个Launch Kernel任务,不能同时配置timeoutUs和timeout参数,否则返回报错。

  • rsv

    预留参数。当前固定配置为0。