已关闭
[Requirement|需求建议]: acl调用代码相比Cuda C更复杂,多约 70%代码量,能否做优化 #580
gao_dafa创建于 4月28日关闭于 5月18日
wk0911
4月28日 评论:
4月28日 评论:
可以AscendC 极简形式可以:
#include "debug/asc_printf.h"
#include "acl/acl.h"
__global__ __vector__ void hello()
{
printf("hello\n");
}
int main(int argc, char*argv[])
{
aclrtSetDevice(0);
hello<<<4>>>();
aclrtSynchronizeDevice();
return 0;
}
后续会将这种极简形式的代码合入asc的样例代码仓敬请关注


5月18日 关闭了 issue
5月18日 添加了label:resolved
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
CUDA 最简流程
// 无需显式 init,第一次调用 CUDA API 时自动初始化
cudaSetDevice(0); // 1
float* d; cudaMalloc(&d, size); // 2
cudaMemcpy(d, host_data, size, cudaMemcpyHostToDevice); // 3
kernel<<<grid, block>>>(d); // 4
cudaDeviceSynchronize(); // 5
cudaMemcpy(host_out, d, size, cudaMemcpyDeviceToHost); // 6
cudaFree(d); // 7
// 无需显式 finalize,进程退出自动清理
7 步,无需 init/finalize,stream 可选。
AscendC 最简流程
aclInit(nullptr); // 1 ← 多的
aclrtSetDevice(0); // 2
aclrtStream stream = nullptr;
aclrtCreateStream(&stream); // 3 ←
多的(必须显式创建)
float* d; aclrtMalloc((void**)&d, size, ACL_MEM_MALLOC_HUGE_FIRST); //
4(多一个策略参数)
aclrtMemcpy(d, size, host, size, ACL_MEMCPY_HOST_TO_DEVICE); //
5(多一个 dstSize)
kernel<<<grid, block, 0, stream>>>(d); // 6
aclrtSynchronizeStream(stream); // 7
aclrtMemcpy(host_out, size, d, size, ACL_MEMCPY_DEVICE_TO_HOST); // 8
aclrtFree(d); // 9
aclrtDestroyStream(stream); // 10 ← 多的
aclrtResetDevice(0); // 11 ← 多的
aclFinalize(); // 12 ← 多的
12 步,多了 5 个必须的调用。
逐项对比
Origin(信息来源)
用户@brian66237 在issue #490中提出,为方便issue管理和后续查询,单独提issue跟踪
Benefit / Necessity (价值/作用)
简化资源创建销毁流程,减少代码量
Design(设计方案)
参考描述中cuda的实现,简化多余步骤