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.

Xodarap
fonte
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.

FUZxxl
fonte
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.

Roberto Mizzoni
fonte
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