Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Haskell中的光线追踪 过去我在C++中使用了一个非常基础的射线追踪软件。 现在,我们想从头开始创建一个高级系统(CSG、光能传递等)_Performance_Haskell_Raytracing - Fatal编程技术网

Performance Haskell中的光线追踪 过去我在C++中使用了一个非常基础的射线追踪软件。 现在,我们想从头开始创建一个高级系统(CSG、光能传递等)

Performance Haskell中的光线追踪 过去我在C++中使用了一个非常基础的射线追踪软件。 现在,我们想从头开始创建一个高级系统(CSG、光能传递等),performance,haskell,raytracing,Performance,Haskell,Raytracing,我发现在Haskell中实现它很有趣,因为我也在学习函数式编程 在光线跟踪算法中,性能是一个非常重要的因素。Haskell程序一般比C++程序慢。多少钱?这取决于上下文 考虑到这种情况(即潜在的非常复杂的RT),在Haskell中工作是否可行?可能值得检查Repa的平面并行性。如果您知道自己在做什么,您可以获得相当好的性能,但要获得出色的性能,有时需要阅读和检查核心输出,以了解为什么没有解除绑定 不过,这要看情况而定。如果您编写C代码是为了获得绝对的性能,那么您很可能不会用Repa打败C,因为别

我发现在Haskell中实现它很有趣,因为我也在学习函数式编程

在光线跟踪算法中,性能是一个非常重要的因素。Haskell程序一般比C++程序慢。多少钱?这取决于上下文


考虑到这种情况(即潜在的非常复杂的RT),在Haskell中工作是否可行?

可能值得检查Repa的平面并行性。如果您知道自己在做什么,您可以获得相当好的性能,但要获得出色的性能,有时需要阅读和检查核心输出,以了解为什么没有解除绑定

不过,这要看情况而定。如果您编写C代码是为了获得绝对的性能,那么您很可能不会用Repa打败C,因为别名分析目前似乎不是很好。 但是,除非您将C代码手工融合到一个单片函数中,否则我怀疑您从融合和Repa中的“免费并行”中获得的好处可能有助于它的竞争


不要使用列表。如果您不想使用Repa,我建议您使用Data.Vector.unbox。

我对Haskell也比较陌生。就在不久前,我将一个四元数分形光线跟踪器提交给了用Haskell编写的bitbucket

代码并不完美,但它相当小,并在samples文件夹中生成了图像

我使用了Repa库(关于Repa的不错的教程),我认为它非常适合我的光线跟踪程序。它允许我指定一个函数来计算特定光子的“命中”,然后它自动将该函数与每个光子并行


诚然,分形光线跟踪比普通光线跟踪更容易,因为可以在“光子”路径上的任何点采样,以询问它是否发生碰撞。此外,没有实现任何高级功能,如光能传递或焦散,因此我无法评论这些功能的扩展程度。

是的,它是可行的,Haskell中已经有许多光线跟踪器(无论是在Hackage还是在其他地方)。如果你想得到一个好的答案,你应该使你的问题更加精确。是的,有高性能的哈斯克尔射线跟踪器。这是一种合法的语言选择。但是,如果你是哈斯克尔的初学者,并且已经知道C++,你将写出比Haskell更好/更快的C++。