文档
注册
评分
提单
论坛
小AI

vec_reduce_min

功能说明

在所有的输入数据中找出最小值及最小值对应的索引位置。

注意:如果有多个最小值,返回哪个最小值,请看注意事项

函数原型

vec_reduce_min(mask, dst, src, work_tensor, repeat_times, src_rep_stride, cal_index=False)

参数说明

表1 参数说明

参数名称

输入/输出

含义

mask

输入

请参考表1中mask参数描述。

dst

输入

目的操作数,tensor起始element,起始地址要求4Byte对齐。

Tensor的scope为Unified Buffer

src

输入

源操作数,tensor起始element,起始地址对齐要求请见通用约束

Tensor的scope为Unified Buffer

work_tensor

输入

指令执行期间存储中间结果,用于内部计算所需操作空间,需特别注意空间大小,参见各指令注意事项。

repeat_times

输入

重复迭代次数。Scalar(int32)、立即数(int)、Expr(int32)。建议采用立即数,性能比scalar和表达式高。

src_rep_stride

输入

相邻迭代间,源操作数相同block地址步长。支持的数据类型为:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64)。

cal_index

输入

指定是否获取最值的索引(仅vec_reduce_max/vec_reduce_min支持),仅支持bool类型,默认值为False,取值:

  • True:同时获取最值和最值索引。
  • False:不获取索引,只获取最值。

dst、src和work_tensor的数据类型需保持一致。

Atlas 200/300/500 推理产品,dst、src和work_tensor支持的数据类型为:Tensor(float16)

Atlas 训练系列产品,dst、src和work_tensor支持的数据类型为:Tensor(float16)

Atlas推理系列产品(Ascend 310P处理器)AI Core,dst、src和work_tensor支持的数据类型为:Tensor(float16/float32)

Atlas推理系列产品(Ascend 310P处理器)Vector Core,dst、src和work_tensor支持的数据类型为:Tensor(float16/float32/int16)

Atlas A2训练系列产品/Atlas 800I A2推理产品,dst、src和work_tensor支持的数据类型为:Tensor(float16/float32)

Atlas 200/500 A2推理产品,dst、src和work_tensor支持的数据类型为:Tensor(float16/float32)。

返回值

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品(Ascend 310P处理器)AI Core

Atlas推理系列产品(Ascend 310P处理器)Vector Core

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas 200/500 A2推理产品

注意事项

  • repeat_times支持的数据类型为:Scalar(int32)、立即数(int)、Expr(int32)。
    • 当cal_index=False时,repeat_times[1,4095]
    • 当cal_index=True时:

      Atlas 200/300/500 推理产品,repeat_times[1,511],由于index最大支持数值为float16最大表示数值65504,因此最多支持511次迭代。

      Atlas 训练系列产品,repeat_times[1,511],由于index最大支持数值为float16最大表示数值65504,因此最多支持511次迭代。

      Atlas推理系列产品(Ascend 310P处理器)AI Core,当操作数数据类型为float16,repeat_times[1,511],由于index最大支持数值为float16最大表示数值65504,因此最多支持511次迭代。当操作数数据类型为float32时,repeat_times[1,4095]。

      Atlas推理系列产品(Ascend 310P处理器)Vector Core,当操作数数据类型为float16,repeat_times[1,511],由于index最大支持数值为float16最大表示数值65504,因此最多支持511次迭代。当操作数数据类型为float32时,repeat_times[1,4095]。当操作数数据类型为int16时,repeat_times[1,255],由于index最大支持数值为int16最大表示数值32767,因此最多支持255次迭代。

      Atlas A2训练系列产品/Atlas 800I A2推理产品,当操作数数据类型为float16,repeat_times[1,511],由于index最大支持数值为float16最大表示数值65504,因此最多支持511次迭代。当操作数数据类型为float32时,repeat_times[1,4095]。

      Atlas 200/500 A2推理产品,当操作数数据类型为float16,repeat_times[1,511],由于index最大支持数值为float16最大表示数值65504,因此最多支持511次迭代。当操作数数据类型为float32时,repeat_times[1,4095]。

  • src_rep_stride[0,65535],支持的数据类型为:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64)。
  • dst结果存储顺序为最值,最值索引。返回结果中索引index数据实际上是按照相应整数类型进行存储的,如dst定义为float16时,index为uint16类型,但按照float16格式进行读取,因此注意index使用时需要使用reinterpret_cast_to()方法转换到相应整数类型。
  • work_tensor空间限制如下:
    • 当cal_index=False时,至少需要repeat_times*2个elements。例如当repeat_times=120时,work_tensor的shape至少为240。
    • 当cal_index=True时,需要使用公式计算空间大小,公式如下。
      # DTYPE_SIZE指数据类型所占的空间,以Byte为单位,如float16类型占2Bytes。elements_per_block指每个block所需的element个数
      elements_per_block = block_size // DTYPE_SIZE[dtype]
      elements_per_repeat = block_size * 8 // DTYPE_SIZE[dtype]  # elements_per_repeat指每个repeat所需的element个数
      it1_output_count = 2*repeat_times  # 第一轮操作产生的元素个数
      
      def ceil_div(a_value, b_value):
          return (a_value + b_value - 1) // b_value
      
      it2_align_start = ceil_div(it1_output_count, elements_per_block)*elements_per_block # 第二轮操作起始位置偏移,ceil_div功能为相除之后向上取整
      it2_output_count = ceil_div(it1_output_count, elements_per_repeat)*2 # 第二轮操作产生的元素个数
      it3_align_start = ceil_div(it2_output_count, elements_per_block)*elements_per_block # 第三轮操作起始位置偏移
      it3_output_count = ceil_div(it2_output_count, elements_per_repeat)*2 # 第三轮操作产生的元素个数
      it4_align_start = ceil_div(it3_output_count, elements_per_block)*elements_per_block # 第四轮操作起始位置偏移
      it4_output_count = ceil_div(it3_output_count, elements_per_repeat)*2 # 第四轮操作产生的元素个数
      final_work_tensor_need_size = it2_align_start + it3_align_start + it4_align_start + it4_output_count # 最终所需的work_tensor大小
  • dst和work_tensor之间不能存在地址重叠。

