相关疑难解决方法(0)

使用Repa修复"循环二维数组"的最佳方法

我发现数组库Repa for Haskell非常有趣,并且想要制作一个简单的程序,试图了解如何使用它.我还使用列表进行了简单的实现,事实证明它更快.我的主要问题是如何改进下面的Repa代码以使其最有效(并且希望也非常易读).我是一个很新的使用Haskell,我找不到任何容易理解的关于Repa的教程[ 在Haskell Wiki编辑一个,我在写这篇文章的时候有点忘记],所以不要以为我什么都知道.:)例如,我不确定何时使用force或deepSeqArray.

该程序用于以下列方式近似计算球体的体积:

  1. 指定球体的中心点和半径,以及长方体内等距离的坐标,已知这些坐标包围球体.
  2. 程序获取每个坐标,计算到球体中心的距离,如果它小于球体的半径,则用于累加球体的总(近似)体积.

下面显示了两个版本,一个使用列表,另一个使用repa.我知道代码是低效的,特别是对于这个用例,但是想法是让它在以后变得更复杂.

对于下面的值,并使用"ghc -Odph -fllvm -fforce-recomp -rtsopts -threaded"进行编译,列表版本需要1.4秒,而修复版本需要12秒,+ RTS -N1和10秒+ + RTS - N2,虽然没有转换火花(我有一台双核Intel机器(Core 2 Duo E7400 @ 2.8 GHz)运行Windows 7 64,GHC 7.0.2和llvm 2.8).(注释下面主要的正确行,只运行其中一个版本.)

感谢您的任何帮助!

import Data.Array.Repa as R
import qualified Data.Vector.Unboxed as V
import Prelude as P

-- Calculate the volume of a sphere by putting it in a bath of coordinates. Generate coordinates (x,y,z) in a cuboid. Then, for each coordinate, check if it is inside the …
Run Code Online (Sandbox Code Playgroud)

arrays performance profiling haskell repa

30
推荐指数
3
解决办法
2136
查看次数

标签 统计

arrays ×1

haskell ×1

performance ×1

profiling ×1

repa ×1