2016-07-17 5 views
4

2.3.1.1項には、次のように最適化されたコードを示すことによって、ループ融合を説明します。最適化前のハスケルでループフュージョンの結果をダンプする方法は? <a href="https://wiki.haskell.org/Numeric_Haskell:_A_Vector_Tutorial" rel="nofollow">Haskell Wiki's Numeric Haskell page</a>の "融合上の注意事項"

:最適化の後

import qualified Data.Vector as V 

test :: V.Vector Int -> Double 
test = V.foldl (\ a b -> a * sqrt (fromIntegral b)) 0 

create :: Int -> V.Vector Int 
create n = (V.enumFromTo 1 n) 

main = print (test (create 1000000)) 

main_$s$wfoldlM_loop :: Int# -> Double# -> Double# 
main_$s$wfoldlM_loop = 
    \ (sc_sWA :: Int#) (sc1_sWB :: Double#) -> 
    case <=# sc_sWA 1000000 of _ { 
     False -> sc1_sWB; 
     True -> 
     main_$s$wfoldlM_loop 
      (+# sc_sWA 1) 
      (*## 
      sc1_sWB (sqrtDouble# (int2Double# sc_sWA))) 
    } 

このように最適化されたコードがどのように見えるのか不思議です。記事はghc-core toolと記載しましたが、特定のコマンドは表示されませんでした。

答えて

5

通常、GHCコアを見たいと思っています。コア出力を表示するための第一の選択肢は、hereと記載されているGHC用に-ddump-simplを使用することです。 -dsuppress-allのように、出力を変更するためのフラグも多くあります(簡単にするため)。

実際にはの情報は、コアの情報はhereです。

関連する問題