Hi everybody, I am trying to produce ptx code starting from OpenCL C. I am experiencing a problem concerning pointer parameters. Here follows an example: kernel void function(__global float* parameter1) {} NVIDIA NVCC Compiler: .entry function( .param .u32 *.ptr* .global .align 4 function_param_0 ) { ret; } CLANG + LLVM PTX backend // (skipping builtin functions definitions) .entry function (.param .b32 __param_1) // @function { // BB#0: // %entry exit; } As you can see the code generated by the LLVM backend lacks the kernel parameter attribute .ptr, required to identify pointers [1]. I can understand that the address space attribute (.global) is not defined since there is no agreement on how to represent them in the IR. The command I use to compile is: clang kernels/parameters.cl -include ocldef.h -include builtin_functions_ptx.cl -ccc-host-triple ptx32 -S -o - where ocldef.h contains the definitions of OpenCL vector data types, builtin_functions_ptx.cl is the file provided by Justin in a previous message [2]. Is this a bug? Or the .ptr attribute is just not supported yet ? Thank you Alberto ------------------------- [1] PTX: Parallel Thread Execution ISA Version 2.3, page 30 [2] http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-October/017699.html -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111024/b175bbfe/attachment.html>
Justin Holewinski
2011-Oct-24 12:28 UTC
[LLVMdev] Function pointer parameters in PTX backend
On Mon, Oct 24, 2011 at 6:24 AM, Alberto Magni <alberto.magni86 at gmail.com>wrote:> Hi everybody, > > I am trying to produce ptx code starting from OpenCL C. > I am experiencing a problem concerning pointer parameters. > Here follows an example: > > kernel void function(__global float* parameter1) {} > > NVIDIA NVCC Compiler: > > .entry function( > .param .u32 *.ptr* .global .align 4 function_param_0 > ) > { > ret; > } > > CLANG + LLVM PTX backend > > // (skipping builtin functions definitions) > > .entry function (.param .b32 __param_1) // @function > { > > // BB#0: // %entry > exit; > } > > As you can see the code generated by the LLVM backend lacks the kernel > parameter attribute > .ptr, required to identify pointers [1]. I can understand that the address > space attribute (.global) > is not defined since there is no agreement on how to represent them in the > IR. >This is actually a PTX version issue. The .ptr annotations were introduced in PTX in version 2.2, and the back-end defaults to version 2.0. The CUDA driver API does not really care about this, but the NVidia OpenCL run-time requires this pointer attribute. Try adding -Xclang -target-feature -Xclang +ptx23 to your command line.> > The command I use to compile is: > clang kernels/parameters.cl -include ocldef.h -include > builtin_functions_ptx.cl -ccc-host-triple ptx32 -S -o - > > where ocldef.h contains the definitions of OpenCL vector data types, > builtin_functions_ptx.cl is the file provided by Justin in a previous > message [2]. >You may want to look into libclc: http://www.pcc.me.uk/~peter/libclc/ It provides more functionality than the file I posted eariler, and will most likely be the "official" OpenCL run-time library for the PTX back-end.> > Is this a bug? Or the .ptr attribute is just not supported yet ? > > Thank you > > Alberto > > ------------------------- > > [1] PTX: Parallel Thread Execution ISA Version 2.3, page 30 > [2] http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-October/017699.html > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- Thanks, Justin Holewinski -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111024/64e6ba4d/attachment.html>