Consider the code:
HairyStarfish[a_, plotpts_, thickness_, imagesize_] := ParametricPlot[{
Sum[(2/3)^k Sin[(3/2)^k t], {k, 0, a}],
Sum[(-(2/3))^k Cos[(3/2)^k t], {k, 0, a}]
}, {t, 0, 2^(a + 1) Pi}, MaxRecursion -> 5, Axes -> False,
PlotPoints -> plotpts, PlotStyle -> {Thickness[thickness], Black},
PlotRange -> {{-2.5, 2.5}, {-2.5, 2.5}}, ImageSize -> {imagesize, Automatic}]
HairyStarfish[11, 15000, 0.00004, 500]

I want to generate this plot at a = 25 for a large art print (interesting features emerge as a gets large). Computation time increases exponentially with each increment of the value a, since PlotPoints must be doubled to keep accuracy. I've been doing it piecewise so far, breaking {t, 0, 2^(a+1) Pi} up into segments, and then combining the plots later with ImageMultiply. I'm wondering if there's an efficient way to render several segments at once with parallelization and/or GPU. Or if anyone has general comments on a smarter way to render this plot.
So far, I've tried:
- ParallelEvaluate, generating multiple plots at once on parallel kernels. But it is not any faster.
- Pairing different values of MaxRecursion and PlotPoints. No significant speed increase.
- Generating only half of the plot, then combing with it's mirror (since it is symmetric). But this only cuts time by a factor of 2.
Does ParametricPlot use the graphics card as wisely as possible? My graphics card is a 980ti with 6gb of vram and 704 cores, so I figure it should be able to speed up the rendering somewhat if I utilize it properly. I just got CUDALink installed... I've been reading about it, but I'm still pretty lost on how i could apply it here, if at all.
I've also considered purchasing a cluster computing package through gridMathematica, since the computation times are so high and it is parallelizable. But I want to make sure I'm attacking the problem as intelligently as possible before I go that route.