Ascend 算子开发实战+基础算子开发命题笔记(以ThreeNN为例)
收藏回复举报
Ascend 算子开发实战+基础算子开发命题笔记(以ThreeNN为例)
新人帖
发表于2024-07-17 19:16:25
0 查看

Ascend 算子开发实战+基础算子开发命题笔记(以ThreeNN为例)

  1. 编写构建算子工程的JSON文件

  2. true

  3. [
        {
            "op": "ThreeNNCustom",
            "language":"cpp",
            "input_desc": [
                {
                    "name": "xyz1",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "fp32"
                    ]
                },
                {
                    "name": "xyz2",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "fp32"
                    ]
                }
            ],
            "output_desc": [
                {
                    "name": "dist",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "fp32"
                    ]
                },
                {
                    "name": "idx",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "int32"
                    ]
                }
            ]
        }
    ]
  4. /usr/local/Ascend/ascend-toolkit/8.0.RC2.alpha002/python/site-packages/bin加入PATH

  5. 通过以下命令新建工程 msopgen gen -i ${JSON文件} -c ai_core-ascend310b -lan cpp -out {工程初始化目录}

  6. 新建完后,可能要调整CMakePresets.json文件,设置正确的ascend package 地址

    "ASCEND_CANN_PACKAGE_PATH": {
        "type": "PATH",
        "value": "/usr/local/Ascend/ascend-toolkit/latest"
    },
  7. 运行build.sh,编译算子,完成后再运行build_out/custom_opp_ubuntu_aarch64.run将自己写的算子安装到本地库里面

  8. 从下载测试样例,解压缩后,进入ThreeNNCase/ThreeNNCase1文件夹

  9. src/oprunner.cpp文件可能需要的修改如下

    #include "aclnn_three_nn.h" -> #include "aclnn_three_nn_custom.h"
    
    auto ret = aclnnThreeNNGetWorkspaceSize(inputTensor_[0], inputTensor_[1], outputTensor_[0],  outputTensor_[1], &workspaceSize, &handle);
    ->
    auto ret = aclnnThreeNNCustomGetWorkspaceSize(inputTensor_[0], inputTensor_[1], outputTensor_[0],  outputTensor_[1], &workspaceSize, &handle);
    
    ret = aclnnThreeNN(workspace, workspaceSize, handle, stream);
    ->
    ret = aclnnThreeNNCustom(workspace, workspaceSize, handle, stream);
  10. 运行run.sh进行评测

我要发帖子