文档
注册
评分
提单
论坛
小AI

HelloWorld

下面是一个简单的Ascend C的"Hello World"样例,展示了一个Ascend C核函数(设备侧实现的入口函数)的基本写法,及其如何被调用的流程。

  • 包含核函数的Kernel实现文件hello_world.cpp代码如下:核函数hello_world的核心逻辑为打印"Hello World"字符串。hello_world_do封装了核函数的调用程序,通过<<<>>>内核调用符对核函数进行调用。
    #include "kernel_operator.h"
    using namespace AscendC;
    extern "C" __global__ __aicore__ void hello_world() {
        printf("Hello World!!!\n");
    }
    
    void hello_world_do(uint32_t blockDim, void* stream) {
        hello_world<<<blockDim, nullptr, stream>>>();
    }
  • 调用核函数的应用程序main.cpp代码如下(您可以通过代码注释了解其主要的流程):
    #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>

如果无法确定具体的<soc_version>,则在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy

本样例共调度八个核,分别打印了每个核的核号和"Hello World"信息。

搜索结果
找到“0”个结果

当前产品无相关内容

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