hliao marked 3 inline comments as done.
hliao added inline comments.

================
Comment at: clang/lib/Headers/__clang_cuda_runtime_wrapper.h:82-94
 #undef __CUDACC__
 #if CUDA_VERSION < 9000
 #define __CUDABE__
 #else
+#define __CUDACC__
 #define __CUDA_LIBDEVICE__
 #endif
----------------
hliao wrote:
> tra wrote:
> > hliao wrote:
> > > tra wrote:
> > > > Please add comments on why __CUDACC__ is needed for driver_types.h 
> > > > here? AFAICT, driver_types.h does not have any conditionals that depend 
> > > > on __CUDACC__. What happens if it's not defined.
> > > > 
> > > > 
> > > `driver_types.h` includes `host_defines.h`, where macros 
> > > `__device_builtin_surface_type__` and `__device_builtin_texture_type__` 
> > > are conditional defined if `__CUDACC__`.
> > > 
> > > The following is extracted from `cuda/crt/host_defines.h`
> > > 
> > > ```
> > > #if !defined(__CUDACC__)
> > > #define __device_builtin__
> > > #define __device_builtin_texture_type__
> > > #define __device_builtin_surface_type__
> > > #define __cudart_builtin__
> > > #else /* defined(__CUDACC__) */
> > > #define __device_builtin__ \
> > >         __location__(device_builtin)
> > > #define __device_builtin_texture_type__ \
> > >         __location__(device_builtin_texture_type)
> > > #define __device_builtin_surface_type__ \
> > >         __location__(device_builtin_surface_type)
> > > #define __cudart_builtin__ \
> > >         __location__(cudart_builtin)
> > > #endif /* !defined(__CUDACC__) */
> > > ```
> > My concern is -- what else is going to get defined? There are ~60 
> > references to __CUDACC__ in CUDA-10.1 headers. The wrappers are fragile 
> > enough that there's a good chance something may break. It does not help 
> > that my CUDA build bot decided to die just after we switched to 
> > work-from-home, so there will be no early warning if something goes wrong.
> > 
> > If all we need are the macros above, we may just define them. 
> Let me check all CUDA SDK through their dockers. Redefining sounds good me as 
> wll.
I checked headers from 7.0 to 10.0, `__device_builtin_texture_type__` and 
`__builtin_builtin_surface_type__` are only defined with that attributes if 
`__CUDACC__` is defined. As we only pre-define `__CUDA_ARCH__` in clang but 
flip `__CUDACC__` on and off in the wrapper headers to selectively reuse CUDA's 
headers. I would hear your suggestion on that.
BTW, macros like `__device__` are defined regardless of `__CUDACC__` from 7.0 
to 10.0 as `__location(device)`. `__location__` is defined if `__CUDACC__` is 
present. But, different from `__device__`, `__device_builtin_texture_type__` is 
defined only `__CUDACC__` is defined.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76365/new/

https://reviews.llvm.org/D76365



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to