Open rongou opened 4 years ago
Could you point to a git repo of a sample nvcc project?
The one I'm most interested in speeding up is https://github.com/rapidsai/cudf, but it's a fairly complex project. The cpp/cuda code is in the cpp
directory.
Another example is https://github.com/NVIDIA/thrust.
https://github.com/rapidsai/cudf/tree/branch-0.17/cpp Just a cmake build.
cd cpp; mkdir -p build; cd build; cmake ../
# Run gg on the Makefile
I tried, it doesn't work though.
Could you give the errors here or link to a gist? I'll take a look. I'm porting gg now to AWSLinux2.
$ gg infer make -j$(nproc)
[ 1%] Built target stringify
[ 2%] Stringify headers for use in JIT compiled code
→ Loading the thunks... done (3 ms).
[ 2%] Built target stringify_run
Scanning dependencies of target cudf_base
[ 3%] Building CXX object CMakeFiles/cudf_base.dir/src/binaryop/jit/code/traits.cpp.o
[ 4%] Building CXX object CMakeFiles/cudf_base.dir/src/binaryop/jit/code/kernel.cpp.o
[ 5%] Building CXX object CMakeFiles/cudf_base.dir/src/aggregation/aggregation.cpp.o
[ 5%] Building CUDA object CMakeFiles/cudf_base.dir/src/aggregation/aggregation.cu.o
[ 5%] Building CXX object CMakeFiles/cudf_base.dir/src/binaryop/binaryop.cpp.o
[ 6%] Building CXX object CMakeFiles/cudf_base.dir/src/binaryop/jit/code/operation.cpp.o
[ 6%] Building CXX object CMakeFiles/cudf_base.dir/src/aggregation/result_cache.cpp.o
[ 6%] Building CUDA object CMakeFiles/cudf_base.dir/src/column/column.cu.o
[ 6%] Building CUDA object CMakeFiles/cudf_base.dir/src/binaryop/compiled/binary_ops.cu.o
[ 7%] Building CUDA object CMakeFiles/cudf_base.dir/src/column/column_device_view.cu.o
[ 7%] Building CUDA object CMakeFiles/cudf_base.dir/src/bitmask/null_mask.cu.o
[ 7%] Building CXX object CMakeFiles/cudf_base.dir/src/column/column_factories.cpp.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/binaryop/jit/code/kernel.cpp
├─ generating make dependencies file... done.
├─ preprocessed: TwpU37ygrqllBotAfN.NPcw9b6tljKEPDDLMiWMeA.2U000007ec
├─ compiled: TOT3YnlVj99B6bWjFOlI91.T62hgaOuCeh.eFLVY9aXA00000578
├─ assembled: TmJGubI9cI2n1x3O66L9AwOifFBr2Bzdr1VBSZgGOy.c0000055f
╰╼ output: CMakeFiles/cudf_base.dir/src/binaryop/jit/code/kernel.cpp.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/binaryop/jit/code/traits.cpp
├─ generating make dependencies file... done.
├─ preprocessed: TM6DrgN5CtesWmWUwVAJVskdF8DcNAqezPzrQAZVauL0000007ec
├─ compiled: TVWnXH4I9wsR9aJ2LiykcrP6QfwEpgtkKyDrn20jHeAk00000578
├─ assembled: TLUz7APJFvwOKIi8287_hkfGZwTrHYgq2PAfkrzhs6OI0000055f
╰╼ output: CMakeFiles/cudf_base.dir/src/binaryop/jit/code/traits.cpp.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/binaryop/jit/code/operation.cpp
├─ generating make dependencies file... done.
├─ preprocessed: TznUvOvwjQ6wnTgTVat7U.GJrOYiIeeZlZT7ezWeR.wM000007f8
├─ compiled: T3iZVI_.rYW1c7wJ9FCszVRrFtQWGh3BOsH4huQr6y0c00000578
├─ assembled: TK5STPFeV3Y09ej2iLi04Ksp7kNpLXfkebgFxe.rMYDs00000562
╰╼ output: CMakeFiles/cudf_base.dir/src/binaryop/jit/code/operation.cpp.o
[ 8%] Building CXX object CMakeFiles/cudf_base.dir/src/column/column_view.cpp.o
[ 8%] Building CUDA object CMakeFiles/cudf_base.dir/src/copying/concatenate.cu.o
[ 8%] Building CUDA object CMakeFiles/cudf_base.dir/src/copying/contiguous_split.cu.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/aggregation/aggregation.cpp
├─ generating make dependencies file... done.
├─ preprocessed: T8m5Fbjp7IdFtenBZStdb9hhEv3wtoV6jwow0TZEjliw00012445
├─ compiled: TzbzPpqppN84F_ZQBfN.UxSUxwGKbWE1VxpNUKd1Lwos00000578
├─ assembled: TI3A4G6Eac8jHH18jArZnZ0Ts_Yzo6rhLJXNWqgjYzhg0000055e
╰╼ output: CMakeFiles/cudf_base.dir/src/aggregation/aggregation.cpp.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/aggregation/result_cache.cpp
├─ generating make dependencies file... done.
├─ preprocessed: Tfn0cPGEmsybonU7CCUFC_khO3Is3CwLZnhhxRvpNX8s000157d5
├─ compiled: TsWWwwTqBuxRHSKflN8.ZJmGRz8pMa.vc1ybPxYsJgOc00000578
├─ assembled: TtcDeQcZ5pWAe4_sFARigvB5imfCkgcXXN.10nCfBepc0000055f
╰╼ output: CMakeFiles/cudf_base.dir/src/aggregation/result_cache.cpp.o
[ 9%] Building CXX object CMakeFiles/cudf_base.dir/src/copying/copy.cpp.o
[ 9%] Building CUDA object CMakeFiles/cudf_base.dir/src/copying/copy.cu.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/column/column_factories.cpp
├─ generating make dependencies file... done.
├─ preprocessed: T_0vkU.XO0Cnq3LfawvjQ13xM9k66v21wZFYxnyxNU4k0001a37b
├─ compiled: TKWGQ4e2GLrj0FGHmwRR9VO3v.IV6ExefN6iLjzvpres00000578
├─ assembled: TlQEZmFekdP8FMG2_4GvLqlcQmDFKEKx2mh0TrlmEZjQ0000055e
╰╼ output: CMakeFiles/cudf_base.dir/src/column/column_factories.cpp.o
[ 10%] Building CUDA object CMakeFiles/cudf_base.dir/src/copying/copy_range.cu.o
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/column/column_view.cpp
├─ generating make dependencies file... done.
├─ preprocessed: TK9pH5MbIpeEEEDAH22dSH5NG8S7yOkkNR96lrm5FC8I0001553f
├─ compiled: TjB.GFhiBDGfksdfXDV2iaQnH0EBs0LRK8QckWWRpux800000578
├─ assembled: TJvZnLAA9m8mwIDd9C0U7kl6yabo1__N6in.u39WZw9Q00000559
╰╼ output: CMakeFiles/cudf_base.dir/src/column/column_view.cpp.o
[ 10%] Building CUDA object CMakeFiles/cudf_base.dir/src/copying/gather.cu.o
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/binaryop/compiled/binary_ops.cu
├─ generating make dependencies file... done.
├─ preprocessed: TISA4G.yeWX9TFIEpq8DluSy3HnjCBJF9mo87gWWKK4Y0001fa57
╰╼ output: /tmp/tmpxft_00048e67_00000000-7_binary_ops.cpp1.ii
/tmp/tmpxft_00048e67_00000000-7_binary_ops.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048e67_00000000-7_binary_ops.cpp1.ii(2): error: this declaration has no storage class or type specifier
/tmp/tmpxft_00048e67_00000000-7_binary_ops.cpp1.ii(2): error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/binaryop/compiled/binary_ops.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:134: CMakeFiles/cudf_base.dir/src/binaryop/compiled/binary_ops.cu.o] Error 1
make[2]: *** Waiting for unfinished jobs....
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/column/column.cu
├─ generating make dependencies file... done.
├─ preprocessed: TMIb0TyUgcXjt7Jvb2lM.J4AGHJeLOGBi3Yx7_pJdecA000201ab
╰╼ output: /tmp/tmpxft_00048e7e_00000000-7_column.cpp1.ii
/tmp/tmpxft_00048e7e_00000000-7_column.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048e7e_00000000-7_column.cpp1.ii(2): error: this declaration has no storage class or type specifier
/tmp/tmpxft_00048e7e_00000000-7_column.cpp1.ii(2): error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/column/column.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:199: CMakeFiles/cudf_base.dir/src/column/column.cu.o] Error 1
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/column/column_device_view.cu
├─ generating make dependencies file... done.
├─ preprocessed: Tsc.5zPM4x8iQZNYNH0rkAg_EPAW9TABgLP0FLQFtOWo0001f709
╰╼ output: /tmp/tmpxft_00048e60_00000000-7_column_device_view.cpp1.ii
/tmp/tmpxft_00048e60_00000000-7_column_device_view.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048e60_00000000-7_column_device_view.cpp1.ii(2): warning: a user-provided literal suffix must begin with "_"
/tmp/tmpxft_00048e60_00000000-7_column_device_view.cpp1.ii(2): error: this declaration has no storage class or type specifier
/tmp/tmpxft_00048e60_00000000-7_column_device_view.cpp1.ii(2): error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/column/column_device_view.cu".
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/aggregation/aggregation.cu
├─ generating make dependencies file... done.
├─ preprocessed: TowGqrCEfpkqKw8xcoxeYJctohSxVjh2lefMgpC7KWdQ0001fb25
╰╼ output: /tmp/tmpxft_00048e69_00000000-7_aggregation.cpp1.ii
/tmp/tmpxft_00048e69_00000000-7_aggregation.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048e69_00000000-7_aggregation.cpp1.ii(2): error: this declaration has no storage class or type specifier
At end of source: error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/aggregation/aggregation.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:212: CMakeFiles/cudf_base.dir/src/column/column_device_view.cu.o] Error 1
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:95: CMakeFiles/cudf_base.dir/src/aggregation/aggregation.cu.o] Error 1
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/binaryop/binaryop.cpp
├─ generating make dependencies file... done.
├─ preprocessed: TUXOI9qVHbfEOB5H8ZBHRX5Hzsl8m.u1lpTJyfOLojeU00023e6f
├─ compiled: TNu6rADs67GSxHvd_ILHwVU4uN.11v.zuaRsDSYSuDXM00000578
├─ assembled: TwqAz0MwobvCvpzNhI.OWS9PbAiq57ZEXvYCHdghKkxk00000558
╰╼ output: CMakeFiles/cudf_base.dir/src/binaryop/binaryop.cpp.o
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/bitmask/null_mask.cu
├─ generating make dependencies file... done.
├─ preprocessed: TZP4SI0MW4GzgBlhEs0doF1KgKOteExBMSW2ziebhEAk000210f5
╰╼ output: /tmp/tmpxft_00048e8c_00000000-7_null_mask.cpp1.ii
/tmp/tmpxft_00048e8c_00000000-7_null_mask.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048e8c_00000000-7_null_mask.cpp1.ii(2): error: this declaration has no storage class or type specifier
At end of source: error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/bitmask/null_mask.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:186: CMakeFiles/cudf_base.dir/src/bitmask/null_mask.cu.o] Error 1
╭╼ generating model for g++
├╼ input: /home/rou/src/cudf/cpp/src/copying/copy.cpp
├─ generating make dependencies file... done.
├─ preprocessed: TuIZJlrrRxHrRs7O7kg4ujEhNf6k5GCu1Y61RJ6jL6600001a131
├─ compiled: TOIKBbrjSJofVggfPXjgt3syuxC6pLjcSRR2fbadhyjI00000578
├─ assembled: TDPo.5cV149qDRXa4Tm0bIckXI1vmWPHH0VOZ4VN9eqw00000553
╰╼ output: CMakeFiles/cudf_base.dir/src/copying/copy.cpp.o
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/copying/concatenate.cu
├─ generating make dependencies file... done.
├─ preprocessed: T.DfvRv3YmfevK8mMp6YXWqWsAK5P2yTjioZOEBM1i0Q00021a75
╰╼ output: /tmp/tmpxft_00048ecd_00000000-7_concatenate.cpp1.ii
/tmp/tmpxft_00048ecd_00000000-7_concatenate.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048ecd_00000000-7_concatenate.cpp1.ii(2): error: this declaration has no storage class or type specifier
/tmp/tmpxft_00048ecd_00000000-7_concatenate.cpp1.ii(2): error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/copying/concatenate.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:251: CMakeFiles/cudf_base.dir/src/copying/concatenate.cu.o] Error 1
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/copying/contiguous_split.cu
├─ generating make dependencies file... done.
├─ preprocessed: TpulysKgDw1JgvllYOka2.NRHdx1KBdmDve5z8JeZxNA00020e6c
╰╼ output: /tmp/tmpxft_00048ec8_00000000-7_contiguous_split.cpp1.ii
/tmp/tmpxft_00048ec8_00000000-7_contiguous_split.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048ec8_00000000-7_contiguous_split.cpp1.ii(2): error: this declaration has no storage class or type specifier
/tmp/tmpxft_00048ec8_00000000-7_contiguous_split.cpp1.ii(2): error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/copying/contiguous_split.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:264: CMakeFiles/cudf_base.dir/src/copying/contiguous_split.cu.o] Error 1
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/copying/copy_range.cu
├─ generating make dependencies file... done.
├─ preprocessed: TtxYL84qNIgEuGSEDSY7AZZZ1gIbUq0VXAo6BYRmmQAg000212bb
╰╼ output: /tmp/tmpxft_00048eef_00000000-7_copy_range.cpp1.ii
/tmp/tmpxft_00048eef_00000000-7_copy_range.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048eef_00000000-7_copy_range.cpp1.ii(2): error: this declaration has no storage class or type specifier
At end of source: error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/copying/copy_range.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:303: CMakeFiles/cudf_base.dir/src/copying/copy_range.cu.o] Error 1
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/copying/copy.cu
├─ generating make dependencies file... done.
├─ preprocessed: TBzSBD6l._PFvuCK41cM3Q7BmxXAeMXKquAdPVTUvahQ00021191
╰╼ output: /tmp/tmpxft_00048efd_00000000-7_copy.cpp1.ii
/tmp/tmpxft_00048efd_00000000-7_copy.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048efd_00000000-7_copy.cpp1.ii(2): error: this declaration has no storage class or type specifier
/tmp/tmpxft_00048efd_00000000-7_copy.cpp1.ii(2): error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/copying/copy.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:290: CMakeFiles/cudf_base.dir/src/copying/copy.cu.o] Error 1
╭╼ generating model for gcc
╰╼ output is stdout, executing gcc...
╭╼ generating model for gcc
├╼ input: /home/rou/src/cudf/cpp/src/copying/gather.cu
├─ generating make dependencies file... done.
├─ preprocessed: TAUKPtpRC1FaVrOHwiwa_iGjXY1eJbU1xmO9vdYh41iQ00021db1
╰╼ output: /tmp/tmpxft_00048f02_00000000-7_gather.cpp1.ii
/tmp/tmpxft_00048f02_00000000-7_gather.cpp1.ii(1): error: unrecognized preprocessing directive
/tmp/tmpxft_00048f02_00000000-7_gather.cpp1.ii(2): error: this declaration has no storage class or type specifier
At end of source: error: expected a ";"
3 errors detected in the compilation of "/home/rou/src/cudf/cpp/src/copying/gather.cu".
make[2]: *** [CMakeFiles/cudf_base.dir/build.make:316: CMakeFiles/cudf_base.dir/src/copying/gather.cu.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:469: CMakeFiles/cudf_base.dir/all] Error 2
make: *** [Makefile:149: all] Error 2
Not sure how much effort it would take to support compiling CUDA code. Writing a new model for
nvcc
and friends?