Intel and NVIDIA spent the latter part of last year pushing their HPC supplemental compute capabilities. For Intel, this meant unveiling a new set of Xeon Phi coprocessors. For NVIDIA, this meant pushing OpenACC support into the GNU Compiler Collection (GCC). For HPC developers, both developments meant 2014 would be a year of tough questions for platform choosers.
Duncan Poole, president of OpenACC and employee at NVIDIA, said that developers had been asking when an open-source implementation of OpenACC would be made available. Thus, the decision was made to push OpenACC API support into GCC.
Nathan Sidwell, developer at Mentor Graphics, said that the tool-chain team at his company is now using its knowledge of GCC development to bring OpenACC to the compiler collection. The work will take some time, he said.
“The development goal is to implement OpenACC 2.0,” said Sidwell. “Obviously, starting from no implementation at all, that’s quite a large project. We’ll be implementing this in stages. There will be cases where we need to implement useful functionality first so people can use it for many OpenACC programs first. The new features will be done later.”
But not everyone is excited about the potential of compiling OpenACC applications with GCC. James Reinders, director of software products and multicore evangelist at Intel, has long advocated the inclusion of OpenACC-like support in the much longer-lived OpenMP HPC API set.
“OpenMP was formed in 1996 and came out with a spec in 1997,” he said. “It started with a pretty simple vision that was to bring together a standardization of directives that would allow users and compiler writers to adhere to one method to span multiple architectures. OpenMP was successful with that.
“Back when we formed OpenMP, it was a collection of a lot of companies that worked well together. I was manager of the Intel Fortran compiler. My bookshelf was stuffed with versions of manuals for other compilers: VAX, Sun, IBM, Cray. The reason I had those is I had to know, how did this standard spell a directive that did something similar to what another’s compiler did and what another one did? Every engineer can argue about the perfect way to support a compiler, but our compiler had a switch that would support all the compilers: a switch for Sun, for Cray…
“OpenMP did a fabulous job of bringing that all together,” he continued. “Unfortunately, it’s not a vision I see shared by the pseudo-standard called OpenACC. It’s not a standard in the same sense of others, where it’s driven by a collection of companies to suit multiple needs. OpenACC was put out to solve the needs of one company. It solves that need. It’s a proprietary standard for NVIDIA, supported by people who want to see some things offloaded to a GPU.”