Koe*_*kje 9 java floating-point raytracing
上学期我们必须为学校的课程开发光线跟踪器.学校正在完成,我试图用它来捣乱.
我想知道如果我将所有浮点计算从double更改为float(所有计算都是使用双精度计算)会发生什么变化.所以我将每个变量更改为float类型,并简单地将从Math方法返回的每个double转换为float.在几个场景中测试我的光线跟踪器显示了相当不错的性能提升.
在网上搜索我发现浮动可能更快的各种原因,但也有人说在64位环境中双倍可以更快,甚至更快.问题是,我在64位环境和JVM中运行.这种性能提升的原因是什么?
现在,我正在阅读PBRT书,并计划在此之后从头开始重写光线跟踪器.为所有浮点计算选择浮点数会产生任何问题吗?在我的测试中我没有注意到任何东西,但是对于某些场景来说可能较低的精度(交叉点测试似乎可能会造成问题)?或者可能是一种权衡,比如在关键测试中使用double,为不太关键的计算使用float?我将不得不使用其他数学库来摆脱铸造,我会采用浮动方式.
就桌面处理器而言,就计算速度而言,float和double之间几乎没有区别.差异只能来自增加的内存带宽要求,因为双倍需要两倍的空间.
它与基于GPU的计算不同,它们更适合浮动,例如Nvidia GPU的双重打破.
我会采取混合方式; 存储具有浮点精度的多边形数据,但以double为单位进行所有计算.占用内存小,精度高 - 双赢.
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |