Streaming¶
Module holding the class for streaming operations on the GPU.
-
class
pyqmri.streaming.
Stream
(fun, outp_shape, inp_shape, par_slices, overlap, nslice, queue, num_dev, reverse=False, lhs=None, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)¶ Basic streaming Class.
This Class is responsible for performing asynchroneous transfer and computation on the GPU for arbitrary large numpy data.
Parameters: fun (list of functions) – - This list contains all functions that should be executed on the
- GPU. The functions are executed in order from first to last element of the list.
- outp_shape (list of tuple):
- The shape of the output array. Slice dimension is assumed to be the same as number of parallel slices plus overlap.
- inp_shape (list of list of tuple):
- The shape of the input arrays. Slice dimension is assumed to be the same as number of parallel slices plus overlap.
- par_slices : int
- Number of slices computed in one transfer on the GPU.
- overlap : int
- Overlap of adjacent blocks
- nslice : int
- Total number of slices
- queue : list of PyOpenCL.Queue
- The OpenCL queues used for transfer and computation. 4 queues are used per device.
- num_dev : int
- Number of computation devices.
- reverse : bool, false
- Indicator of the streaming direction. If False, streaming will start at the first and end at the last slice. If True streaming will be performed vice versa
- lhs : list of bool, None
- Indicator for the norm calculation in the line search of TGV. lhs refers to left hand side. Needs to be passed if a norm should be computed.
- DTYPE : numpy.dype, numpy.complex64
- Complex data type.
-
fun
¶ This list contains all functions that should be executed on the GPU. The functions are executed in order from first to last element of the list.
Type: list of functions
-
num_dev
¶ Number of computation devices.
Type: int
-
slices
¶ Number of slices computed in one transfer on the GPU.
Type: int
-
overlap
¶ Overlap of adjacent blocks
Type: int
-
queue
¶ The OpenCL queues used for transfer and computation. 4 queues are used per device.
Type: list of PyOpenCL.Queue
-
reverse
¶ Indicator of the streaming direction. If False, streaming will start at the first and end at the last slice. If True streaming will be performed vice versa
Type: bool
-
NSlice
¶ Total number of slices
Type: int
-
num_fun
¶ Total number of functions to stream (length of fun)
Type: int
-
lhs
¶ Indicator for the norm calculation in the line search of TGV. lhs refers to left hand side.
Type: list of bool, None
-
at_end
¶ Specifies if the end of the data slice dimension is reached
Type: bool
-
inp
(list of list of list of PyOpenCL.Array)¶ For each function a list of devices and a list of inputs is generated. E.g. for one function which needs two inputs and one computation device the list would have dimensions [1][1][2]
-
outp
(list of list of PyOpenCL.Array)¶ For each function a list of devices with a single output is generated. E.g. for one function and one device the list would have dimension [1][1]
-
connectouttoin
(outpos, inpos)¶ Connect output to input of functions within the object.
This function can be used to connect the output of a function to the input of another one used in the same stream object.
Parameters: - outpos (int) – The position in the list of outputs which should be connected to an input
- (list of list of np.arrays (inpos) – The position in the list of inputs which should be connected with an output
-
eval
(outp, inp, par=None)¶ Evaluate all functions of the object.
Perform asynchroneous evaluation of the functions stored in fun.
Parameters: - (list of np.arrays) (outp) – Result of the computation for each function as numpy array
- (list of list of np.arrays) (inp) – For each function contains a list of numpy arrays used as input.
- (list of list of parameters) (par) – Optional list of parameters which should be passed to a function.
-
evalwithnorm
(outp, inp, par=None)¶ Evaluate all functions of the object and returns norms.
Perform asynchroneous evaluation of the functions stored in fun. Same as eval but also computes the norm relevant for the linesearch in the TGV algorithm.
Parameters: - outp (list of np.arrays) – Result of the computation for each function as numpy array
- (list of list of np.arrays) (inp) – For each function contains a list of numpy arrays used as input.
- par (list of list of parameters) – Optional list of parameters which should be passed to a function.
Returns: (lhs, rhs) The lhs and rhs for the linesearch used in the TGV algorithm.
Return type: tuple of floats