下面是一个简单的Ascend C的"Hello World"样例,展示了一个Ascend C核函数(设备侧实现的入口函数)的基本写法,及其如何被调用的流程。
1 2 3 4 5 6 7 8 9 10 | #include "kernel_operator.h" extern "C" __global__ __aicore__ void hello_world() { AscendC::printf("Hello World!!!\n"); } void hello_world_do(uint32_t blockDim, void* stream) { hello_world<<<blockDim, nullptr, stream>>>(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include "acl/acl.h" extern void hello_world_do(uint32_t coreDim, void* stream); int32_t main(int argc, char const *argv[]) { // AscendCL初始化 aclInit(nullptr); // 运行管理资源申请 int32_t deviceId = 0; aclrtSetDevice(deviceId); aclrtStream stream = nullptr; aclrtCreateStream(&stream); // 设置参与运算的核数为8(核数可根据实际需求设置) constexpr uint32_t blockDim = 8; // 用内核调用符<<<>>>调用核函数,hello_world_do中封装了<<<>>>调用 hello_world_do(blockDim, stream); aclrtSynchronizeStream(stream); // 资源释放和AscendCL去初始化 aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; } |
通过如下的代码工程对上述文件进行组织,您可以通过LINK获取样例工程,并参考README完成CMakeLists中的AI处理器的型号、软件包安装路径配置。
|-- CMakeLists.txt // CMake编译配置文件 |-- hello_world.cpp // Kernel实现 |-- main.cpp // 调用核函数的主程序 |-- run.sh // 一键式编译运行脚本
通过执行如下脚本实现样例程序的编译和运行:
bash run.sh -v <soc_version>
AI处理器的型号<soc_version>请通过如下方式获取:
其中: