Os monoides são úteis na otimização?


7

Muitas operações comuns são monoides . Haskell aproveitou essa observação para tornar muitas funções de ordem superior mais genéricas ( Foldablesendo um exemplo).

Existe uma maneira óbvia de usar monoides para melhorar o desempenho: os programadores estão afirmando a associatividade da operação e, portanto, as operações podem ser paralelizadas.

Estou curioso para saber se existem outras maneiras de um compilador otimizar o código, sabendo que estamos lidando com um monóide.


Coincidentemente, o autor da biblioteca HLearn tem uma série de posts sobre isso agora.
Xodarap

Respostas:


7

O compilador pode otimizar a exponenciação com monoides. Deixei ser um operador binário calculável em tempo constante, de modo que e uma1 1,uma2,...UMAformar um monóide. Então a operação

[1 ..n]umak=umakumakumakn vezes

o que geralmente leva O(n) o tempo pode ser avaliado com o quadrado e o algoritmo de multiplicação em apenas O(registron) tempo, se o compilador sabe que obedece às leis monóides.


11
Boa observação. Talvez você deva especificar que está assumindo queumakumak pode ser calculado em O(1 1)Tempo.
Zach Langley

0

Se você estiver na etapa de dobragem constante / propagação constante, sempre que tiver a identidade do monóide, poderá ignorá-lo se estiver multiplicando outras expressões não constantes.


Eu estava pensando sobre isso - você sabe se é realmente mais rápido?
Xodarap

Pode fazer a diferença dentro de um loop, por exemplo.
Roberto Mizzoni
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.