GDMA 操作
tpu_gdma_cpy_S2L
张量的元素从 system memory 拷贝到 local memory。
- void tpu_gdma_cpy_S2L(local_addr_t dst_addr, system_addr_t src_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
shape – 指向 dst 和 src 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 continuous layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_L2S
张量的元素从 local memory 拷贝到 system memory。
- void tpu_gdma_cpy_L2S(system_addr_t dst_addr, local_addr_t src_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
shape – 指向 dst 和 src 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_L2L
张量的元素从 local memory 拷贝到 local memory。
- void tpu_gdma_cpy_L2L(local_addr_t dst_addr, local_addr_t src_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 local memory 中的地址
shape – 指向 dst 和 src 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_S2S
张量的元素从 system memory 拷贝到 system memory。
- void tpu_gdma_cpy_S2S(system_addr_t dst_addr, system_addr_t src_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 system memory 中的地址
shape – 指向 dst 和 src 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 continuous layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_nc_trans_S2L
张量的元素从 system memory 拷贝到 local memory,N 和 C 维度转置。
- void tpu_gdma_cpy_nc_trans_S2L(local_addr_t dst_addr, system_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(c, n, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->c, dst_shape->n, dst_shape->h, dst_shape->w]。
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 continuous layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_nc_trans_L2S
张量的元素从 local memory 拷贝到 system memory,N 和 C 维度转置。
- void tpu_gdma_cpy_nc_trans_L2S(system_addr_t dst_addr, local_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(c, n, h, w)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->c, dst_shape->n, dst_shape->h, dst_shape->w]。
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_nc_trans_L2L
张量的元素从 local memory 拷贝到 local memory,N 和 C 维度转置。
- void tpu_gdma_cpy_nc_trans_L2L(local_addr_t dst_addr, local_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(c, n, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 local memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->c, dst_shape->n, dst_shape->h, dst_shape->w]。
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_nc_trans_S2S
张量的元素从 system memory 拷贝到 system memory,N 和 C 维度转置。
- void tpu_gdma_cpy_nc_trans_S2S(system_addr_t dst_addr, system_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(c, n, h, w)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 system memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->c, dst_shape->n, dst_shape->h, dst_shape->w]。
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 continuous layout,否则是 free layout。
dst_stride->w 和 src_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_cpy_cw_trans_S2L
张量的元素从 system memory 拷贝到 local memory,C 和 W 维度转置。
- void tpu_gdma_cpy_cw_trans_S2L(local_addr_t dst_addr, system_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, w, h, c)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->n, dst_shape->w, dst_shape->h, dst_shape->c]。
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 continuous layout,否则是 free layout。
dst_stride->w 和 src_stride->w 只能是 1。
tpu_gdma_cpy_cw_trans_L2S
张量的元素从 local memory 拷贝到 system memory,C 和 W 维度转置。
- void tpu_gdma_cpy_cw_trans_L2S(system_addr_t dst_addr, local_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, w, h, c)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->n, dst_shape->w, dst_shape->h, dst_shape->c]。
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 和 src_stride->w 只能是 1。
tpu_gdma_cpy_cw_trans_L2L
张量的元素从 local memory 拷贝到 local memory,C 和 W 维度转置。
- void tpu_gdma_cpy_cw_trans_L2L(local_addr_t dst_addr, local_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, w, h, c)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 local memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->n, dst_shape->w, dst_shape->h, dst_shape->c]。
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 和 src_stride->w 只能是 1。
tpu_gdma_cpy_cw_trans_S2S
张量的元素从 system memory 拷贝到 system memory,C 和 W 维度转置。
- void tpu_gdma_cpy_cw_trans_S2S(system_addr_t dst_addr, system_addr_t src_addr, const dim4 *dst_shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, w, h, c)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 system memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->n, dst_shape->w, dst_shape->h, dst_shape->c]。
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
如果 src_stride 是 NULL,则 src 是 continuous layout,否则是 free layout。
dst_stride->w 和 src_stride->w 只能是 1。
tpu_gdma_mask_select_L2S
将 local memory 中存储的张量按照 mask 筛选后拷贝到 global memory 中。
- void tpu_gdma_mask_select_L2S(global_addr_t dst_addr, local_addr_t src_addr, addr_t mask_addr, int mask_in_lmem, const dim4 *shape, data_type_t data_dtype, data_type_t mask_dtype)
- 参数
dst_addr – dst 在 global memory 中的地址
src_addr – src 在 local memory 中的地址
mask_addr – mask 在 global memopry 或 local memory 中的地址
mask_in_lmem – mask 在 local memory 的标志
shape – 指向 input data 或 mask 的 shape 的指针
data_dtype – input/output data 的数据类型
mask_dtype – mask 的数据类型
注意事项
mask_select 后的 filter_num 可由 tpu_gdma_get_filter_num() 得到。该函数没有输入参数,返回值的类型为
DT_UINT32
。
tpu_gdma_mask_select_S2S
将 global memory 中存储的张量按照 mask 筛选后拷贝到 global memory 中。
- void tpu_gdma_mask_select_L2S(global_addr_t dst_addr, global_addr_t src_addr, addr_t mask_addr, int mask_in_lmem, const dim4 *shape, data_type_t data_dtype, data_type_t mask_dtype)
- 参数
dst_addr – dst 在 global memory 中的地址
src_addr – src 在 global memory 中的地址
mask_addr – mask 在 global memopry 或 local memory 中的地址
mask_in_lmem – mask 在 local memory 的标志
shape – 指向 input data 或 mask 的 shape 的指针
data_dtype – input/output data 的数据类型
mask_dtype – mask 的数据类型
注意事项
mask_select 后的 filter_num 可由 tpu_gdma_get_filter_num() 得到。该函数没有输入参数,返回值的类型为
DT_UINT32
。
tpu_gdma_nonzero_L2S
将 local memory 的输入张量中不为 0 的元素的 index 输出到 global memory 中。
- void tpu_gdma_nonzero_L2S(global_addr_t dst_addr, local_addr_t src_addr, const dim4 *shape, data_type_t data_type, unsigned int base_idx)
- 参数
dst_addr – dst 在 global memory 中的地址
src_addr – src 在 local memory 中的地址
shape – 指向输入张量的 shape 的指针
data_type – 输入张量的元素的数据类型
base_idx – dst 的起始 index
注意事项
dst 是 64-byte aligned layout, src 是 compact layout。
dst index 的个数可由 tpu_gdma_get_filter_num() 得到。该函数没有输入参数,返回值的类型为
DT_UINT32
。
tpu_gdma_nonzero_S2S
将 global memory 的输入张量中不为 0 的元素的 index 输出到 global memory 中。
- void tpu_gdma_nonzero_L2S(global_addr_t dst_addr, global_addr_t src_addr, const dim4 *shape, data_type_t data_type, unsigned int base_idx)
- 参数
dst_addr – dst 在 global memory 中的地址
src_addr – src 在 global memory 中的地址
shape – 指向输入张量的 shape 的指针
data_type – 输入张量的元素的数据类型
base_idx – dst 的起始 index
注意事项
dst 是 compact layout, src 是 compact layout。
dst index 的个数可由 tpu_gdma_get_filter_num() 得到。该函数没有输入参数,返回值的类型为
DT_UINT32
。
tpu_gdma_compact_S2L
张量的元素从 system memory 拷贝到 local memory。
- void tpu_gdma_compact_S2L(local_addr_t dst_addr, system_addr_t src_addr, const dim4 *shape, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
shape – 指向 dst 和 src 的 shape 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
dst 是 compact layout,src 是 continuous layout。
tpu_gdma_compact_L2S
张量的元素从 local memory 拷贝到 system memory。
- void tpu_gdma_compact_L2S(system_addr_t dst_addr, local_addr_t src_addr, const dim4 *shape, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
shape – 指向 dst 和 src 的 shape 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
dst 是 continuous layout,src 是 compact layout。
tpu_gdma_compact_nc_trans_S2L
张量的元素从 system memory 拷贝到 local memory,N 和 C 维度转置。
- void tpu_gdma_compact_nc_trans_S2L(local_addr_t dst_addr, system_addr_t src_addr, const dim4 *dst_shape, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(c, n, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->c, dst_shape->n, dst_shape->h, dst_shape->w]。
dst 是 compact layout,src 是 continuous layout。
tpu_gdma_compact_nc_trans_L2S
张量的元素从 local memory 拷贝到 system memory,N 和 C 维度转置。
- void tpu_gdma_compact_nc_trans_L2S(system_addr_t dst_addr, local_addr_t src_addr, const dim4 *dst_shape, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(c, n, h, w)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
dst_shape – 指向 dst 的 shape 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
src 的 shape 是 [dst_shape->c, dst_shape->n, dst_shape->h, dst_shape->w]。
dst 是 continuous layout,src 是 compact layout。
tpu_gdma_set_C_system
将 system memory 中的张量的元素置成常数。
- void tpu_gdma_set_C_system(system_addr_t dst_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = C}\]
- 参数
dst_addr – dst 在 system memory 中的地址
C – 常数
shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
dtype – dst 的元素和 C 的数据类型
注意事项
如果 dst_stride 是 NULL,则 dst 是 continuous layout,否则是 free layout。
dst_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_set_C_local
将 local memory 中的张量的元素置成常数。
- void tpu_gdma_set_C_local(local_addr_t dst_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = C}\]
- 参数
dst_addr – dst 在 local memory 中的地址
C – 常数
shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
dtype – dst 的元素和 C 的数据类型
注意事项
如果 dst_stride 是 NULL,则 dst 是 64-byte aligned layout,否则是 free layout。
dst_stride->w 小于等于 128 / tpu_data_type_size(dtype)。
tpu_gdma_matrix_S2L
矩阵的元素从 system memory 拷贝到 local memory。
- void tpu_gdma_matrix_S2L(local_addr_t dst_addr, system_addr_t src_addr, int rows, int cols, int cols_per_channel, int row_stride, data_type_t dtype)
\[\mathsf{dst(x, y) = src(x, y)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
rows – 矩阵的行数
cols – 矩阵的列数
cols_per_channel – dst 在每个 channel 的列数
row_stride – src 的行 stride
dtype – dst 和 src 的元素的数据类型
注意事项
dst 是 matrix layout,src 的每一行的元素是连续存储,通过 row_stride 换行。
tpu_gdma_matrix_L2S
矩阵的元素从 local memory 拷贝到 system memory。
- void tpu_gdma_matrix_L2S(system_addr_t dst_addr, local_addr_t src_addr, int rows, int cols, int cols_per_channel, int row_stride, data_type_t dtype)
\[\mathsf{dst(x, y) = src(x, y)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
rows – 矩阵的行数
cols – 矩阵的列数
cols_per_channel – src 在每个 channel 的列数
row_stride – dst 的行 stride
dtype – dst 和 src 的元素的数据类型
注意事项
dst 的每一行的元素是连续存储,通过 row_stride 换行,src 是 matrix layout。
tpu_gdma_matrix_trans_S2L
矩阵的元素从 system memory 转置拷贝到 local memory。
- void tpu_gdma_matrix_trans_S2L(local_addr_t dst_addr, system_addr_t src_addr, int src_rows, int src_cols, int dst_cols_per_channel, int src_row_stride, data_type_t dtype)
\[\mathsf{dst(x, y) = src(y, x)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
src_rows – src 的行数
src_cols – src 的列数
dst_cols_per_channel – dst 在每个 channel 的列数
src_row_stride – src 的行 stride
dtype – dst 和 src 的元素的数据类型
注意事项
dst 是 matrix layout,src 的每一行的元素是连续存储,通过 src_row_stride 换行。
tpu_gdma_matrix_trans_L2S
矩阵的元素从 local memory 转置拷贝到 system memory。
- void tpu_gdma_matrix_trans_L2S(system_addr_t dst_addr, local_addr_t src_addr, int src_rows, int src_cols, int src_cols_per_channel, int dst_row_stride, data_type_t dtype)
\[\mathsf{dst(x, y) = src(y, x)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
src_rows – src 的行数
src_cols – src 的列数
src_cols_per_channel – src 在每个 channel 的列数
dst_row_stride – dst 的行 stride
dtype – dst 和 src 的元素的数据类型
注意事项
dst 的每一行的元素是连续存储,通过 dst_row_stride 换行,src 是 matrix layout。
tpu_gdma_vector_S2L
向量的元素从 system memory 拷贝到 local memory。
- void tpu_gdma_vector_S2L(local_addr_t dst_addr, system_addr_t src_addr, int len, int len_per_channel, data_type_t dtype)
\[\mathsf{dst(x) = src(x)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
len – 向量的长度
len_per_channel – dst 在每个 channel 的长度
dtype – dst 和 src 的元素的数据类型
注意事项
dst 是 vector layout,src 的元素是连续存储。
tpu_gdma_vector_L2S
向量的元素从 local memory 拷贝到 system memory。
- void tpu_gdma_vector_L2S(system_addr_t dst_addr, local_addr_t src_addr, int len, int len_per_channel, data_type_t dtype)
\[\mathsf{dst(x) = src(x)}\]
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 local memory 中的地址
len – 向量的长度
len_per_channel – src 在每个 channel 的长度
dtype – dst 和 src 的元素的数据类型
注意事项
dst 的元素是连续存储,src 是 vector layout。
tpu_gdma_channel_bcast_S2L
张量的元素从 system memory 拷贝到 local memory,channel 广播。
- void tpu_gdma_channel_bcast_S2L(local_addr_t dst_addr, system_addr_t src_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, 0, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 system memory 中的地址
shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
tpu_gdma_channel_bcast_L2L
张量的元素从 local memory 拷贝到 local memory,channel 广播。
- void tpu_gdma_channel_bcast_L2L(local_addr_t dst_addr, local_addr_t src_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, 0, h, w)}\]
- 参数
dst_addr – dst 在 local memory 中的地址
src_addr – src 在 local memory 中的地址
shape – 指向 dst 的 shape 的指针
dst_stride – 指向 dst 的 stride 的指针
src_stride – 指向 src 的 stride 的指针
dtype – dst 和 src 的元素的数据类型
注意事项
tpu_gdma_h_gather_S2L
通过 h 维度的索引取值得到输出张量,即 output = param[index]。
- void tpu_gdma_h_gather_S2L(local_addr_t output_addr, system_addr_t param_addr, addr_t index_addr, bool index_is_local, scalar_t C, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\begin{split}\mathsf{output(0, c, h, w)} = {\begin{cases} \mathsf{param(0, c, index(0, c, h, 0), w)}&\mathsf{\text{如果}~index(0, c, h, 0)~\text{有效}}\\ \mathsf{C}&\mathsf{\text{其他情况}}\end{cases}}\end{split}\]
- 参数
output_addr – output 在 local memory 中的地址
param_addr – param 在 system memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
C – 常数
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 64-byte aligned layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 continuous layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, shape->h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,有效取值范围是 [0, param_h - 1]。
tpu_gdma_h_gather_L2S
通过 h 维度的索引取值得到输出张量,即 output = param[index]。
- void tpu_gdma_h_gather_L2S(system_addr_t output_addr, local_addr_t param_addr, addr_t index_addr, bool index_is_local, scalar_t C, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\begin{split}\mathsf{output(0, c, h, w)} = {\begin{cases} \mathsf{param(0, c, index(0, c, h, 0), w)}&\mathsf{\text{如果}~index(0, c, h, 0)~\text{有效}}\\ \mathsf{C}&\mathsf{\text{其他情况}}\end{cases}}\end{split}\]
- 参数
output_addr – output 在 system memory 中的地址
param_addr – param 在 local memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
C – 常数
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 continuous layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 64-byte aligned layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, shape->h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,有效取值范围是 [0, param_h - 1]。
tpu_gdma_h_gather_L2L
通过 h 维度的索引取值得到输出张量,即 output = param[index]。
- void tpu_gdma_h_gather_L2L(local_addr_t output_addr, local_addr_t param_addr, addr_t index_addr, bool index_is_local, scalar_t C, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\begin{split}\mathsf{output(0, c, h, w)} = {\begin{cases} \mathsf{param(0, c, index(0, c, h, 0), w)}&\mathsf{\text{如果}~index(0, c, h, 0)~\text{有效}}\\ \mathsf{C}&\mathsf{\text{其他情况}}\end{cases}}\end{split}\]
- 参数
output_addr – output 在 local memory 中的地址
param_addr – param 在 local memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
C – 常数
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 64-byte aligned layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 64-byte aligned layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, shape->h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,有效取值范围是 [0, param_h - 1]。
tpu_gdma_h_gather_S2S
通过 h 维度的索引取值得到输出张量,即 output = param[index]。
- void tpu_gdma_h_gather_S2S(system_addr_t output_addr, system_addr_t param_addr, addr_t index_addr, bool index_is_local, scalar_t C, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\begin{split}\mathsf{output(0, c, h, w)} = {\begin{cases} \mathsf{param(0, c, index(0, c, h, 0), w)}&\mathsf{\text{如果}~index(0, c, h, 0)~\text{有效}}\\ \mathsf{C}&\mathsf{\text{其他情况}}\end{cases}}\end{split}\]
- 参数
output_addr – output 在 system memory 中的地址
param_addr – param 在 system memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
C – 常数
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 continuous layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 continuous layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, shape->h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,有效取值范围是 [0, param_h - 1]。
tpu_gdma_h_scatter_S2L
通过 h 维度的索引改变输出张量的对应元素,即 output[index] = param。
- void tpu_gdma_h_scatter_S2L(local_addr_t output_addr, system_addr_t param_addr, addr_t index_addr, bool index_is_local, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\mathsf{output(0, c, index(0, c, h, 0), w) = param(0, c, h, w)}\]
- 参数
output_addr – output 在 local memory 中的地址
param_addr – param 在 system memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 64-byte aligned layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 continuous layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, param_h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,取值范围是 [0, shape->n - 1]。
tpu_gdma_h_scatter_L2S
通过 h 维度的索引改变输出张量的对应元素,即 output[index] = param。
- void tpu_gdma_h_scatter_L2S(system_addr_t output_addr, local_addr_t param_addr, addr_t index_addr, bool index_is_local, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\mathsf{output(0, c, index(0, c, h, 0), w) = param(0, c, h, w)}\]
- 参数
output_addr – output 在 system memory 中的地址
param_addr – param 在 local memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 continuous layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 64-byte aligned layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, param_h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,取值范围是 [0, shape->h - 1]。
tpu_gdma_h_scatter_L2L
通过 h 维度的索引改变输出张量的对应元素,即 output[index] = param。
- void tpu_gdma_h_scatter_L2L(local_addr_t output_addr, local_addr_t param_addr, addr_t index_addr, bool index_is_local, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\mathsf{output(0, c, index(0, c, h, 0), w) = param(0, c, h, w)}\]
- 参数
output_addr – output 在 local memory 中的地址
param_addr – param 在 local memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 64-byte aligned layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 64-byte aligned layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, param_h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,取值范围是 [0, shape->h - 1]。
tpu_gdma_h_scatter_S2S
通过 h 维度的索引改变输出张量的对应元素,即 output[index] = param。
- void tpu_gdma_h_scatter_S2S(system_addr_t output_addr, system_addr_t param_addr, addr_t index_addr, bool index_is_local, const dim4 *shape, int param_h, const dim4 *output_stride, const dim4 *param_stride, const dim4 *index_stride, data_type_t dtype)
\[\mathsf{output(0, c, index(0, c, h, 0), w) = param(0, c, h, w)}\]
- 参数
output_addr – output 在 system memory 中的地址
param_addr – param 在 system memory 中的地址
index_addr – index 在 system memory 或 local memory 中的地址
index_is_local – index 在 local memory 的标志
shape – 指向 output 的 shape 的指针
param_h – param 的 h
output_stride – 指向 output 的 stride 的指针
param_stride – 指向 param 的 stride 的指针
index_stride – 指向 index 的 stride 的指针
dtype – output 和 param 的元素的数据类型
注意事项
如果 output_stride 是 NULL,则 output 是 continuous layout,否则是 free layout。
如果 param_stride 是 NULL,则 param 是 continuous layout,否则是 free layout。
如果 index_stride 是 NULL,则 index 是 64-byte aligned layout (index_is_local 是 true)或 continuous layout (index_is_local 是 false),否则是 free layout。
如果 index_addr 被 512 整除,则性能更优。
shape->n 只能是 1,param 的 shape 是 [1, shape->c, param_h, shape->w], index 的 shape 是 [1, shape->c, param_h, 1]。
output_stride->w、param_stride->w 和 index_stride->h 只能是 1。
index 的元素的数据类型是
DT_UINT32
,取值范围是 [0, shape->h - 1]。
tpu_gdma_system_cpy
system memory 拷贝数据
- void tpu_gdma_system_cpy(system_addr_t dst_addr, system_addr_t src_addr, unsigned int count, data_type_t dtype)
- 参数
dst_addr – dst 在 system memory 中的地址
src_addr – src 在 system memory 中的地址
count – 数据的长度
dtype – dst 和 src 的元素的数据类型
注意事项
dst_addr 和 src_addr 都被元素的数据类型的位宽整除。