You're working for Acme Surface Materials (ASM), which designs and fabricates patterns on surfaces using repeated application of low-energy interference e-beam lithography. ASM has built a model of how these patterns are fabricated; the model employs three-dimensional cellular automata, such as was used in Homework 3. Unlike Homework 3, ASM's automata are not symmetric, and are very fine grained with billions or even trillions of cells and many generations. Cell attributes are very simple, typically a small integer (perhaps signed, perhaps not), or a single-precision floating point value.
ASM has used a Java-based simulator, much like Homework 3, to simulate these automata, but they want something faster and cheaper. Your boss has heard that NVIDIA has put out new programming languages or technologies called Cg and CUDA that generate code for GPUs instead of CPUs. There are competing projects as well: Apple has OpenCL, and ATI, Intel, Microsoft, and IBM are all working on competing projects. Your boss asks you to check out these technologies to see whether this would provide a more cost-effective way to simulate your automata.
Learn enough about Cg or CUDA (your choice) and a competing language other than Cg or CUDA (your choice) to assess their suitability for the task of writing large 2D cellular automata simulations in which cells typically have simple numerical attributes such as described above. It wouldn't hurt to write a simple program or two to check your assessments. Write a one-page executive summary assessing CUDA's and the other language's suitabilities. The summary should be in 10-point font or larger. You can put references on a second page, if there's not enough room on one page. Your summary should focus on the technologies' effects on reliability, portability (to future hardware), efficiency, flexibility, and ease of use, compared to the Java-oriented solution used in Homework 3. Please keep the resources for written reports in mind.
Submit a file hw6.pdf containing your summary.