调用示例

from tbe import tik
tik_instance = tik.Tik()
src_gm = tik_instance.Tensor("float16", (256,), name="src_gm", scope=tik.scope_gm)
dst_gm = tik_instance.Tensor("float16", (16,), name="dst_gm", scope=tik.scope_gm)
src_ub = tik_instance.Tensor("float16", (256,), name="src_ub", scope=tik.scope_ubuf)
dst_ub = tik_instance.Tensor("float16", (16,), name="dst_ub", scope=tik.scope_ubuf)
work_tensor_ub = tik_instance.Tensor("float16", (18,), tik.scope_ubuf, "work_tensor_ub")
# 将用户输入数据从gm搬运到ub
tik_instance.data_move(src_ub, src_gm, 0, 1, 16, 0, 0)
# 给dst_ub赋初始值0,这样输出结果更加直观
tik_instance.vec_dup(16, dst_ub, 0, 1, 1)
tik_instance.vec_reduce_min(128, dst_ub, src_ub, work_tensor_ub, 2, 8, cal_index=True)
# 将计算结果从ub搬运到gm
tik_instance.data_move(dst_gm, dst_ub, 0, 1, 1, 0, 0)

tik_instance.BuildCCE(kernel_name="vec_reduce_min", inputs=[src_gm], outputs=[dst_gm])

结果示例:

输入数据(src_gm):
[ 6.344    1.954   -3.246    9.555    9.29    -6.95     7.586    5.67
  3.2     -3.234    0.4087  -5.777   -7.156   -4.71    -1.587    4.023
  2.242    3.72     3.064    6.21    -1.627   -5.69     1.263   -0.577
  0.1646   1.894   -9.945   -7.18     3.72     1.8955  -9.53    -0.0693
 -4.836    9.13     1.122    4.766   -7.957   -5.07    -6.93     9.47
  2.912    5.938   -2.617   -9.97     3.99     2.805    1.9375   9.04
  0.03117  0.6147  -2.37    -6.297   -4.715   -5.89     3.137   -0.976
  5.79     0.02997 -2.07    -9.17    -1.8      3.498   -9.266    4.562
  7.023   -8.78    -1.974    7.508   -2.205    2.162   -2.775    4.1
  6.633   -8.1      3.334   -4.52     6.26    -5.516   -7.223   -8.586
  5.      -3.787    3.836   -1.833   -1.063   -6.188   -8.36    -5.91
  6.812    6.137   -7.746    9.2     -5.492    2.799   -7.613    9.695
 -4.074    3.188    7.145   -7.477   -7.01     6.137   -4.77     8.42
  4.336    9.836   -6.86     3.363    1.32    -4.36     2.629   -3.09
  9.53    -9.24     8.99     3.355    9.77     1.465    2.826    9.82
  8.94     1.122    9.516   -2.146   -4.566   -4.414   -1.057   -7.97
  0.4263   0.171   -4.254    1.046   -3.191    9.36     3.287   -0.6216
 -4.957   -3.605   -9.35    -6.863    1.472    5.06    -9.75    -9.54
 -3.707    6.92     5.88    -4.855   -8.21     2.697    8.17     7.836
  6.008   -4.402   -1.721    6.39    -3.992   -5.33     6.56    -9.305
  0.7114  -5.58     8.93    -1.598   -8.164   -5.805    0.4302  -8.766
 -9.414    8.81     4.6     -9.83     6.5      7.38    -0.9526   8.04
  5.008    4.863   -8.36     0.4224   8.68    -8.484   -0.9536   8.164
  0.8613  -4.027   -4.848   -2.875    6.67    -7.75    -6.133    0.08655
 -9.96     7.266    6.082    5.883   -8.32    -8.87    -8.945    4.363
 -1.022   -8.57     6.66    -2.553    0.0873   8.89    -4.336    5.01
  8.24    -2.953    3.93     9.695    6.227    8.625   -7.926    9.51
  6.27    -3.28     0.911   -7.938   -7.48    -9.94     7.57    -9.62
  3.654   -5.867    4.45     4.492   -3.129    4.523    1.69     3.947
  0.9663  -9.766    9.48    -4.652   -1.876   -2.516    2.34     7.16
  5.223    5.473    1.373    1.489    1.538   -0.3293  -8.61     1.894
 -2.56    -2.379    8.48    -4.81    -0.877   -7.85    -2.148    1.938  ]

输出数据(dst_gm):
[-9.97e+00  2.56e-06  0.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00
  0.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00
  0.00e+00  0.00e+00]

更多示例请参考vec_reduce_max

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词