文档
注册

通用定义

功能说明

此为仅有一个源操作数时指令的通用格式。

注意,此章节仅为通用格式说明,不是真正的指令。

函数原型

instruction (mask, dst, src, repeat_times, dst_rep_stride, src_rep_stride)

PIPE: VECTOR

参数说明

表1 参数说明

参数名称

输入/输出

含义

instruction

输入

指令名称,TIK DSL中为全小写字符串。

mask

输入

element操作有效指示,共128bits,每一个bit位用来表示vector的每个元素是否参与操作,bit位的值为1表示参与计算,0表示不参与计算。当前版本,vector一次最多可计算256Byte的数据。

支持的模式分为连续、逐bits两种。

  • 连续模式:支持传入单个Scalar或Python立即数,表示前多少连续的elements操作有效。例如mask=16,表示前16个elements参与计算。支持的数据类型为:立即数(int),scalar(int64, int32, int16)。

    取值范围:当dst/src为16位时,mask∈[1, 128];当dst/src为32位时,mask∈[1, 64];当dst/src为64位时,mask∈[1, 32]。

  • 逐bits模式:传入长度为2的scalar list或立即数list[mask_h, mask_l],list中每个元素支持数据类型:Scalar(int64)、立即数(int64)。逐bits表示vector的每个元素是否参与操作,bit位的值为1表示参与计算,0表示不参与。mask_h对应高64个元素操作,mask_l对应低64个元素操作。如mask=[0,8],8=0b1000,表示仅第4个element参与计算。

    取值范围:当dst/src为16位时,mask_h/mask_l∈[0, 2**64-1];当dst/src为32位时,mask_h为0,mask_l∈[0, 2**64-1];当dst/src为64位时,mask_h为0,mask_l∈[0, 2**32-1]。

注:mask应用于每个迭代的源操作数。

dst

输出

目的操作数,tensor起始element,支持数据精度见具体指令。

Tensor的scope为Unified Buffer

src

输入

源操作数,tensor起始element,支持数据精度见具体指令。

Tensor的scope为Unified Buffer

repeat_times

输入

重复迭代次数。

dst_rep_stride

输入

相邻迭代间,目的操作数相同block地址步长。

src_rep_stride

输入

相邻迭代间,源操作数相同block地址步长。

