一、核函式開發
核函式(Kernel Function)是Ascend C運算元裝置側實現的入口。在核函式中,需要為在一個核上執行的程式碼規定要進行的資料訪問和計算操作,當核函式被呼叫時,多個核都執行相同的核函式程式碼,具有相同的引數,並行執行。
核函式的定義為:
extern "C" __global__ __aicore__ void add_custom(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z);
Kernel直調工程體驗
cd ~/samples/operator/AddCustomSample/KernelLaunch/
cp -r AddKernelInvocationNeo/ test
cd test/
bash run.sh -r cpu -v Ascend310P1
觀察結果
用MobaXTerm左側的檔案欄開啟~/samples/operator/AddCustomSample/KernelLaunch/test/scripts/gen_data.py
修改其中程式碼:
input_x = np.random.uniform(1,10,[8,2048]).astype(np.float16)
golden = np.sinh(input_x).astype(np.float16)
儲存
再開啟add_custom.cpp
修改其中compute()函式,把“Add(xxxxxxxxxxxxxxxxx)”那一行註釋掉,改成sinh的計算邏輯,用xLocal當輸入,zLocal當輸出,改完後儲存。
測試方式:
bash run.sh -r cpu -v Ascend310P1
輸出“test pass”即為修改成功。
cd ~ /samples/operator/AddCustomSample/FrameworkLaunch/AddCustom
bash build.sh
cd build_out
./custom_opp_ubuntu_aarch64.run
cd ~/samples/samples/operator/AddCustomSample/FrameworkLaunch/AclNNInvocation
bash run.sh