UBO Performance?

I’m using a UBO to store all my point lights. Point lights need to update their position based on the model view matrix.

I can do the model view matrix update once a frame in my C++ code, saving having to do it for every fragment in GLSL. The downside of this would be that I have to update my UBO every frame.

My question is which is worse: doing far more matrix multiplication or having to update my UBO every frame?

Updating the UBO is probably better, but be sure to avoid pipeline stalls in doing so. See this page for some hints.