我试图在__global__函数中使用数学函数(pow),但是我收到了这个错误:
calling a __host__ function("std::pow<float, double> ") from a __global__ function is not allowed
我尝试检查项目属性下的“使用快速数学库”复选框 - &gt;构建 - &gt;设置 - &gt;工具设置 - &gt;优化,没有运气。
我检查了pow函数内部的类型,两者都是浮点数,我还包含了这些头文件:
#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"
也没有使用命名空间std
关于如何解决这个问题的任何想法?
答案 0 :(得分:6)
您需要更仔细地阅读错误消息。关键信息是
std::pow<float, double>
注意:<float,double>
。您可以使用双精度和单精度参数调用pow
。 CUDA数学库是通过模板重载选定的标准库函数实现的,但是您的参数没有匹配的重载。修复代码以获得所有双精度或所有单精度参数,并且错误将消失。