モノイドは最適化に役立ちますか?


7

多くの一般的な操作はモノイドです。Haskellはこの観察を利用して、多くの高階関数をより一般的なものにしています(Foldable1つの例です)。

モノイドを使用してパフォーマンスを改善できる1つの明白な方法があります。プログラマーは操作の結合性をアサートしているため、操作を並列化できます。

モノイドを扱っていることを知って、コンパイラーがコードを最適化できる他の方法があるかどうか知りたいです。


偶然にも、HLearnライブラリの作者は、これに関する一連の投稿をしています。
Xodarap 2012年

回答:


7

コンパイラーはモノイドを使用して指数を最適化できます。してみましょうような一定の時間内に二項演算子のcalculateableこととモノイドを形成します。次に、操作a1a2

[1 ..]ak=akakak 回

コンパイラががモノイドの法則に従うことを知っている場合、通常、時間かかるものは、二乗および乗算アルゴリズムで時間でのみ評価できます。OOログ


1
素晴らしい観察。おそらく、は時間で計算できると想定していることを指定する必要があります。akakO1
Zach Langley

0

定数の折りたたみ/定数の伝播ステップにいる場合、モノイドのアイデンティティを見つけたときはいつでも、それが他の非定数式を乗算している場合はそれを無視できます。


私はこれについて考えていました-それが実際に速いかどうか知っていますか?
Xodarap 2012年

たとえば、ループ内で違いが生じる可能性があります。
Roberto Mizzoni、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.