2011-04-13 92 views

回答

6

該錯誤與編譯器報告完全相同。您不能在設備代碼中使用主機函數,並且包含整個主機C++ std庫。 CUDA包含自己的標準庫,在編程指南中有描述,但是您應該使用pow或fpow(從C標準庫中取得,不包含C++或名稱空間)。 nvcc將使用cuda正確的設備函數重載該函數並內聯結果代碼。像下面的東西將工作:

#include <math.h> 

__device__ float func(float x) { 

    return x * x * fpow(x, 0.123456f); 
} 

編輯:我錯過了第一次是位錯誤報告的模板說明符。你確定你傳遞了float或double參數給pow嗎?如果傳遞整數,CUDA標準庫中沒有重載函數,這就是它可能失敗的原因。如果你需要一個整數冪函數,你將不得不推出你自己的(或做鑄造,但pow是一個相當昂貴的函數,我相信一些級聯整數乘法會更快)。