Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Acts::Cuda::Details Namespace Reference

Classes

struct  SpacePoint
 Helper struct describing a spacepoint on the device. More...
 
struct  DubletCounts
 Helper struct summarising the results of the dublet search. More...
 
struct  LinCircle
 Helper struct holding the linearly transformed coordinates of spacepoints. More...
 
struct  Triplet
 Structure used in the CUDA-based triplet finding. More...
 
class  DeviceArrayDeleter
 Class performing the deletion of a CUDA device memory array. More...
 
class  HostArrayDeleter
 Class performing the deletion of pinned host memory. More...
 

Functions

DubletCounts countDublets (std::size_t maxBlockSize, std::size_t nMiddleSP, const device_array< unsigned int > &middleBottomCounts, const device_array< unsigned int > &middleTopCounts)
 
void findDublets (std::size_t maxBlockSize, std::size_t nBottomSPs, const device_array< SpacePoint > &bottomSPs, std::size_t nMiddleSPs, const device_array< SpacePoint > &middleSPs, std::size_t nTopSPs, const device_array< SpacePoint > &topSPs, float deltaRMin, float deltaRMax, float cotThetaMax, float collisionRegionMin, float collisionRegionMax, device_array< unsigned int > &middleBottomCounts, device_array< std::size_t > &middleBottomDublets, device_array< unsigned int > &middleTopCounts, device_array< std::size_t > &middleTopDublets)
 
std::vector< std::vector
< Triplet > > 
findTriplets (const Info::Device &device, std::size_t maxBlockSize, const DubletCounts &dubletCounts, const SeedFilterConfig &seedConfig, const TripletFilterConfig &filterConfig, std::size_t nBottomSPs, const device_array< SpacePoint > &bottomSPs, std::size_t nMiddleSPs, const device_array< SpacePoint > &middleSPs, std::size_t nTopSPs, const device_array< SpacePoint > &topSPs, const device_array< unsigned int > &middleBottomCounts, const device_array< std::size_t > &middleBottomDublets, const device_array< unsigned int > &middleTopCounts, const device_array< std::size_t > &middleTopDublets, float maxScatteringAngle2, float sigmaScattering, float minHelixDiameter2, float pT2perRadius, float impactMax)
 

Detailed Description

Namespace holding some implementation detail types that should not be used directly in client code.

Function Documentation

DubletCounts Acts::Cuda::Details::countDublets ( std::size_t  maxBlockSize,
std::size_t  nMiddleSP,
const device_array< unsigned int > &  middleBottomCounts,
const device_array< unsigned int > &  middleTopCounts 
)

Calculate summary values for the dublet search

After the dublet search is done, we need to know some information about how many duplets were found exactly. As this information is necessary for the scheduing of the subsequent steps of the execution on the GPU. This function is used to collect this information

Parameters
maxBlockSizeThe maximum block size to use on the GPU
nMiddleSPThe number of middle spacepoints for which the dublet reconstruction was run
middleBottomCountsThe output from the Acts::Cuda::Details::findDublets(...) function with the same name
middleTopCountsThe output from the Acts::Cuda::Details::findDublets(...) function with the same name
Returns
An object holding all the summary statistics necessary for the subsequent steps of GPU execution

Referenced by Acts::Cuda::SeedFinder< external_spacepoint_t >::createSeedsForGroup().

+ Here is the caller graph for this function:

void Acts::Cuda::Details::findDublets ( std::size_t  maxBlockSize,
std::size_t  nBottomSPs,
const device_array< SpacePoint > &  bottomSPs,
std::size_t  nMiddleSPs,
const device_array< SpacePoint > &  middleSPs,
std::size_t  nTopSPs,
const device_array< SpacePoint > &  topSPs,
float  deltaRMin,
float  deltaRMax,
float  cotThetaMax,
float  collisionRegionMin,
float  collisionRegionMax,
device_array< unsigned int > &  middleBottomCounts,
device_array< std::size_t > &  middleBottomDublets,
device_array< unsigned int > &  middleTopCounts,
device_array< std::size_t > &  middleTopDublets 
)

Find all viable middle-bottom and middle-top dublets

This function is run as the first step in the seed finding, looking for viable middle-bottom and middle-top spacepoint pairs for the subsequent steps of the code.

Note that middleBottomCounts and middleTopCounts have type "unsigned int" instead of "std::size_t", because the GPU code needs to execute atomic operations on these arrays. And CUDA does not define such operations on std::size_t (i.e. unsigned long).

