Re: [問題] 利用clang前端傳遞參數給後端opt Pass

看板CompilerDev作者 (夏克維夫)時間2年前 (2022/04/14 10:58), 編輯推噓1(100)
留言1則, 1人參與, 2年前最新討論串2/2 (看更多)
※ 引述《unimaybe (unimaybe)》之銘言: : 各位好 : 最近在寫 LLVM 的 Pass : 主要是針對 Compile 成 IR 的 CUDA Code 做一些事情,我會把 distance 的參數傳進去 : ,Pass 會利用這個參數做一些事情。以下是我下的 command : opt -load buildDir/CUDAMemPass.so -cudamem -distance 4 main.bc -o main.i.bc : 這樣下參數確實是可以傳進去的,但是因為把 CUDA 編譯成 IR 的 Makefile 實在很麻煩 : ,要編成 ptx, fatbin,如果有好幾個 cuda file 就更複雜 ,所以在 Stackoveflow 看 : 到有人用 clang 前端傳參數進去,大概長這樣 : clang++ um.cu -o um -Xclang -load -Xclang CUDAMemPass.so -Xclang : -plugin-arg-distance -Xclang 4 --cuda-gpu-arch=sm_61 -L : /usr/local/cuda/lib64/ : 這樣確實是可以跑,不會有error,但是參數實際上卻沒有傳進去 (print 出來是0) : 想請問大家我 clang 的 command 是否有下錯呢? 因為 -plugin-arg-<argument name> 不是用來傳參數給 LLVM Pass plugin 而是用來傳參數給 Clang plugin Clang 其實有好幾種 plugin: AST consumer plugin, custom pragma plugin, custom attribute plugin 如果以你的例子 要傳參數給 LLVM plugin, 可以試試 -Xclang -load -Xclang MyPass.so -Xclang -mllvm -Xclang -my-fancy-arg 另外看來你的例子裡用的是舊的PassManager的LLVM Pass 雖然現在依然可以用 但未來LLVM會逐漸phase out這種Pass喔 : 另外想請問有沒有什麼無腦用 clang 編譯 cuda 的方法,我現在都是 clang++ -v,再把 https://llvm.org/docs/CompileCudaWithLLVM.html 我個人倒是沒有什麼用clang編CUDA相關經驗啦 但上面這個連結可以參考一下 : 他手刻成 Makefile,但是就相當沒有效率。 : 希望沒有違反版規,有的話再麻煩提醒一下了,謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.234.228.237 (美國) ※ 文章網址: https://www.ptt.cc/bbs/CompilerDev/M.1649905114.A.4DF.html

04/14 16:37, 2年前 , 1F
原來如此,了解了!非常謝謝你的回覆~
04/14 16:37, 1F
文章代碼(AID): #1YLutQJV (CompilerDev)
文章代碼(AID): #1YLutQJV (CompilerDev)