我想用GNU多精度庫(gmp)的cuda。當我添加像mpf_init()這樣的gmp指令到我的設備代碼時,我得到這個編譯器錯誤:tlgmp.cu(37):error:從__ device__/__ global__函數調用一個主機函數(「__ gmpf_init」) ) 不允許。鏈接cuda與gmp
是否可以重新定義gmp指令,以便它們可以在設備代碼中使用?
我想用GNU多精度庫(gmp)的cuda。當我添加像mpf_init()這樣的gmp指令到我的設備代碼時,我得到這個編譯器錯誤:tlgmp.cu(37):error:從__ device__/__ global__函數調用一個主機函數(「__ gmpf_init」) ) 不允許。鏈接cuda與gmp
是否可以重新定義gmp指令,以便它們可以在設備代碼中使用?
GMP庫是爲主機編譯的,因此它不能直接在設備代碼中使用。這是你所看到的錯誤的直接原因。
由於它是一個開源庫,因此可能需要花費一些精力去瀏覽代碼並創建自己的版本,該版本對您需要的各種功能具有適當的__device__
裝飾器(可能還有其他更改)。但是,這可能需要大量的工作。
另一種選擇可能是調查CUMP library。
CUMP的工作鏈接:https://github.com/skystar0227/CUMP – masterxilo
另一種選擇是http://homepages.laas.fr/mmjoldes/campary/ – masterxilo
不在圖書館一級,沒有。該庫是爲x86編譯的,並且不包含爲在設備上運行編譯的函數。由於它是開源的,因此應該有可能通過源代碼級別的函數庫,並創建一個新的庫(或者任何你需要的函數),這些庫被填充了必要的__ host__ __ device__裝飾和其他可能的變化,然後通過nvcc傳遞該代碼以生成設備可調用函數。 –
當我使用cuda gmp的時候,只是在網上搜索,[此CUMP庫](http://www.hpcs.cs.tsukuba.ac.jp/~nakayama/cump/)彈出。值得一看。 –
我已經自己找到了這個庫,並查看了示例文件axpy.cu.這個例子包含了gmp.h,並且在設備代碼中使用了標準的gmp指令(mpf_mul(),mpf_add())。因此它應該產生相同的錯誤信息,除非作者使用gmp庫的修改版本。 –