Tuesday, 27 August 2013

OpenACC

Previously on these pages I talked about getting into GPU processing, well I'm officially setting off on this project for reasons of exploration, but also to help you guys out there – the average programmer – get an easy grasp on the topic step by step.

I've no idea how this all works, so my first port of call has been the nVidia Developer Zone regarding Cuda... https://developer.nvidia.com/what-cuda … And I've spent a fair amount of time reading up on things.

My immediate problem was the dropping of library names and buzz words, which I have no idea what they are, and the page does not directly explain “MKL BLAS, “IPP”, “FFTW” all obfuscating abbreviations which in this days of rich information content on the internet its inexcusible to see them listed with no references.

Another item talked about is “OpenACC” directives, which as the page explains can speed up your loops in Fortran or C... But again there's no link to what “OpenACC” is.

Stepping forward to the “Getting Started” page and firm information is still obfuscated, I think perhaps nVidia's page – as informative as it is on the whole – is trying to not drop too much technical information on the programmer too quickly.  However, this is an advanced programming topic, anyone wondering in to attempt this has to be of a calibre able to soak up more information more quickly than this site seems to dole it out.  Though I have an expectation for there to be a sudden and deep learning curve begin any second.

Our first step is going to be what appears to be the simpler of the items listed, GPU Directives, which are part of the already mentioned “OpenACC”.  These are going to help parallelise loops in code – C code for us.

The page explaining this is fairly well featured, and this tantalising image is presented:



The immediate problem with this “open” standard however is that the companies supporting it are turning it into proprietory tool chains.

Without the tool chain – the compiler and linker – understanding what you're asking of it, your code won't contain or leverage the GPU for you, it'll just be plain old CPU driven code.  The page presented even goes so far as to present trials of software compilers to help gain access to the technology.

Unfortunately a 30 day trial isn't really what I'm after, and not really what I think an “Open” project should end up as.

Indeed crawling the net searching for further details one finds a plethora of content deriding Compilers for their lack of OpenACC acceptance, or even posts prophesying the arrival of OpenACC or even OpenMP support “in 2013”.  But it seems here now in 2013, its still not arrived:



Without tools readily available it leaves you rather stuck as to how to proceed investigating OpenACC.  My next step was this PDF document, explaining the directives: http://www.nvidia.com/docs/IO/117377/directives-tips-for-c.pdf

This is really a nuts and bolts approach to getting your C application to use OpenACC loop practices.  A good introduction.

The big problem with this however, is that it all references back to the Portland Group's proprietary compiler.  To which one can only get a 30 day trial.  Something I'm not open to signup up for just yet, at least not without a whole series of OpenACC code to run through it in short order.

No comments:

Post a Comment