jlebar added a comment.

Thanks for the suggestions, Richard.  I'm not sure any of them will work, but I 
don't defend this patch as anything other than a hack, so if we can come up 
with something that works for what we need to accomplish and is cleaner, that's 
great.

In http://reviews.llvm.org/D18328#379824, @rsmith wrote:

> I would much prefer for us to, say, provide a <complex> header that wraps the 
> system one and does something like
>
>   // <complex>
>   #pragma clang cuda_implicit_host_device {
>   #include_next <complex>
>   #pragma clang cuda_implicit_host_device }


We considered this and ruled it out for two reasons:

1. We'd have to exclude operator>> and operator<<, presumably with additional 
pragmas, and
2. We'd have to exclude everything included by <complex>.

Of course with enough pragmas anything is possible, but at this point it seemed 
to become substantially more complicated than this (admittedly awful) hack.

> or to provide an explicit list of the functions that we're promoting to 
> `__host__` `__device__`


The problem with that is that libstdc++ uses many helper functions, which we'd 
also have to enumerate.  Baking those kinds of implementation details into 
clang seemed worse than this hack.

> or to require people to use a CUDA-compatible standard library if they want 
> CUDA-compatible standard library behaviour.


I think asking people to use a custom standard library is a nonstarter for e.g. 
OSS tensorflow, and I suspect it would be a considerable amount of work to 
accomplish in google3.  (Not to suggest that two wrongs make a right, but we 
already have many similar hacks in place to match nvcc's behavior with standard 
library functions -- the main difference here is that we're spelling the hack 
in clang's C++ as opposed to in __clang_cuda_runtime_wrapper.h.)


http://reviews.llvm.org/D18328



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

Reply via email to