在__global__函数中使用CUDA数学函数 - Nsight Eclipse Edition

时间:2013-02-07 21:01:14

标签: cuda

我试图在__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

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:6)

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

std::pow<float, double>

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