2011-04-13 2 views

답변

6

오류는 컴파일러가보고 된 것과 똑같습니다. 호스트 코드는 장치 코드에서 사용할 수 없으며 전체 호스트 C++ 표준 라이브러리를 포함합니다. CUDA에는 프로그래밍 가이드에 설명 된 자체 표준 라이브러리가 포함되어 있지만 pow 또는 fpow (C 표준 라이브러리에서 가져온 C++ 또는 네임 스페이스)를 사용해야합니다. nvcc는 올바른 cuda 장치 기능으로 함수를 오버로드하고 결과 코드를 인라인합니다. 다음과 같은 것이 작동합니다 :

#include <math.h> 

__device__ float func(float x) { 

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

EDIT : 처음에 놓친 비트는 오류로보고 된 템플릿 지정자입니다. pow에 float 또는 double 인수를 전달하고 있습니까? 정수를 전달하는 경우 CUDA 표준 라이브러리에 과부하 기능이 없으므로 실패 할 수 있습니다. integer pow 함수가 필요하다면, 자신 만의 롤을 만들어야 만한다. (또는 캐스팅을 수행해야하지만, pow는 다소 비싼 함수이고, 몇개의 캐스케이드 된 정수 곱셈이 빠를 것이다.)

관련 문제