Phoronix: NVIDIA's CUDA/OpenCL PTX Back-End In LLVM 3.2
In preparing for the imminent release of LLVM 3.2, another worthwhile feature to go over is the NVPTX back-end that's been merged for this forthcoming open-source compiler infrastructure release. The NVPTX LLVM back-end is what's used by NVIDIA's closed-source driver for its CUDA and OpenCL compiler...
can someone please explain exactly what this means? I found an explanation on Wikipedia which says:
"Parallel Thread Execution (PTX) is a pseudo-assembly language used in Nvidia's CUDA programming environment. The nvcc compiler translates code written in CUDA, a C-like language, into PTX, and the graphics driver contains a compiler which translates the PTX into a binary code which can be run on the processing cores."
but then I went to the LLVM site, to the Wikipedia entry for LLVM, and found nothing related to CUDA or even NVIDIA for that matter. it seems there is a missing piece I do not have in understanding what LLVM is for CUDA/OpenCL and how this new version has any impact on them.
Well, nVidia needs to develop and maintain a complete compiler infrastructure (nvcc) to produce PTX code from CUDA or OpenCL. Theoretically, by hiding more technical aspects of the GPU by a well defined ABI and API, opening their PTX would "move" all effords in maintaining a compiler like nvcc more towards an open source project. PTX is the last stage of code abstraction which is "open and free", the binary code, executable by the GPU itself, is then performed by the driver itself.
The question is how "open" this code and execution pathway really is. If LLVM is capable of producing high quality PTX code executable by the nVidia driver, then open libraries like POCL (portable OpenCL) with the proper backend can be used to drive the GPGPU use on any platform which can handle POCL.
But such a conclusion is only possible if all the details are known - and so the pitfalls.