Using clang + libclc to compile OpenCL kernels to ptx23

Hi there,

I’m using clang to compile OpenCL kernels to PTX so that they can be run on an architectural simulator. The simulator is only compatible with ptx23 not ptx30 or ptx31.

I’m compiling the kernels as follows:
SRC=VectorAdd.cl
DEST=VectorAdd.ptx

clang -Dcl_clang_storage_class_specifiers -isystem libclc/generic/include -include clc/clc.h -target nvptx-unknown-nvcl -xcl $SRC -emit-llvm -S -o $DEST.ll

opt -S -O3 -loop-unroll $DEST.ll -o $DEST.opt.ll

llc -mcpu=sm_20 -mattr=+ptx30 $DEST.opt.ll -o $DEST"

The following code works to compile the kernel to ptx30, but when I attempt to change -mattr=+ptx30 to -mattr=+ptx23, I get the following warning:

‘+ptx23’ is not a recognized feature for this target (ignoring feature)
‘+ptx23’ is not a recognized feature for this target (ignoring feature)

Is there a way to around this warning so that ptx23 code is generated?

I am using the Ubuntu 14.04 aptitude packages for libclc-dev, libclc-ptx, clang, and llvm.
Ubuntu clang version 3.4-1ubuntu3 (tags/RELEASE_34/final) (based on LLVM 3.4)

Thanks again for your time and let me know if you need further information.

Regards,
Alex

Hi Alex,

I think this question might be more appropriate for the cfe-dev list, but to answer your question: looking at lib/Target/NVPTX/NVPTX.td and its history, it seems that the llvm NVPTX backend at present (llvm trunk) only supports ptx32 and up, and never supported anything below ptx30.

Jeroen

Hi Jeroen,
Correct me if I am mistaken (there is a good chance of that :slight_smile: ), but I think the issue here is that ptx32 and ptx23 appear to refer to completely different things. ptx32 is the 32-bit version of the PTX assembly, and ptx23 appears to refer to the version of the PTX assembly from a feature point of view (see http://llvm.org/devmtg/2011-11/Holewinski_PTXBackend.pdf slide 9/37).

I’m a bit perplexed by all of this given that it appears that clang used to be able to compile OpenCL to ptx23. For instance, I found some old slides by Justin Holewinski showing how one used to be able to compile to ptx23 circa 2011 (http://llvm.org/devmtg/2011-11/Holewinski_PTXBackend.pdf). Below is an example from slide 10/37:
clang -ccc-host-triple ptx32 -Xclang -target-feature -Xclang +ptx23 -Xclang -target-feature -Xclang +sm20 -I$LIBCLC/include/generic -I$LIBCLC/include/ptx -include clc/clc.h -Dcl_clang_storage_class_specifiers -O3 SOURCE.cl -S

I tried generating the code this way, but it doesn’t work for me. Is this syntax out of date? Are the slides referring to something else? If not, what would be the equivalent for llvm 3.4?

-Alex

Hi Jeroen,
Correct me if I am mistaken (there is a good chance of that :slight_smile: ), but I think the issue here is that ptx32 and ptx23 appear to refer to completely different things. ptx32 is the 32-bit version of the PTX assembly, and ptx23 appears to refer to the version of the PTX assembly from a feature point of view (see http://llvm.org/devmtg/2011-11/Holewinski_PTXBackend.pdf slide 9/37).

No in the current backed ptx32 is an attribute like ptx23, that’s what the table I referred you to shows you. The architectures are called nvptx32 and nvptx64 nowadays (not ptx32 and ptx64).

I’m a bit perplexed by all of this given that it appears that clang used to be able to compile OpenCL to ptx23. For instance, I found some old slides by Justin Holewinski showing how one used to be able to compile to ptx23 circa 2011 (http://llvm.org/devmtg/2011-11/Holewinski_PTXBackend.pdf). Below is an example from slide 10/37:
clang -ccc-host-triple ptx32 -Xclang -target-feature -Xclang +ptx23 -Xclang -target-feature -Xclang +sm20 -I$LIBCLC/include/generic -I$LIBCLC/include/ptx -include clc/clc.h -Dcl_clang_storage_class_specifiers -O3 SOURCE.cl -S

I tried generating the code this way, but it doesn’t work for me. Is this syntax out of date? Are the slides referring to something else? If not, what would be the equivalent for llvm 3.4?

The slides are about the backend (ptx) that was there around the time the slides were written, and that backend has been completely replaced by a new one (nvptx). I don’t think the nvptx backend (which I was referring to) ever supported ptx23 as an attribute. I don’t know about the old ptx backend; I never used that.

Jeroen

Hi Jeroen,

Thanks for answering my silly question. I didn’t realize that the backend had changed.

Regards,
Alex