Yuanfeng Peng via llvm-dev
2017-Jun-14 06:59 UTC
[llvm-dev] [CUDA] Lost debug information when compiling CUDA code
Hi, I needed to debug some CUDA code in my project; however, although I used -g when compiling the source code, no source-level information is available in cuda-gdb or cuda-memcheck. Specifically, below is what I did: 1) For a CUDA file a.cu, generate IR files: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c a.cu; 2) Instrument the device code a-cuda-nvptx64-nvidia-cuda-sm_35.bc (generated in the previous step), inserting a call to a hook function before each device memory access. The hook function is defined in another file, b.cu. Let's say we get a file named intrumented-a-device.bc after this step; 3) Generate IR files for b.cu: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c b.cu; 4) Link instrumented-a.device.bc with the device code generated for b.cu: llvm-link intrumented-a-device.bc b-cuda-nvptx64-nvidia-cuda-sm_35.bc -o ab-device.bc; 5) Use llc, ptxas & fatbinary on ab-device.bc to get ab-device.ptx, ab-device.o & ab-device.fatbin; 6) Call clang again the generate the host object file ab.o, with ab-device.o & ab-device.fatbin embedded; 7) Link against libraries and get the final binary: a.out. The binary a.out fails with an exception I when run it; but when I try to debug it with cuda-gdb or cuda-memcheck, no source information was available. Why? Thanks! Yuanfeng Peng -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170614/1bfdd28e/attachment.html>
Madhur Amilkanthwar via llvm-dev
2017-Jun-14 08:33 UTC
[llvm-dev] [CUDA] Lost debug information when compiling CUDA code
Is source level information present in generated IR files? On Wed, Jun 14, 2017 at 12:29 PM, Yuanfeng Peng via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi, > > I needed to debug some CUDA code in my project; however, although I used > -g when compiling the source code, no source-level information is available > in cuda-gdb or cuda-memcheck. > > Specifically, below is what I did: > > 1) For a CUDA file a.cu, generate IR files: clang++ -g -emit-llvm > --cuda-gpu-arch=sm_35 -c a.cu; > 2) Instrument the device code a-cuda-nvptx64-nvidia-cuda-sm_35.bc > (generated in the previous step), inserting a call to a hook function > before each device memory access. The hook function is defined in another > file, b.cu. Let's say we get a file named intrumented-a-device.bc after > this step; > 3) Generate IR files for b.cu: clang++ -g -emit-llvm > --cuda-gpu-arch=sm_35 -c b.cu; > 4) Link instrumented-a.device.bc with the device code generated for b.cu: > llvm-link intrumented-a-device.bc b-cuda-nvptx64-nvidia-cuda-sm_35.bc -o > ab-device.bc; > 5) Use llc, ptxas & fatbinary on ab-device.bc to get ab-device.ptx, > ab-device.o & ab-device.fatbin; > 6) Call clang again the generate the host object file ab.o, with > ab-device.o & ab-device.fatbin embedded; > 7) Link against libraries and get the final binary: a.out. > > The binary a.out fails with an exception I when run it; but when I try to > debug it with cuda-gdb or cuda-memcheck, no source information was > available. Why? > > Thanks! > Yuanfeng Peng > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-- *Disclaimer: Views, concerns, thoughts, questions, ideas expressed in this mail are of my own and my employer has no take in it. * Thank You. Madhur D. Amilkanthwar -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170614/c871ad58/attachment-0001.html>
Yuanfeng Peng via llvm-dev
2017-Jun-14 11:05 UTC
[llvm-dev] [CUDA] Lost debug information when compiling CUDA code
Yes, I've inspected all the intermediate IR files and source level information is present in them. ------------------ Original ------------------ From: "Madhur Amilkanthwar";<madhur13490 at gmail.com>; Send time: Wednesday, Jun 14, 2017 5:03 PM To: "Yuanfeng Peng"<yuanfengp at foxmail.com>; Cc: "via llvm-dev"<llvm-dev at lists.llvm.org>; Subject: Re: [llvm-dev] [CUDA] Lost debug information when compiling CUDA code Is source level information present in generated IR files? On Wed, Jun 14, 2017 at 12:29 PM, Yuanfeng Peng via llvm-dev <llvm-dev at lists.llvm.org> wrote: Hi, I needed to debug some CUDA code in my project; however, although I used -g when compiling the source code, no source-level information is available in cuda-gdb or cuda-memcheck. Specifically, below is what I did: 1) For a CUDA file a.cu, generate IR files: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c a.cu; 2) Instrument the device code a-cuda-nvptx64-nvidia-cuda-sm_35.bc (generated in the previous step), inserting a call to a hook function before each device memory access. The hook function is defined in another file, b.cu. Let's say we get a file named intrumented-a-device.bc after this step; 3) Generate IR files for b.cu: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c b.cu; 4) Link instrumented-a.device.bc with the device code generated for b.cu: llvm-link intrumented-a-device.bc b-cuda-nvptx64-nvidia-cuda-sm_35.bc -o ab-device.bc; 5) Use llc, ptxas & fatbinary on ab-device.bc to get ab-device.ptx, ab-device.o & ab-device.fatbin; 6) Call clang again the generate the host object file ab.o, with ab-device.o & ab-device.fatbin embedded; 7) Link against libraries and get the final binary: a.out. The binary a.out fails with an exception I when run it; but when I try to debug it with cuda-gdb or cuda-memcheck, no source information was available. Why? Thanks! Yuanfeng Peng _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev -- Disclaimer: Views, concerns, thoughts, questions, ideas expressed in this mail are of my own and my employer has no take in it. Thank You. Madhur D. Amilkanthwar -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170614/a23dd311/attachment.html>
Tom Stellard via llvm-dev
2017-Jun-14 13:06 UTC
[llvm-dev] [CUDA] Lost debug information when compiling CUDA code
On 06/14/2017 02:59 AM, Yuanfeng Peng via llvm-dev wrote:> Hi, > > I needed to debug some CUDA code in my project; however, although I used -g when compiling the source code, no source-level information is available in cuda-gdb or cuda-memcheck. >The NVPTX backend in LLVM does not support DWARF emission. -Tom> Specifically, below is what I did: > > 1) For a CUDA file a.cu, generate IR files: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c a.cu; > 2) Instrument the device code a-cuda-nvptx64-nvidia-cuda-sm_35.bc (generated in the previous step), inserting a call to a hook function before each device memory access. The hook function is defined in another file, b.cu. Let's say we get a file named intrumented-a-device.bc after this step; > 3) Generate IR files for b.cu: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c b.cu; > 4) Link instrumented-a.device.bc with the device code generated for b.cu: llvm-link intrumented-a-device.bc b-cuda-nvptx64-nvidia-cuda-sm_35.bc -o ab-device.bc; > 5) Use llc, ptxas & fatbinary on ab-device.bc to get ab-device.ptx, ab-device.o & ab-device.fatbin; > 6) Call clang again the generate the host object file ab.o, with ab-device.o & ab-device.fatbin embedded; > 7) Link against libraries and get the final binary: a.out. > > The binary a.out fails with an exception I when run it; but when I try to debug it with cuda-gdb or cuda-memcheck, no source information was available. Why? > > Thanks! > Yuanfeng Peng > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >
Yuanfeng Peng via llvm-dev
2017-Jun-14 15:33 UTC
[llvm-dev] [CUDA] Lost debug information when compiling CUDA code
Hi Tom, Thanks for the response! I wonder whether there's any other way that I can get the source level information when using cuda-gdb to debug a binary compiled by LLVM? Or is there any way to feed the IR files to NVCC and get a binary with the debug info I need? Thanks! Yuanfeng ------------------ Original ------------------ From: "Tom Stellard";<tstellar at redhat.com>; Send time: Wednesday, Jun 14, 2017 9:06 PM To: "Yuanfeng Peng"<yuanfengp at foxmail.com>; "via llvm-dev"<llvm-dev at lists.llvm.org>; Subject: Re: [llvm-dev] [CUDA] Lost debug information when compiling CUDA code On 06/14/2017 02:59 AM, Yuanfeng Peng via llvm-dev wrote:> Hi, > > I needed to debug some CUDA code in my project; however, although I used -g when compiling the source code, no source-level information is available in cuda-gdb or cuda-memcheck. >The NVPTX backend in LLVM does not support DWARF emission. -Tom> Specifically, below is what I did: > > 1) For a CUDA file a.cu, generate IR files: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c a.cu; > 2) Instrument the device code a-cuda-nvptx64-nvidia-cuda-sm_35.bc (generated in the previous step), inserting a call to a hook function before each device memory access. The hook function is defined in another file, b.cu. Let's say we get a file named intrumented-a-device.bc after this step; > 3) Generate IR files for b.cu: clang++ -g -emit-llvm --cuda-gpu-arch=sm_35 -c b.cu; > 4) Link instrumented-a.device.bc with the device code generated for b.cu: llvm-link intrumented-a-device.bc b-cuda-nvptx64-nvidia-cuda-sm_35.bc -o ab-device.bc; > 5) Use llc, ptxas & fatbinary on ab-device.bc to get ab-device.ptx, ab-device.o & ab-device.fatbin; > 6) Call clang again the generate the host object file ab.o, with ab-device.o & ab-device.fatbin embedded; > 7) Link against libraries and get the final binary: a.out. > > The binary a.out fails with an exception I when run it; but when I try to debug it with cuda-gdb or cuda-memcheck, no source information was available. Why? > > Thanks! > Yuanfeng Peng > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170614/68407855/attachment.html>