在一个全局函数中使用CUDA数学函数-Nsight Eclipse Edition

在一个全局函数中使用CUDA数学函数-Nsight Eclipse Edition,cuda,Cuda,我试图在_全局_函数中使用数学函数(pow),但出现以下错误: calling a __host__ function("std::pow<float, double> ") from a __global__ function is not allowed 不允许从全局函数调用主机函数(“std::pow”) 我试着选中项目属性->构建->设置->工具设置->优化和无运气下的“利用快速数学库”复选框 我检查了pow函数中的类型,这两种类型都是float,我还包括了以下头文件:

我试图在_全局_函数中使用数学函数(pow),但出现以下错误:

 calling a __host__ function("std::pow<float, double> ") from a __global__ function is not allowed
不允许从全局函数调用主机函数(“std::pow”)
我试着选中项目属性->构建->设置->工具设置->优化和无运气下的“利用快速数学库”复选框

我检查了pow函数中的类型,这两种类型都是float,我还包括了以下头文件:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <math.h>
#include <sys/times.h>
#include <sys/resource.h>
#include <limits.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include "utils.h"
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“utils.h”
也不使用名称空间std


关于如何修复此问题,您有什么想法吗?

您需要更仔细地阅读错误消息。关键信息是

std::pow<float, double>
std::pow
注意:
。您可以使用双精度和单精度参数调用
pow
。CUDA数学库是通过模板重载选定的标准库函数实现的,但是您拥有的参数没有匹配的重载。将代码修改为具有所有双精度或所有单精度参数,错误将消失。

支持的pow()变体有:pow(浮点,浮点),pow(浮点,整数),pow(双精度,双精度),pow(双精度,整数)。请注意,pow()非常慢,在许多情况下,下列函数之一(是求幂的特殊情况)可以提供更好的性能(当然,在适用的情况下):exp、exp2、exp10、expm1、sqrt、rsqrt、cbrt、rcbrt。对于平方或立方,写xx,xx*x。请参阅最佳实践指南。