【发布时间】:2016-01-22 00:24:51
【问题描述】:
我正在 GPU 上做一些数学运算并读取结果。
我从日志中得到了错误的值。我已经验证了值 0 - 10、20、30、40。
如果我对值进行硬编码(如您在下面的验证中看到的那样),我会得到正确的结果。但是,如果我将 log 与应该返回相同结果的硬编码值一起使用,我会得到错误的结果。
这是我在工作中一直在做的事情。
vec4 IScale(vec4 value)
{
switch(uScaleType_i)
{
case Log:
//value = log(value);
value = vec4(1,1,1,1);
value.r = log(5);
//verifiy
//value.r = 0.698970004
break;
case Sqrt:
value = sqrt(value);
break;
case None:
break;
}
return value;
}
我想知道这里有什么意义。我已经添加了我回到 excel 中的结果并做了一个图表。起初它几乎就像它的正确值的两倍,但它不是那么干净,它越来越远。
除了驱动问题,还有其他解释吗?我想不出还有什么要检查的!
如果是这样,除了重构我的代码以在 CPU 上执行之外,我怎么可能解决它?为什么我不能在网上找到证据来支持这一点?我完全被迷惑了!
我在笔记本电脑上运行: (Intel(R) HD Graphics 4000 with 132 ext.)
附言Sqrt 很好,我得到了我期望的值。 p.p.s我查了一下,我没有不小心创建了一个名为“log”的函数
【问题讨论】:
-
我现在确实觉得很傻!希望这会帮助其他人休息一天!