an opencl binding - zcl/panama

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Jan 27 00:20:41 UTC 2020


On 26/01/2020 04:52, Michael Zucchi wrote:
> public static <T extends Native> MemoryAddress toLongV(Allocator 
> frame, long[]array) {
>         MemoryAddress list = frame.alloca(8 * array.length);
>
>         for (int i=0;i<array.length;i++)
>             setLong(list, i, array[i]);
>
>         return list;
>     }
>
> vs
>
>     public static <T extends Native> MemoryAddress toLongV(Allocator 
> frame, long[]array) {
>         MemoryAddress list = frame.alloca(8 * array.length);
>
> MemoryAddress.copy(MemorySegment.ofArray(array).baseAddress(), list, 8 
> * array.length);
>
>         return list;
>     }
>
> Yeah sorry, that really isn't selling it for me!  Even if i didn't 
> have issues with the design it's more typing and harder to read. For 
> the one taking Native[] I need a loop anyway and i like a consistent 
> look to related functions that do consistent things. These functions 
> are for argument setup only and for small buffers, for potentially 
> large buffers i'm mostly using asByteBuffer() at the moment (mostly 
> because of api familiarity).

To clarify this point - just to make sure the message is clear - my 
observation about MemoryAddress::copy is not about code clarity - the 
performance model of the two versions is radically different. The former 
copies element one by one - the second makes a bulk transfer. If you do 
a benchmark there's just no comparison between the two versions.

Maurizio



More information about the panama-dev mailing list