3

私は過去に C++ で(非常に基本的な)レイ トレーシングソフトウェアを使用したことがあります。高度なシステム (CSG、ラジオシティなど) をゼロから作成したいと考えています。

関数型プログラミングも学んでいるので、Haskellで実装するのは面白いと思います。

パフォーマンスは、レイ トレーシングアルゴリズムにおいて非常に重要な要素です。一般に、Haskell プログラムは C++ プログラムよりも低速です。いくら?それは文脈に依存します。

このコンテキスト (潜在的に非常に複雑な RT) を考慮すると、Haskell で動作することは実行可能ですか?

4

2 に答える 2

7

フラットな並列処理については、Repa をチェックしてみる価値があるかもしれません。何をしているのかを知っていれば、かなり良いパフォーマンスを得ることができますが、優れたパフォーマンスを得るには、コア出力を読んで調べて、なぜアンボックス化されていないのかを確認する必要がある場合があります。

しかし、それは依存します。絶対的なパフォーマンスを求めて C コードを作成している場合、Repa で C に勝ることはほとんどありませ。現時点では、エイリアス分析があまり良くないように見えるからです。しかし、C コードを 1 つのモノリシック関数に手作業で融合していない限り、融合から得られる利点と Repa の「自由な並列処理」が競合に役立つのではないかと思います。

http://code.ouroborus.net/gloss/gloss-head/gloss-examples/raster/Ray/

http://www.youtube.com/watch?v=jBd9c1gAqWs

また、リストを使用しないでください。Repa を使用したくない場合は、Data.Vector.Unboxed を使用することをお勧めします。

于 2013-07-03T02:10:56.157 に答える