You can absolutely pass multi-dimensional arrays to kernels. When you pass in a buffer, it is just a bunch of data that you can use however you want inside the kernel. What you can not do is pass in an array of cl_mem objects (buffers or images).
I think I differ here. CL_MEM can hold data… that is uni-dimensional. In CUDA, I could technically create an “int **a” on the device… So, “a” points to an array of pointers each of which point to an array of integers… I cant replicate that with OpenCL.
But arrays like int “a” can be replicated once we know if it is row_major or column_major.
With regards to “true” heterogeneous computation, the OpenCL spec allows you to execute kernels on any supported device in your system
Not really. The spec does NOT spell out the Platform layer. Each vendor comes out with his own version of clFindDevices and so on…
Therez no device manager layer outlined by the spec at all. Thus true heterogeneous computing is still out of reach.