Sequence configuration
Huge overhaul to allow sequence configurations to be specified in a simple manner.
Now, it is possible to just edit the ConfiguredSequence.cuh file to determine what will be executed in the sequence.
-
Handlershave been reworked. Upon writing a new CUDA algorithm, a line likeALGORITHM(function_name, exposed_type_name)is expected.function_namerefers to the name of the__global__CUDA function, and theexposed_type_namemust be a unique identifier to refer to that algorithm. Several identifiers can be specified for the same function, allowing reutilization of an algorithm (ie. Prefix sum). -
StreamVisitorimplements a visitor pattern for all algorithms. (This will allow us to move to usingstd::variantwhenever nvcc supports C++17). Each algorithm must have aStreamVisitor::visitoverride, where the arguments are set, the scheduler is prepared, and the algorithm itself is invoked. Specializations toStreamVisitor::visitlive in the foldersequence_visitors, with a subfolder for each subdetector, for ease of configuration. - The tediously long
StreamSequencehas effectively been replaced by the above visitor pattern, who visits thesequencetuple. - Geometry constants have been moved into the
Constantsobject. This may have to be revisited in the future if geometry turns out to change too often. - A new singleton
RuntimeOptionsencapsulates all runtime options. It is passed to thevisitfunctions,const. - A new singleton
HostBuffersholds all pinned host buffers. It is also passed to thevisitfunctions,non const. - Monte Carlo check is performed out of the loop, so it doesn't affect timing anymore.
Edited by Daniel Hugo Campora Perez