Chapter 13. Mandelbrot Image Generation
The preceding chapters have shown how FPGAs can be combined with traditional processors to create highly parallel, high-performance computing platforms for direct hardware acceleration of key algorithms. You have seen as well how a streaming programming model can be used to exploit parallelism at the system level while at the same time allowing modern compilers to handle the automatic generation of parallelism at the level of individual C statements and for inner code loops.
The combination of automated generation of process-level hardware and system-level programmability provides system designers with a powerful, efficient way to create applications for programmable hardware. However, it does introduce new complexities to the programming problemcomplexities that grow in proportion to the size of the application and the number of component processes.
This chapter presents a final example that allows us to demonstrate some key ideas related to larger parallel applications. The example we will present is a Mandelbrot set generator, which is one type of fractal model generator. Fractal models are used in many supercomputing applications. They are useful for predicting systems that demonstrate chaotic behavior (such as might be observed when modeling the weather, genetic mutations, or the formation of planets). We use the Mandelbrot set here because the underlying calculation is easy to understand and yet still demonstrates the characteristics of other, possibly more complex fractal objects. More importantly, this example demonstrates a system in which a potentially large number of parallel calculations must be performed, but for which the calculations themselves vary enormously in terms of the time required to complete. This presents us with a load balancing challenge, which is the primary topic of this chapter.