cloud-oak/ProgressBars.jl

Extremely bad performance

Closed this issue · 1 comments

rmrao commented

Not sure if this repo is still being updated, but as an FYI however this is implemented seems to have pretty awful interplay with julia. I suspect it's preventing a lot of optimization of the for loop or it's printing far too often. It actually results in worse performance than using python. See this script:

In julia:

for i in ProgressBar(1:100000)
    i = i * 2
end
100000/100000 00:05<00:00, 20147.97 it/s]

In python:

for i in tqdm(range(100000)):
    i = i * 2
100000/100000 [00:00<00:00, 2806568.26it/s]

So julia performance is 100x worse than python performance. Moreover, if you omit the ProgressBar, julia is able to determine that the function does nothing and optimizes the whole thing away. The ProgressMeters plugin works much better and seems to be better supported.

Could you please either adopt a similar approach or, if you do not intend to support this, add a deprecation to the README with a pointer to the ProgressMeters repository?

khdlr commented

You're right, the problem is that the current implementation prints the progress bar on every single iteration.

This means that for very fast loops like in your example, composing the string and flushing stdout becomes the bottleneck.

#8 fixes this