-
Notifications
You must be signed in to change notification settings - Fork 37
Description
Another issue introduced in #830 and being reviewed in #882.
This is a conceptual mistake (in the sense that it differs from the rest of the design of the code), and a (minor) performance penalty. It is also an unncessary increase of bloatware code.
CID_ACCESS::kernelAccessConst is now called once per diagram
https://github.com/valassi/madgraph4gpu/blob/8e312bc02d9d072615fcb1052b5db54754498517/epochX/cudacpp/gg_tt.mad/SubProcesses/P1_gg_ttx/CPPProcess.cc#L339
// Amplitude(s) for diagram number 1
FFV1_0<W_ACCESS, A_ACCESS, CD_ACCESS>( w_fp[3], w_fp[2], w_fp[4], COUPs[1], 1.0, &_fp[0] );
#ifdef MGONGPU_SUPPORTS_MULTICHANNEL
if( channelIds != 0 )
{
channelids_sv = CID_ACCESS::kernelAccessConst( channelIds );
...
// Amplitude(s) for diagram number 2
FFV1_0<W_ACCESS, A_ACCESS, CD_ACCESS>( w_fp[3], w_fp[4], w_fp[1], COUPs[1], 1.0, &_fp[0] );
#ifdef MGONGPU_SUPPORTS_MULTICHANNEL
if( channelIds != 0 )
{
channelids_sv = CID_ACCESS::kernelAccessConst( channelIds );
and so on
The channelid array is the same for all diagrams (which can be thousands!!!), so it can and should be retrieved only once. This is what is done for numerators and denominators
https://github.com/valassi/madgraph4gpu/blob/8e312bc02d9d072615fcb1052b5db54754498517/epochX/cudacpp/gg_tt.mad/SubProcesses/P1_gg_ttx/CPPProcess.cc#L320
#ifdef MGONGPU_SUPPORTS_MULTICHANNEL
// Numerators and denominators for the current event (CUDA) or SIMD event page (C++)
fptype_sv& numerators_sv = NUM_ACCESS::kernelAccess( numerators );
fptype_sv& denominators_sv = DEN_ACCESS::kernelAccess( denominators );
#endif
Note in addition that the if checks on channelID should be changed to use nullptr, as described in #892