注意事项

  • repeat_times∈[0,255]。支持的数据类型为:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64),当repeat_times为立即数时,不支持0。
  • 每个repeat的并行度取决于数据类型、芯片版本,以下以PAR代表并行度。
  • dst_rep_stride/src_rep_stride;单位为32B;支持的数据类型为:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64)。
  • dst/src应声明在scope_ubuf中,且所支持的数据类型与芯片版本有关,如果不支持,工具会报错。
  • dst和src的数据类型应一致。
  • 为了节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),各指令通用约束如下,具体以各指令约束为准。
    • 对于单次repeat(repeat_times=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。
    • 对于多次repeat(repeat_times>1),若源操作数与目的操作数之间存在依赖,即第N次迭代的目的操作数是第N+1次的源操作数,这种情况是不支持地址重叠的。
  • 操作数地址偏移对齐要求请见通用约束

调用示例

  • 数据连续操作样例
    from tbe import tik
    tik_instance = tik.Tik()
    dtype_size = {
        "int8": 1,
        "uint8": 1,
        "int16": 2,
        "uint16": 2,
        "float16": 2,
        "int32": 4,
        "uint32": 4,
        "float32": 4,
        "int64": 8,
    }
    shape = (2, 512)
    dtype = "float16"
    elements = 2 * 512
    # 单次迭代操作的数,当前示例一次迭代处理128个数,mask逐bits模式可写成 [2**64-1, 2**64-1]
    mask =128
    # 迭代次数,当前示例进行了8次迭代,可根据需要调整对应的迭代次数
    repeat_times = 8
    # 迭代间目的操作数前一次repeat头与后一次repeat头之间的距离,单位32B,该示例是连续放置目的操作数,若不需要连续处理数据,可调整对应的参数
    dst_rep_stride = 8
    # 迭代间源的操作数前一次repeat头与后一次repeat头之间的距离,单位32B,该示例是连续读取源操作数,若不需要连续处理数据,可调整对应的参数
    src_rep_stride = 8
    
    src_gm = tik_instance.Tensor(dtype, shape, name="src_gm", scope=tik.scope_gm)
    dst_gm = tik_instance.Tensor(dtype, shape, name="dst_gm", scope=tik.scope_gm)
    src_ub = tik_instance.Tensor(dtype, shape, name="src_ub", scope=tik.scope_ubuf)
    dst_ub = tik_instance.Tensor(dtype, shape, name="dst_ub", scope=tik.scope_ubuf)
    # 搬移的片段数
    nburst = 1
    # 每次搬运的片段长度,单位32B
    burst = elements * dtype_size[dtype] // 32 // nburst
    # 前burst尾与后burst头的距离,单位32B
    dst_stride, src_stride = 0, 0
    # 拷贝用户输入数据到src ubuf
    tik_instance.data_move(src_ub, src_gm, 0, nburst, burst, src_stride, dst_stride)
    tik_instance.vec_relu(mask, dst_ub, src_ub, repeat_times, dst_rep_stride, src_rep_stride)
    # 将计算结果拷贝到目标gm
    tik_instance.data_move(dst_gm, dst_ub, 0, nburst, burst, src_stride, dst_stride)
    tik_instance.BuildCCE(kernel_name="vec_relu", inputs=[src_gm], outputs=[dst_gm])
    
    示例结果
    输入数据(src_gm):
    [[ 0.000e+00  1.000e+00 -2.000e+00  3.000e+00 -4.000e+00  5.000e+00
      -6.000e+00  7.000e+00 -8.000e+00  9.000e+00 -1.000e+01  1.100e+01
      -1.200e+01  1.300e+01 -1.400e+01  1.500e+01 -1.600e+01  1.700e+01
      -1.800e+01  1.900e+01 -2.000e+01  2.100e+01 -2.200e+01  2.300e+01
      -2.400e+01  2.500e+01 -2.600e+01  2.700e+01 -2.800e+01  2.900e+01
      -3.000e+01  3.100e+01 -3.200e+01  3.300e+01 -3.400e+01  3.500e+01
      -3.600e+01  3.700e+01 -3.800e+01  3.900e+01 -4.000e+01  4.100e+01
      -4.200e+01  4.300e+01 -4.400e+01  4.500e+01 -4.600e+01  4.700e+01
      -4.800e+01  4.900e+01 -5.000e+01  5.100e+01 -5.200e+01  5.300e+01
      -5.400e+01  5.500e+01 -5.600e+01  5.700e+01 -5.800e+01  5.900e+01
      -6.000e+01  6.100e+01 -6.200e+01  6.300e+01 -6.400e+01  6.500e+01
      ...
      -1.010e+03  1.011e+03 -1.012e+03  1.013e+03 -1.014e+03  1.015e+03
      -1.016e+03  1.017e+03 -1.018e+03  1.019e+03 -1.020e+03  1.021e+03
      -1.022e+03  1.023e+03]]
    
    输出数据(dst_gm):
    [[0.000e+00 1.000e+00 0.000e+00 3.000e+00 0.000e+00 5.000e+00 0.000e+00
      7.000e+00 0.000e+00 9.000e+00 0.000e+00 1.100e+01 0.000e+00 1.300e+01
      0.000e+00 1.500e+01 0.000e+00 1.700e+01 0.000e+00 1.900e+01 0.000e+00
      2.100e+01 0.000e+00 2.300e+01 0.000e+00 2.500e+01 0.000e+00 2.700e+01
      0.000e+00 2.900e+01 0.000e+00 3.100e+01 0.000e+00 3.300e+01 0.000e+00
      3.500e+01 0.000e+00 3.700e+01 0.000e+00 3.900e+01 0.000e+00 4.100e+01
      0.000e+00 4.300e+01 0.000e+00 4.500e+01 0.000e+00 4.700e+01 0.000e+00
      4.900e+01 0.000e+00 5.100e+01 0.000e+00 5.300e+01 0.000e+00 5.500e+01
      0.000e+00 5.700e+01 0.000e+00 5.900e+01 0.000e+00 6.100e+01 0.000e+00
      6.300e+01 0.000e+00 6.500e+01 
      ...
      1.009e+03 0.000e+00 1.011e+03 0.000e+00 1.013e+03 0.000e+00 1.015e+03
      0.000e+00 1.017e+03 0.000e+00 1.019e+03 0.000e+00 1.021e+03 0.000e+00
      1.023e+03]]
  • 数据非连续操作样例
    """
    此处有320个源操作数,需要对源操作数取绝对值操作并按照每放32个数再间隔32个数进行数据放置
    """
    from tbe import tik
    tik_instance = tik.Tik()
    dtype_size = {
        "int8": 1,
        "uint8": 1,
        "int16": 2,
        "uint16": 2,
        "float16": 2,
        "int32": 4,
        "uint32": 4,
        "float32": 4,
        "int64": 8,
    }
    
    shape = (10, 32)
    dst_shape = (10, 64)
    dtype = "float16"
    elements = 10 * 32
    dst_elements = 10 * 64
    # 单次迭代操作的数,当前示例一次迭代处理32个数,mask逐bits模式可写成 [0, 2**32-1]
    mask = 32
    # 迭代次数,当前示例进行了10次迭代,可根据需要调整对应的迭代次数
    repeat_times = 10
    # 迭代间目的操作数前一次repeat头与后一次repeat头之间的距离,单位32B, 由于每次迭代处理32个数,每32个数间隔32个数,所以当前迭代间需要间隔4个block放置目地操作数才能达到效果
    dst_rep_stride = 4
    # 迭代间源的操作数前一次repeat头与后一次repeat头之间的距离,单位32B, 由于每次迭代处理32个数,所以当前迭代间需要隔2个block便可以读取连续读取源操作数
    src_rep_stride = 2
    src_gm = tik_instance.Tensor(dtype, shape, name="src_gm", scope=tik.scope_gm)
    dst_gm = tik_instance.Tensor(dtype, dst_shape, name="dst_gm", scope=tik.scope_gm)
    src_ub = tik_instance.Tensor(dtype, shape, name="src_ub", scope=tik.scope_ubuf)
    dst_ub = tik_instance.Tensor(dtype, dst_shape, name="dst_ub", scope=tik.scope_ubuf)
    # 搬移的片段数
    nburst = 1
    # 每次搬运的片段长度,单位32B
    burst = elements * dtype_size[dtype] // 32 // nburst
    # 前burst尾与后burst头的距离,单位32B
    dst_stride, src_stride = 0, 0
    # 拷贝用户输入数据到src ubuf
    tik_instance.data_move(src_ub, src_gm, 0, nburst, burst, src_stride, dst_stride)
    # 对dst_ub 进行初始化为0操作
    tik_instance.vec_dup(64, dst_ub, 0, 10, 4)
    # 执行vec_abs指令
    tik_instance.vec_abs(mask, dst_ub, src_ub, repeat_times, dst_rep_stride, src_rep_stride)
    # 将计算结果拷贝到目标gm
    dst_burst = dst_elements * dtype_size[dtype] // 32 // nburst
    tik_instance.data_move(dst_gm, dst_ub, 0, nburst, dst_burst, src_stride, dst_stride)
    tik_instance.BuildCCE(kernel_name="vec_abs", inputs=[src_gm], outputs=[dst_gm])
    
    示例结果
    输入数据(src_gm):
    [[   0.   -1.   -2.   -3.   -4.   -5.   -6.   -7.   -8.   -9.  -10.  -11.
       -12.  -13.  -14.  -15.  -16.  -17.  -18.  -19.  -20.  -21.  -22.  -23.
       -24.  -25.  -26.  -27.  -28.  -29.  -30.  -31.]
     [ -32.  -33.  -34.  -35.  -36.  -37.  -38.  -39.  -40.  -41.  -42.  -43.
       -44.  -45.  -46.  -47.  -48.  -49.  -50.  -51.  -52.  -53.  -54.  -55.
       -56.  -57.  -58.  -59.  -60.  -61.  -62.  -63.]
     [ -64.  -65.  -66.  -67.  -68.  -69.  -70.  -71.  -72.  -73.  -74.  -75.
       -76.  -77.  -78.  -79.  -80.  -81.  -82.  -83.  -84.  -85.  -86.  -87.
       -88.  -89.  -90.  -91.  -92.  -93.  -94.  -95.]
     [ -96.  -97.  -98.  -99. -100. -101. -102. -103. -104. -105. -106. -107.
      -108. -109. -110. -111. -112. -113. -114. -115. -116. -117. -118. -119.
      -120. -121. -122. -123. -124. -125. -126. -127.]
     [-128. -129. -130. -131. -132. -133. -134. -135. -136. -137. -138. -139.
      -140. -141. -142. -143. -144. -145. -146. -147. -148. -149. -150. -151.
      -152. -153. -154. -155. -156. -157. -158. -159.]
     [-160. -161. -162. -163. -164. -165. -166. -167. -168. -169. -170. -171.
      -172. -173. -174. -175. -176. -177. -178. -179. -180. -181. -182. -183.
      -184. -185. -186. -187. -188. -189. -190. -191.]
     [-192. -193. -194. -195. -196. -197. -198. -199. -200. -201. -202. -203.
      -204. -205. -206. -207. -208. -209. -210. -211. -212. -213. -214. -215.
      -216. -217. -218. -219. -220. -221. -222. -223.]
     [-224. -225. -226. -227. -228. -229. -230. -231. -232. -233. -234. -235.
      -236. -237. -238. -239. -240. -241. -242. -243. -244. -245. -246. -247.
      -248. -249. -250. -251. -252. -253. -254. -255.]
     [-256. -257. -258. -259. -260. -261. -262. -263. -264. -265. -266. -267.
      -268. -269. -270. -271. -272. -273. -274. -275. -276. -277. -278. -279.
      -280. -281. -282. -283. -284. -285. -286. -287.]
     [-288. -289. -290. -291. -292. -293. -294. -295. -296. -297. -298. -299.
      -300. -301. -302. -303. -304. -305. -306. -307. -308. -309. -310. -311.
      -312. -313. -314. -315. -316. -317. -318. -319.]]
    输出数据(dst_gm):
    [[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.
       14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.
       28.  29.  30.  31.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [ 32.  33.  34.  35.  36.  37.  38.  39.  40.  41.  42.  43.  44.  45.
       46.  47.  48.  49.  50.  51.  52.  53.  54.  55.  56.  57.  58.  59.
       60.  61.  62.  63.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [ 64.  65.  66.  67.  68.  69.  70.  71.  72.  73.  74.  75.  76.  77.
       78.  79.  80.  81.  82.  83.  84.  85.  86.  87.  88.  89.  90.  91.
       92.  93.  94.  95.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [ 96.  97.  98.  99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109.
      110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123.
      124. 125. 126. 127.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141.
      142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155.
      156. 157. 158. 159.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173.
      174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187.
      188. 189. 190. 191.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205.
      206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219.
      220. 221. 222. 223.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237.
      238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251.
      252. 253. 254. 255.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269.
      270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283.
      284. 285. 286. 287.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]
     [288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301.
      302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315.
      316. 317. 318. 319.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
        0.   0.   0.   0.   0.   0.   0.   0.]]
搜索结果
找到“0”个结果

当前产品无相关内容

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