This chapter describes the data structures that are critical to the high performance operation of the OpenCL/CUDA kernels.
Some data structures will have a pythonic browser-editor class, however, for highest possible performance, it might be necessary to edit them directly.
This description will also come handy when writing new OpenCL kernels
sampling_point_list is a list of coordinates of points/pixels/samples
handybeam.sampler_point_list.SamplerPointList class, and the
Again, the usage is best described by implemented code:
unsigned int sampling_point_pointer=3*sampling_point_idx; float pixel_x_coordinate=(float)sampling_point_list[sampling_point_pointer+0]; float pixel_y_coordinate=(float)sampling_point_list[sampling_point_pointer+1]; float pixel_z_coordinate=(float)sampling_point_list[sampling_point_pointer+2];
sampling_point_list=np.zeros((0, 3), dtype=np.float32),
p - the pressure field¶
field data structure is used for storing complex-valued pressure field.
refactor to make it clear that there can be several types of field information used:
- complex-valued field - pressure at given frequency
- real-valued field - real pressure in given time instant
- real-valued field - absolute field intensity, could be in decibels re 20uPa
At this time, it is most relevant to note that the data is a flat list of values. For each ‘pixel’ of the field (as in
sampling_point_list) there is one value.
Note that currently, the value complex (two single-precision floats) but it could be made to be real or log-scale, half precision, or double precision later on.
from C/OpenCL/CUDA side it looks like this:
unsigned int output_pointer_base = 2 * sampling_point_idx ; // address in the buffer to use // The factor of (uint)2 comes from the fact that I need to store both imaginary and real parts. cl_field[output_pointer_base+0] = pressure_re; // store real-part of the complex pressure value cl_field[output_pointer_base+1] = pressure_im; // store imaginary-part of the complex pressure value
from the python side, it looks like this:
sampling_point_count = sampling_point_list.shape field = np.zeros((sampling_point_count), dtype=np.complex64)
Back to Welcome
Licence (documentation): Creative Commons CC BY-NC-SA 4.0
Licence (source code): Apache 2.0
This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 737087.
This project has received funding from Ultrahaptics.