We finally obtained nearly optimal kernels for 2D slices on GPU, and added a followup for running the kernel on subsequent slices.
However, a very common pattern would be to have fixed observations (model grid, gridded observations, buoy data etc) and take the SF at many points in time. For these we have no optimal fast path. These would benefit (on both CPU and GPU) form a fast path that does the point loop once, and is vectorized along the trailing (time) dimension.
It may even be the case that even when the points are not constant, some gains can be had by leveraging massive vector ops on the gpu, and then doing the binning slice by slice (especially with our O(1) binning kernels
so baiscally you have some loop in theory that is like for i in 1:N_i, for j in 1:N_j < do all times> etc
we shoudl also suport things like <x,y,z,t> with a structuer fucntion in only <x,y> or only <x,y,z> etc.
We finally obtained nearly optimal kernels for 2D slices on GPU, and added a followup for running the kernel on subsequent slices.
However, a very common pattern would be to have fixed observations (model grid, gridded observations, buoy data etc) and take the SF at many points in time. For these we have no optimal fast path. These would benefit (on both CPU and GPU) form a fast path that does the point loop once, and is vectorized along the trailing (time) dimension.
It may even be the case that even when the points are not constant, some gains can be had by leveraging massive vector ops on the gpu, and then doing the binning slice by slice (especially with our O(1) binning kernels
so baiscally you have some loop in theory that is like for i in 1:N_i, for j in 1:N_j < do all times> etc
we shoudl also suport things like <x,y,z,t> with a structuer fucntion in only <x,y> or only <x,y,z> etc.