bader added a subscriber: ABataev.
bader added inline comments.

================
Comment at: clang/docs/SYCLSupport.md:73
+the integration header is used (included) by the SYCL runtime implementation, 
so
+the header must be available before the host compilation starts.*
+
----------------
Naghasan wrote:
> > First, it must be possible to use any host compiler
> 
> I don't understand the link with the integration header. SYCL being 
> implementable as a library is a design principle of the specs but it doesn't 
> means the clang host compiler has to remain a vanilla C++ compiler.
> 
> > information provided in the integration header is used (included) by the 
> > SYCL runtime implementation, so the header must be available before the 
> > host compilation starts
> 
> Another approach to the integration header would be for clang as the host 
> compiler to generate the used type traits.
> > First, it must be possible to use any host compiler
> 
> I don't understand the link with the integration header. SYCL being 
> implementable as a library is a design principle of the specs but it doesn't 
> means the clang host compiler has to remain a vanilla C++ compiler.
> 
> > information provided in the integration header is used (included) by the 
> > SYCL runtime implementation, so the header must be available before the 
> > host compilation starts
> 
> Another approach to the integration header would be for clang as the host 
> compiler to generate the used type traits.

If there are no objections from @keryell, I'd like to prototype this approach 
for SYCL first to make sure there are no blocking issues.
This option seems to be worth to explore considering integration header 
approach disadvantages.


================
Comment at: clang/docs/SYCLSupport.md:123
+traverse all symbols accessible from kernel functions and add them to the
+"device part" of the code marking them with the new SYCL device attribute.
+
----------------
Naghasan wrote:
> OpenMP offload uses a similar approach isn't it? Might be worth to describe 
> how the 2 relates to each other and where they diverge. 
Do you mean the approach OpenMP compiler uses to outline single-source code 
parts to offload?
To be honest, I'm not sure... @ABataev, is there any description how OpenMP 
compiler outlines device code?
https://clang.llvm.org/docs/OpenMPSupport.html doesn't provide much details 
unfortunately.


================
Comment at: clang/docs/SYCLSupport.md:130
+`accessor` classes. Raw pointers map to kernel parameters one-to-one without
+additional transformations. `accessor` classes require additional processing as
+The "device" implementation of this class contains pointers to the device 
memory
----------------
Naghasan wrote:
> > Raw pointers map to kernel parameters one-to-one without additional 
> > transformations
> 
> Is this true ? I thought they should be passed as "pointer to global memory" 
> (under the OpenCL or CUDA model).
Good catch. I'll adjust the wording.


================
Comment at: clang/docs/SYCLSupport.md:132
+The "device" implementation of this class contains pointers to the device 
memory
+as a class member. OpenCL doesn't allow passing structures with pointer type
+members as kernel parameters. All memory objects shared between host and device
----------------
Naghasan wrote:
> Won't be better to refer to SPIR or SPIR-V kernels rather than OpenCL ?
> 
> Or even SPIR-like or SPIR-defacto to be even less normative.
Is it okay if I refer to OpenCL SPIR-V environment specification:
https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Env.html#_kernels?


================
Comment at: clang/docs/SYCLSupport.md:134
+members as kernel parameters. All memory objects shared between host and device
+must be passed to the kernel as raw pointers.
+
----------------
Naghasan wrote:
> This is a bit ambiguous and leaves the impression you can't objects pass by 
> value.
Agree. Removed.


================
Comment at: clang/docs/SYCLSupport.md:161
+// Generated kernel function (expressed in OpenCL-like pseudo-code)
+__kernel KernelName(global int* a) {
+  KernelType KernelFuncObj; // Actually kernel function object declaration
----------------
Naghasan wrote:
> This is missing  the template instantiation  that will eventually lead to 
> that lowering.
> 
> I would also suggest to split code block in 2 as to mark what is in header 
> and source file (SYCL code) and what is compiler generated (that pseudo 
> OpenCL).
> 
> Might be good to also mention the glue generated in the integration header as 
> this is what allows arguments to be set by the runtime (bridge between the 
> structure in C++ and the SPIR-like kernel arguments).
> This is missing  the template instantiation  that will eventually lead to 
> that lowering.
> I would also suggest to split code block in 2 as to mark what is in header 
> and source file (SYCL code) and what is compiler generated (that pseudo 
> OpenCL).

Do you suggest to sketch an SYCL kernel invocation API usage example with the 
complete implementation of these methods to demonstrate the full stack? I was 
trying to avoid runtime/header part of implementation in this section and 
describe only API compiler relies on or provides for the runtime library. I 
think these details were in this document before, but moved to 
https://github.com/intel/llvm/blob/sycl/sycl/doc/KernelParameterPassing.md 
referenced below. 

> Might be good to also mention the glue generated in the integration header as 
> this is what allows arguments to be set by the runtime (bridge between the 
> structure in C++ and the SPIR-like kernel arguments).

I've mentioned that, but I hope KernelParameterPassing.md document provides the 
rest of the details.
Is that okay?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D99190

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

Reply via email to