已关闭
[Requirement|需求建议]: Reg矢量Add算子可以更简化 #1479
ascendhjh创建于  24 天前关闭于  3 天前
ascendhjh成员
24 天前 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Background(背景信息)

可以跟简化实现Add算子示例:
https://gitcode.com/cann/asc-devkit/blob/master/examples/02_simd_c_api/00_introduction/04_reg_base_add_compute/c_api_simd_add/c_api_add.asc

Origin(信息来源)

Ascend C团队改进需求。

Benefit / Necessity (价值/作用)

Design(设计方案)

simd_vf inline void add_vf(
ubuf float* x_local, ubuf float* y_local, ubuf float* z_local, uint32_t data_len)
{
uint16_t one_rep_size = asc_get_vf_len() / sizeof(float);
uint16_t repeat_time = (data_len + one_rep_size - 1) / one_rep_size;

vector_bool vmask;
vector_float reg_src0;
vector_float reg_src1;
vector_float reg_dst;
for (uint16_t i = 0; i < repeat_time; ++i) {
    vmask = asc_update_mask_b32(data_len);
    asc_load(reg_src0, x_local + i * one_rep_size);
    asc_load(reg_src1, y_local + i * one_rep_size);
    asc_add(reg_dst, reg_src0, reg_src1, vmask);
    asc_store(z_local + i * one_rep_size, reg_dst);
}

}

vector global void add_custom(gm float* x, gm float* y, gm float* z)
{
asc_init();

constexpr uint32_t block_length = TOTAL_LENGTH / NUM_BLOCKS;
constexpr uint8_t mutex_id = 1;

__gm__ float* x_gm = x + block_idx * block_length;
__gm__ float* y_gm = y + block_idx * block_length;
__gm__ float* z_gm = z + block_idx * block_length;

__ubuf__ float x_local[block_length];
__ubuf__ float y_local[block_length];
__ubuf__ float z_local[block_length];

asc_lock(PIPE_MTE2, mutex_id);
asc_copy_gm2ub(x_local, x_gm, block_length * sizeof(float));
asc_copy_gm2ub(y_local, y_gm, block_length * sizeof(float));
asc_unlock(PIPE_MTE2, mutex_id);

asc_lock(PIPE_V, mutex_id);
add_vf(x_local, y_local, z_local, block_length * sizeof(float));
asc_unlock(PIPE_V, mutex_id);

asc_lock(PIPE_MTE3, mutex_id);
asc_copy_ub2gm(z_gm, z_local, block_length * sizeof(float));
asc_unlock(PIPE_MTE3, mutex_id);

}

likedislike
Aascendhjh成员
24 天前 添加了label:requirement
lihuaichao成员
24 天前 评论:

您好,感谢反馈!

我们将会评估如何简化Reg矢量Add算子的样例,一旦有具体计划或进展,会第一时间在这里同步。

likedislike
DianaBlessYou
DianaBlessYou成员
18 天前 评论:

/assign

likedislike
CANN-robotCANN-robot成员
18 天前 将 lijunjie147 设为负责人
DianaBlessYouDianaBlessYou成员
9 天前 关联了pull request:优化Reg矢量Add算子
DianaBlessYou
DianaBlessYou成员
8 天前 评论:

您好,目前已经对Reg矢量Add算子进行了一版优化,PR如下:https://gitcode.com/cann/asc-devkit/pull/5369。如果还有优化建议,可以检视提出。

likedislike
DianaBlessYou
DianaBlessYou成员
3 天前 评论:

您好,PR已经合入,如果暂时没有其他问题,我们先关闭该 Issue,后续有任何疑问,欢迎重新提 Issue 讨论。

likedislike
DianaBlessYouDianaBlessYou成员
3 天前 issue状态由 待办的 改变为 已解决
DianaBlessYouDianaBlessYou成员
3 天前 关闭了 issue
CANN-robotCANN-robot成员
3 天前 添加了label:resolved