I'm planning to port an erosion algorithm from CPU to GPU, in theory, will it be faster or would it be better to multi-thread it on the CPU? The algorithm has quite a lot of if statements and loops with non-constant amount of iterations so it's going to be a lot of branching.
That depends on the algorithm.
Algorithms which perform the same operation on a large amount of data-points without any of these operations being dependent on the other data-points, or in other words, operations which are trivially parallelizable, are great for porting to GPUs.
But algorithms which have lots of branching and looping or which require to allocate large amounts of memory are usually more efficient to implement on the CPU.
Your algorithm sounds like something which would work better on CPU, but without actually seeing the algorithm in detail it is hard to tell.