为什么我对CUDA数学库sqrt()函数的调用失败了?

 mobiledu2502881483 发布于 2023-02-13 16:05

我是Cuda的新手,我有以下功能:

__global__ void square(float *myArrayGPU)
{
   myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
}

我想使用cuda数学库,我试过,#include "math.h"但我仍然得到错误

error: calling a __host__ function("__sqrt") from a __global__ function("square") is not allowed

知道我应该包含哪些库来使用sqrt

2 个回答
  • threadIdx.x是int类型.CUDA数学库仅针对单精度(float)和双精度(double)重载.您需要为要调用sqrt()的CUDA版本提供'float'或'double'类型参数sqrt().

    更改

    myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
    

    myArrayGPU[threadIdx.x] = sqrt( (float) threadIdx.x);
    

    有关更多详细信息,请查看CUDA sqrt()原型文档.

    2023-02-13 16:08 回答
  • sqrt期望浮动类型变量.尝试sqrt((float)(threadIdx.x))

    2023-02-13 16:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有