Tag: 光线跟踪

计算基于图块的游戏中的哪些图块点亮(“光线跟踪”)

我正在写一个基于平铺的小游戏,为此我想支持光源。 但是我的algorithm太弱了,所以我来找你帮忙。 情况是这样的:有一个基于瓦片的地图(作为一个二维arrays),包含一个光源和几个项目。 我想要计算哪些瓦片是由光源点亮的,哪些在阴影下。 大概是什么样子的视觉辅助。 L是光源,X是挡光的物品,0是点亮的瓷砖,-s是阴影中的瓷砖。 0 0 0 0 0 0 – – 0 0 0 0 0 0 0 – 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L 0 0 0 0 0 0 0 0 […]

尽pipe只有22Mb的内存使用量,Haskell线程堆溢出了吗?

我正在尝试并行化射线追踪器。 这意味着我有一个很长的小计算列表。 香草程序运行在67.98秒的特定场景和13 MB的总内存使用率和99.2%的生产率。 在我的第一次尝试中,我使用了缓冲区大小为50的并行策略parBuffer 。我select了parBuffer因为它只是像消耗火花一样parList列表,并且不会像parList那样parList列表的脊柱,由于名单很长,所以很多记忆。 使用-N2 ,运行时间为100.46秒,总内存使用量为14 MB,生产力为97.8%。 火花信息是: SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled) 大部分失败的火花表明火花粒度太小,所以接下来我尝试使用策略parListChunk ,它将列表拆分成块,并为每个块创build一个火花。 我用0.25 * imageWidth的块大小得到了最好的结果。 该程序运行93.43秒,总内存使用量达到236 MB,生产力达到97.3%。 火花信息是: SPARKS: 2400 (2400 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled) 。 我相信更大的内存使用是因为parListChunk强制列表的脊椎。 然后,我试图写我自己的策略,懒惰地将列表分成块,然后将块传递给parBuffer并连接结果。 concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map colorPixel […]