In assignment 2 there is one example where lots of circles are gathered in a small portion of the image. In this case rendering crop of a full-size image may not represent the true performance of the algorithm. So what should we do in cases like this?
@locked Every algorithm has a case that it's not the most efficient for. You may want to keep those cases in mind and optimize your algorithm to account for such edge cases, like we did in assignment 2, but if you can't, I imagine it's probably a good idea to value the common cases more.
When scaling down problems, you could completely change the dynamic of the problem. For example, if your initial issue was due to memory-bandwidth and you scale your problem down, then everything will work fine, since you require less data and won't max out memory bandwidth.
In assignment 2, different circle configurations would preform better with different grid sizes. For instance, on an image with circles concentrated in one area we waste a lot of computation by splitting the image up into a grid, and the algorithm essentially becomes sequential. But for an image with evenly dispersed tiny circles the grid is very useful in splitting up work
For assignment 2, it would have been useful to scale down since that would have still kept the circle to grids ratio the same. Since that was where the main parallelism came from, we wouldn't have changed the dynamic of the problem.