華為昇騰訓練營筆記-Ascend C運算元開發

20211201李柏林發表於2024-07-11

一、核函式開發

核函式(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

相關文章