Parameters
[in]maxBlockSizeThe maximum block size to use on the GPU
[in]nBottomSPsThe number of bottom spacepoints in bottomSPs
[in]bottomSPsProperties of all of the bottom spacepoints
[in]nMiddleSPsThe number of middle spacepoints in middleSPs
[in]middleSPsProperties of all of the middle spacepoints
[in]nTopSPsThe number of top spacepoints in topSPs
[in]topSPsProperties of all of the top spacepoints
[in]deltaRMinConfiguration parameter from Acts::SeedFinderConfig
[in]deltaRMaxConfiguration parameter from Acts::SeedFinderConfig
[in]cotThetaMaxConfiguration parameter from Acts::SeedFinderConfig
[in]collisionRegionMinConfiguration parameter from Acts::SeedFinderConfig
[in]collisionRegionMaxConfiguration parameter from Acts::SeedFinderConfig
[out]middleBottomCounts1-D array of the number of middle-bottom dublets found for each middle spacepoint
[out]middleBottomDublets2-D matrix of size nMiddleSPs x nBottomSPs, holding the bottom spacepoint indices for the identified middle-bottom dublets
[out]middleTopCounts1-D array of the number of middle-top dublets found for each middle spacepoint
[out]middleTopDublets2-D matrix of size nMiddleSPs x nTopSPs, holding the top spacepoint indices for the identified middle-top dublets

Referenced by Acts::Cuda::SeedFinder< external_spacepoint_t >::createSeedsForGroup().

+ Here is the caller graph for this function:

std::vector<std::vector<Triplet> > Acts::Cuda::Details::findTriplets ( const Info::Device &  device,
std::size_t  maxBlockSize,
const DubletCounts &  dubletCounts,
const SeedFilterConfig &  seedConfig,
const TripletFilterConfig &  filterConfig,
std::size_t  nBottomSPs,
const device_array< SpacePoint > &  bottomSPs,
std::size_t  nMiddleSPs,
const device_array< SpacePoint > &  middleSPs,
std::size_t  nTopSPs,
const device_array< SpacePoint > &  topSPs,
const device_array< unsigned int > &  middleBottomCounts,
const device_array< std::size_t > &  middleBottomDublets,
const device_array< unsigned int > &  middleTopCounts,
const device_array< std::size_t > &  middleTopDublets,
float  maxScatteringAngle2,
float  sigmaScattering,
float  minHelixDiameter2,
float  pT2perRadius,
float  impactMax 
)

Find all viable triplets from the provided spacepoint dublets

This function is used to find a "loosely selected" set of seed candidates that still need to be filtered through Acts::SeedFilter::filterSeeds_1SpFixed before returning it to the user.

Parameters
[in]deviceProperties of the device that the code will be running on
[in]maxBlockSizeThe maximum block size to use on the GPU
[in]dubletCountsThe output object from Acts::Cuda::Details::countDublets
[in]seedConfigConfiguration parameters for the triplet finding/filtering
[in]filterConfigUser provided settings (code...) for the triplet filtering
[in]nBottomSPsThe number of bottom spacepoints in bottomSPs
[in]bottomSPsProperties of all of the bottom spacepoints
[in]nMiddleSPsThe number of middle spacepoints in middleSPs
[in]middleSPsProperties of all of the middle spacepoints
[in]nTopSPsThe number of top spacepoints in topSPs
[in]topSPsProperties of all of the top spacepoints
[in]middleBottomCounts1-D array of the number of middle-bottom dublets found for each middle spacepoint
[in]middleBottomDublets2-D matrix of size nMiddleSPs x nBottomSPs, holding the bottom spacepoint indices for the identified middle-bottom dublets
[in]middleTopCounts1-D array of the number of middle-top dublets found for each middle spacepoint
[in]middleTopDublets2-D matrix of size nMiddleSPs x nTopSPs, holding the top spacepoint indices for the identified middle-top dublets
[in]maxScatteringAngle2Configuration parameter from Acts::SeedFinderConfig
[in]sigmaScatteringConfiguration parameter from Acts::SeedFinderConfig
[in]minHelixDiameter2Configuration parameter from Acts::SeedFinderConfig
[in]pT2perRadiusConfiguration parameter from Acts::SeedFinderConfig
[in]impactMaxConfiguration parameter from Acts::SeedFinderConfig
Returns
A 2-D structure holding the parameters of the identified triplets for each middle spacepoint

Referenced by Acts::Cuda::SeedFinder< external_spacepoint_t >::createSeedsForGroup(), and Acts::SingleSeedVertexFinder< spacepoint_t >::findVertex().

+ Here is the caller graph for this function: