4
問題或多或少地說明了一切。PyCUDA:設備代碼中的Pow嘗試使用std :: pow,失敗
calling a host function("std::pow<int, int> ") from a __device__/__global__ function("_calc_psd") is not allowed
從我的理解,這應該是使用cuda pow函數,而不是。
問題或多或少地說明了一切。PyCUDA:設備代碼中的Pow嘗試使用std :: pow,失敗
calling a host function("std::pow<int, int> ") from a __device__/__global__ function("_calc_psd") is not allowed
從我的理解,這應該是使用cuda pow函數,而不是。
該錯誤與編譯器報告完全相同。您不能在設備代碼中使用主機函數,並且包含整個主機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是一個相當昂貴的函數,我相信一些級聯整數乘法會更快)。