gpt4 book ai didi

c++ - 在 CUDA 上乘以两个 float 变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:36 27 4
gpt4 key购买 nike

我有一个非常有趣的问题,但我花了 3 个小时才解决它,但我只是想不通发生了什么以及为什么它不起作用。我试过谷歌它,但没有结果。

我正在 CUDA 上编写程序。我有一段非常简单的代码:

__global__ void calcErrorOutputLayer_kernel(*arguments...*)
{

int idx = blockIdx.x * blockDim.x + threadIdx.x;
float gradient;
float derivation;
derivation = pow((2/(pow(euler, neuron_device[startIndex + idx].outputValue) +
pow(euler, -neuron_device[startIndex + idx].outputValue))), 2);
gradient = (backVector_device[idx] - neuron_device[startIndex + idx].outputValue);

gradient = gradient * derivation; //this line doesn't work
gradient = gradient * 2.0; //this line works

ok,梯度计算正确,推导也正确。但是当线出现时,这两个变量应该在哪里相乘什么都没有发生(梯度值没有改变)并且在下一行CUDA调试器告诉我:“'derivation'在目标位置没有值“

gradient * 2.0 工作正常,它改变梯度值 2 次。

谁能帮帮我?

最佳答案

a = pow(euler, neuron_device[startIndex + idx].outputValue);
b = pow(euler, -neuron_device[startIndex + idx].outputValue);
derivation = pow((2/(a + b),2);

Pow 在以下情况下给出错误:

  • 底数为负数并且指数不是整数值,或者
  • 底数为零且指数为负数,发生域错误,将全局变量errno设置为值EDOM。

我猜你遇到了精度问题,'a''b' 都是 0。您可能得到 derivation = 0"inf"

你能把 float 改成 double 吗?

关于c++ - 在 CUDA 上乘以两个 float 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com