Many miniapps already exist, such as the Gyrokinetic Toroidal Code, which solves an equation related to microturbulence. Heroux also mentions miniFE, which is a miniapp for finite elements, a method for dividing a problem into smaller parts for solution.
Experience with this miniapp taught Heroux some lessons. For example, developers starting to work with a miniapp make various codes derived from elsewhere and tweaked, such as one for CUDA, NVIDIA’s parallel computing architecture. “There should be no limit,” Heroux says. “People should be permitted to create any number of variants.”
Still, some consistency must be maintained. For example, early on with miniFE, Heroux and his colleagues kept revising the basic code, integrating new things as they found them. Consequently, Heroux says, “The base code became this large piece of spaghetti, so we had to back track and put those extra things in derived codes.” Now, Heroux’s team keeps a base version.
Even more miniapps will emerge as making them becomes more automated. “There are now tools for extracting miniapps from code, but they are really in their infancy,” Koniges says. The automated techniques will spawn new miniapps and increasing modifications of existing ones. Consequently, computer scientists will need to be even more careful in maintaining base codes. Likewise, the expansion in miniapps increases the need to ensure that the codes can predict the behavior of the complete application.