libmir / dcompute

DCompute: Native execution of D on GPUs and other Accelerators
Boost Software License 1.0
138 stars 27 forks source link

ndslice integration #14

Open 9il opened 7 years ago

9il commented 7 years ago

Can we use library @nothrow @nogc generic code in kernels. For example Slice!(Contiguous, [1], GlobalPointer!T) and ndslice topology?

thewilsonator commented 7 years ago

Definitely.

9il commented 7 years ago

code however will require that the module of origin be marked @compute(CompileFor.hostAndDevice) to work on both the host and device

Do you mean mir.ndslice should be marked?

thewilsonator commented 7 years ago

yes. I think it would be good to have a module (probably in dcompute) that imports all the relevant dcompute symbols from ldc.attributes and ldc.dcomputetypes if version = LDC_DCompute and otherwise sets up proxies for the symbols so you can still compile without a dcompute enabled ldc.

9il commented 7 years ago

yes. I think it would be good to have a module (probably in dcompute) that imports all the relevant dcompute symbols from ldc.attributes and ldc.dcomputetypes if version = LDC_DCompute and otherwise sets up proxies for the symbols so you can still compile without a dcompute enabled ldc.

@thewilsonator Why not to allow any generic code to be instantiated in a marked module?

thewilsonator commented 7 years ago

?? Not sure what you mean. Any modules, regardless of its @compute'ness, can have templates. The section you quoted would be for enabling building with a non-dcompute enabled compiler (e.g. old LDC and DMD/GDC)

9il commented 7 years ago

I mean that I do not understand why ndslice should be marked if it is completely generic. If we call a generic function from kernel function it can be automatically determinated that generic should be compiled for kernel

thewilsonator commented 7 years ago

Actually that might work. I'm not quite sure how template instances end up in a given module's symbol table, but if it does because it is referenced by that module, then the code would suggest that that would work.

We would still need @compute modules that reference them, though.