Skip to content

Commit

Permalink
[mch] **COMPLETE MCH (after merging madgraph5#368 plus minor changes)…
Browse files Browse the repository at this point in the history
… ** manually copy the updated testmisc.cc to all generated processes

for f in $(git ls-tree --name-only HEAD */SubProcesses/testmisc.cc); do \cp gg_tt.mad/SubProcesses/testmisc.cc $f; done
  • Loading branch information
valassi committed Feb 7, 2024
1 parent cc882e4 commit 064a900
Show file tree
Hide file tree
Showing 14 changed files with 840 additions and 0 deletions.
60 changes: 60 additions & 0 deletions epochX/cudacpp/ee_mumu.mad/SubProcesses/testmisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,64 @@ TEST( XTESTID( MG_EPOCH_PROCESS_ID ), testmisc )
}

//--------------------------------------------------------------------------

// Integer vector (mask) times FP vector
/*
// From https://github.com/madgraph5/madgraph4gpu/issues/765#issuecomment-1853672838
channelids_sv = CHANNEL_ACCESS::kernelAccess( pchannelIds ); // the 4 channels in the SIMD vector
bool_sv mask_sv = ( channelids_sv == 1 );
numerators_sv += mask_sv * cxabs2( amp_sv[0] );
if( pchannelIds != nullptr ) denominators_sv += cxabs2( amp_sv[0] );
*/
{
typedef bool_sv test_int_sv; // defined as scalar_or_vector of long int (FPTYPE=double) or int (FPTYPE=float)
test_int_sv channelids0_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
test_int_sv channelids1_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
fptype_sv absamp0_sv{}; // mimic cxabs2( amp_sv[0] )
fptype_sv absamp1_sv{}; // mimic cxabs2( amp_sv[0] )
#ifdef MGONGPU_CPPSIMD
for( int i = 0; i < neppV; i++ )
{
channelids0_sv[i] = i; // 0123
channelids1_sv[i] = i; // 1234
absamp0_sv[i] = 10. + i; // 10. 11. 12. 13.
absamp1_sv[i] = 11. + i; // 11. 12. 13. 14.
}
#else
channelids0_sv = 0;
channelids1_sv = 1;
absamp0_sv = 10.;
absamp1_sv = 11.;
#endif
bool_sv mask0_sv = ( channelids0_sv % 2 == 0 ); // even channels 0123 -> TFTF (1010)
bool_sv mask1_sv = ( channelids1_sv % 2 == 0 ); // even channels 1234 -> FTFT (0101)
constexpr fptype_sv fpZERO_sv{}; // 0000
//fptype_sv numerators0_sv = mask0_sv * absamp0_sv; // invalid operands to binary * ('__vector(4) long int' and '__vector(4) double')
fptype_sv numerators0_sv = fpternary( mask0_sv, absamp0_sv, fpZERO_sv ); // equivalent to "mask0_sv * absamp0_sv"
fptype_sv numerators1_sv = fpternary( mask1_sv, absamp1_sv, fpZERO_sv ); // equivalent to "mask1_sv * absamp1_sv"
#ifdef MGONGPU_CPPSIMD
//std::cout << "numerators0_sv: " << numerators0_sv << std::endl;
//std::cout << "numerators1_sv: " << numerators1_sv << std::endl;
for( int i = 0; i < neppV; i++ )
{
// Values of numerators0_sv: 10.*1 11.*0 12.*1 13.*0
if( channelids0_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators0_sv[i] == ( 10. + i ) );
else // odd channels
EXPECT_TRUE( numerators0_sv[i] == 0. );
// Values of numerators1_sv: 11.*0 12.*1 13.*0 14.*1
if( channelids1_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators1_sv[i] == ( 11. + i ) );
else // odd channels
EXPECT_TRUE( numerators1_sv[i] == 0. );
}
#else
// Values of numerators0_sv: 10.*1
EXPECT_TRUE( numerators0_sv == 10. );
// Values of numerators1_sv: 11.*0
EXPECT_TRUE( numerators1_sv == 0. );
#endif
}

//--------------------------------------------------------------------------
}
60 changes: 60 additions & 0 deletions epochX/cudacpp/ee_mumu.sa/SubProcesses/testmisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,64 @@ TEST( XTESTID( MG_EPOCH_PROCESS_ID ), testmisc )
}

//--------------------------------------------------------------------------

// Integer vector (mask) times FP vector
/*
// From https://github.com/madgraph5/madgraph4gpu/issues/765#issuecomment-1853672838
channelids_sv = CHANNEL_ACCESS::kernelAccess( pchannelIds ); // the 4 channels in the SIMD vector
bool_sv mask_sv = ( channelids_sv == 1 );
numerators_sv += mask_sv * cxabs2( amp_sv[0] );
if( pchannelIds != nullptr ) denominators_sv += cxabs2( amp_sv[0] );
*/
{
typedef bool_sv test_int_sv; // defined as scalar_or_vector of long int (FPTYPE=double) or int (FPTYPE=float)
test_int_sv channelids0_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
test_int_sv channelids1_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
fptype_sv absamp0_sv{}; // mimic cxabs2( amp_sv[0] )
fptype_sv absamp1_sv{}; // mimic cxabs2( amp_sv[0] )
#ifdef MGONGPU_CPPSIMD
for( int i = 0; i < neppV; i++ )
{
channelids0_sv[i] = i; // 0123
channelids1_sv[i] = i; // 1234
absamp0_sv[i] = 10. + i; // 10. 11. 12. 13.
absamp1_sv[i] = 11. + i; // 11. 12. 13. 14.
}
#else
channelids0_sv = 0;
channelids1_sv = 1;
absamp0_sv = 10.;
absamp1_sv = 11.;
#endif
bool_sv mask0_sv = ( channelids0_sv % 2 == 0 ); // even channels 0123 -> TFTF (1010)
bool_sv mask1_sv = ( channelids1_sv % 2 == 0 ); // even channels 1234 -> FTFT (0101)
constexpr fptype_sv fpZERO_sv{}; // 0000
//fptype_sv numerators0_sv = mask0_sv * absamp0_sv; // invalid operands to binary * ('__vector(4) long int' and '__vector(4) double')
fptype_sv numerators0_sv = fpternary( mask0_sv, absamp0_sv, fpZERO_sv ); // equivalent to "mask0_sv * absamp0_sv"
fptype_sv numerators1_sv = fpternary( mask1_sv, absamp1_sv, fpZERO_sv ); // equivalent to "mask1_sv * absamp1_sv"
#ifdef MGONGPU_CPPSIMD
//std::cout << "numerators0_sv: " << numerators0_sv << std::endl;
//std::cout << "numerators1_sv: " << numerators1_sv << std::endl;
for( int i = 0; i < neppV; i++ )
{
// Values of numerators0_sv: 10.*1 11.*0 12.*1 13.*0
if( channelids0_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators0_sv[i] == ( 10. + i ) );
else // odd channels
EXPECT_TRUE( numerators0_sv[i] == 0. );
// Values of numerators1_sv: 11.*0 12.*1 13.*0 14.*1
if( channelids1_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators1_sv[i] == ( 11. + i ) );
else // odd channels
EXPECT_TRUE( numerators1_sv[i] == 0. );
}
#else
// Values of numerators0_sv: 10.*1
EXPECT_TRUE( numerators0_sv == 10. );
// Values of numerators1_sv: 11.*0
EXPECT_TRUE( numerators1_sv == 0. );
#endif
}

//--------------------------------------------------------------------------
}
60 changes: 60 additions & 0 deletions epochX/cudacpp/gg_tt.sa/SubProcesses/testmisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,64 @@ TEST( XTESTID( MG_EPOCH_PROCESS_ID ), testmisc )
}

//--------------------------------------------------------------------------

// Integer vector (mask) times FP vector
/*
// From https://github.com/madgraph5/madgraph4gpu/issues/765#issuecomment-1853672838
channelids_sv = CHANNEL_ACCESS::kernelAccess( pchannelIds ); // the 4 channels in the SIMD vector
bool_sv mask_sv = ( channelids_sv == 1 );
numerators_sv += mask_sv * cxabs2( amp_sv[0] );
if( pchannelIds != nullptr ) denominators_sv += cxabs2( amp_sv[0] );
*/
{
typedef bool_sv test_int_sv; // defined as scalar_or_vector of long int (FPTYPE=double) or int (FPTYPE=float)
test_int_sv channelids0_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
test_int_sv channelids1_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
fptype_sv absamp0_sv{}; // mimic cxabs2( amp_sv[0] )
fptype_sv absamp1_sv{}; // mimic cxabs2( amp_sv[0] )
#ifdef MGONGPU_CPPSIMD
for( int i = 0; i < neppV; i++ )
{
channelids0_sv[i] = i; // 0123
channelids1_sv[i] = i; // 1234
absamp0_sv[i] = 10. + i; // 10. 11. 12. 13.
absamp1_sv[i] = 11. + i; // 11. 12. 13. 14.
}
#else
channelids0_sv = 0;
channelids1_sv = 1;
absamp0_sv = 10.;
absamp1_sv = 11.;
#endif
bool_sv mask0_sv = ( channelids0_sv % 2 == 0 ); // even channels 0123 -> TFTF (1010)
bool_sv mask1_sv = ( channelids1_sv % 2 == 0 ); // even channels 1234 -> FTFT (0101)
constexpr fptype_sv fpZERO_sv{}; // 0000
//fptype_sv numerators0_sv = mask0_sv * absamp0_sv; // invalid operands to binary * ('__vector(4) long int' and '__vector(4) double')
fptype_sv numerators0_sv = fpternary( mask0_sv, absamp0_sv, fpZERO_sv ); // equivalent to "mask0_sv * absamp0_sv"
fptype_sv numerators1_sv = fpternary( mask1_sv, absamp1_sv, fpZERO_sv ); // equivalent to "mask1_sv * absamp1_sv"
#ifdef MGONGPU_CPPSIMD
//std::cout << "numerators0_sv: " << numerators0_sv << std::endl;
//std::cout << "numerators1_sv: " << numerators1_sv << std::endl;
for( int i = 0; i < neppV; i++ )
{
// Values of numerators0_sv: 10.*1 11.*0 12.*1 13.*0
if( channelids0_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators0_sv[i] == ( 10. + i ) );
else // odd channels
EXPECT_TRUE( numerators0_sv[i] == 0. );
// Values of numerators1_sv: 11.*0 12.*1 13.*0 14.*1
if( channelids1_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators1_sv[i] == ( 11. + i ) );
else // odd channels
EXPECT_TRUE( numerators1_sv[i] == 0. );
}
#else
// Values of numerators0_sv: 10.*1
EXPECT_TRUE( numerators0_sv == 10. );
// Values of numerators1_sv: 11.*0
EXPECT_TRUE( numerators1_sv == 0. );
#endif
}

//--------------------------------------------------------------------------
}
60 changes: 60 additions & 0 deletions epochX/cudacpp/gg_tt01g.mad/SubProcesses/testmisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,64 @@ TEST( XTESTID( MG_EPOCH_PROCESS_ID ), testmisc )
}

//--------------------------------------------------------------------------

// Integer vector (mask) times FP vector
/*
// From https://github.com/madgraph5/madgraph4gpu/issues/765#issuecomment-1853672838
channelids_sv = CHANNEL_ACCESS::kernelAccess( pchannelIds ); // the 4 channels in the SIMD vector
bool_sv mask_sv = ( channelids_sv == 1 );
numerators_sv += mask_sv * cxabs2( amp_sv[0] );
if( pchannelIds != nullptr ) denominators_sv += cxabs2( amp_sv[0] );
*/
{
typedef bool_sv test_int_sv; // defined as scalar_or_vector of long int (FPTYPE=double) or int (FPTYPE=float)
test_int_sv channelids0_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
test_int_sv channelids1_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
fptype_sv absamp0_sv{}; // mimic cxabs2( amp_sv[0] )
fptype_sv absamp1_sv{}; // mimic cxabs2( amp_sv[0] )
#ifdef MGONGPU_CPPSIMD
for( int i = 0; i < neppV; i++ )
{
channelids0_sv[i] = i; // 0123
channelids1_sv[i] = i; // 1234
absamp0_sv[i] = 10. + i; // 10. 11. 12. 13.
absamp1_sv[i] = 11. + i; // 11. 12. 13. 14.
}
#else
channelids0_sv = 0;
channelids1_sv = 1;
absamp0_sv = 10.;
absamp1_sv = 11.;
#endif
bool_sv mask0_sv = ( channelids0_sv % 2 == 0 ); // even channels 0123 -> TFTF (1010)
bool_sv mask1_sv = ( channelids1_sv % 2 == 0 ); // even channels 1234 -> FTFT (0101)
constexpr fptype_sv fpZERO_sv{}; // 0000
//fptype_sv numerators0_sv = mask0_sv * absamp0_sv; // invalid operands to binary * ('__vector(4) long int' and '__vector(4) double')
fptype_sv numerators0_sv = fpternary( mask0_sv, absamp0_sv, fpZERO_sv ); // equivalent to "mask0_sv * absamp0_sv"
fptype_sv numerators1_sv = fpternary( mask1_sv, absamp1_sv, fpZERO_sv ); // equivalent to "mask1_sv * absamp1_sv"
#ifdef MGONGPU_CPPSIMD
//std::cout << "numerators0_sv: " << numerators0_sv << std::endl;
//std::cout << "numerators1_sv: " << numerators1_sv << std::endl;
for( int i = 0; i < neppV; i++ )
{
// Values of numerators0_sv: 10.*1 11.*0 12.*1 13.*0
if( channelids0_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators0_sv[i] == ( 10. + i ) );
else // odd channels
EXPECT_TRUE( numerators0_sv[i] == 0. );
// Values of numerators1_sv: 11.*0 12.*1 13.*0 14.*1
if( channelids1_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators1_sv[i] == ( 11. + i ) );
else // odd channels
EXPECT_TRUE( numerators1_sv[i] == 0. );
}
#else
// Values of numerators0_sv: 10.*1
EXPECT_TRUE( numerators0_sv == 10. );
// Values of numerators1_sv: 11.*0
EXPECT_TRUE( numerators1_sv == 0. );
#endif
}

//--------------------------------------------------------------------------
}
60 changes: 60 additions & 0 deletions epochX/cudacpp/gg_ttg.mad/SubProcesses/testmisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,64 @@ TEST( XTESTID( MG_EPOCH_PROCESS_ID ), testmisc )
}

//--------------------------------------------------------------------------

// Integer vector (mask) times FP vector
/*
// From https://github.com/madgraph5/madgraph4gpu/issues/765#issuecomment-1853672838
channelids_sv = CHANNEL_ACCESS::kernelAccess( pchannelIds ); // the 4 channels in the SIMD vector
bool_sv mask_sv = ( channelids_sv == 1 );
numerators_sv += mask_sv * cxabs2( amp_sv[0] );
if( pchannelIds != nullptr ) denominators_sv += cxabs2( amp_sv[0] );
*/
{
typedef bool_sv test_int_sv; // defined as scalar_or_vector of long int (FPTYPE=double) or int (FPTYPE=float)
test_int_sv channelids0_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
test_int_sv channelids1_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
fptype_sv absamp0_sv{}; // mimic cxabs2( amp_sv[0] )
fptype_sv absamp1_sv{}; // mimic cxabs2( amp_sv[0] )
#ifdef MGONGPU_CPPSIMD
for( int i = 0; i < neppV; i++ )
{
channelids0_sv[i] = i; // 0123
channelids1_sv[i] = i; // 1234
absamp0_sv[i] = 10. + i; // 10. 11. 12. 13.
absamp1_sv[i] = 11. + i; // 11. 12. 13. 14.
}
#else
channelids0_sv = 0;
channelids1_sv = 1;
absamp0_sv = 10.;
absamp1_sv = 11.;
#endif
bool_sv mask0_sv = ( channelids0_sv % 2 == 0 ); // even channels 0123 -> TFTF (1010)
bool_sv mask1_sv = ( channelids1_sv % 2 == 0 ); // even channels 1234 -> FTFT (0101)
constexpr fptype_sv fpZERO_sv{}; // 0000
//fptype_sv numerators0_sv = mask0_sv * absamp0_sv; // invalid operands to binary * ('__vector(4) long int' and '__vector(4) double')
fptype_sv numerators0_sv = fpternary( mask0_sv, absamp0_sv, fpZERO_sv ); // equivalent to "mask0_sv * absamp0_sv"
fptype_sv numerators1_sv = fpternary( mask1_sv, absamp1_sv, fpZERO_sv ); // equivalent to "mask1_sv * absamp1_sv"
#ifdef MGONGPU_CPPSIMD
//std::cout << "numerators0_sv: " << numerators0_sv << std::endl;
//std::cout << "numerators1_sv: " << numerators1_sv << std::endl;
for( int i = 0; i < neppV; i++ )
{
// Values of numerators0_sv: 10.*1 11.*0 12.*1 13.*0
if( channelids0_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators0_sv[i] == ( 10. + i ) );
else // odd channels
EXPECT_TRUE( numerators0_sv[i] == 0. );
// Values of numerators1_sv: 11.*0 12.*1 13.*0 14.*1
if( channelids1_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators1_sv[i] == ( 11. + i ) );
else // odd channels
EXPECT_TRUE( numerators1_sv[i] == 0. );
}
#else
// Values of numerators0_sv: 10.*1
EXPECT_TRUE( numerators0_sv == 10. );
// Values of numerators1_sv: 11.*0
EXPECT_TRUE( numerators1_sv == 0. );
#endif
}

//--------------------------------------------------------------------------
}
60 changes: 60 additions & 0 deletions epochX/cudacpp/gg_ttg.sa/SubProcesses/testmisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,64 @@ TEST( XTESTID( MG_EPOCH_PROCESS_ID ), testmisc )
}

//--------------------------------------------------------------------------

// Integer vector (mask) times FP vector
/*
// From https://github.com/madgraph5/madgraph4gpu/issues/765#issuecomment-1853672838
channelids_sv = CHANNEL_ACCESS::kernelAccess( pchannelIds ); // the 4 channels in the SIMD vector
bool_sv mask_sv = ( channelids_sv == 1 );
numerators_sv += mask_sv * cxabs2( amp_sv[0] );
if( pchannelIds != nullptr ) denominators_sv += cxabs2( amp_sv[0] );
*/
{
typedef bool_sv test_int_sv; // defined as scalar_or_vector of long int (FPTYPE=double) or int (FPTYPE=float)
test_int_sv channelids0_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
test_int_sv channelids1_sv{}; // mimic CHANNEL_ACCESS::kernelAccess( pchannelIds )
fptype_sv absamp0_sv{}; // mimic cxabs2( amp_sv[0] )
fptype_sv absamp1_sv{}; // mimic cxabs2( amp_sv[0] )
#ifdef MGONGPU_CPPSIMD
for( int i = 0; i < neppV; i++ )
{
channelids0_sv[i] = i; // 0123
channelids1_sv[i] = i; // 1234
absamp0_sv[i] = 10. + i; // 10. 11. 12. 13.
absamp1_sv[i] = 11. + i; // 11. 12. 13. 14.
}
#else
channelids0_sv = 0;
channelids1_sv = 1;
absamp0_sv = 10.;
absamp1_sv = 11.;
#endif
bool_sv mask0_sv = ( channelids0_sv % 2 == 0 ); // even channels 0123 -> TFTF (1010)
bool_sv mask1_sv = ( channelids1_sv % 2 == 0 ); // even channels 1234 -> FTFT (0101)
constexpr fptype_sv fpZERO_sv{}; // 0000
//fptype_sv numerators0_sv = mask0_sv * absamp0_sv; // invalid operands to binary * ('__vector(4) long int' and '__vector(4) double')
fptype_sv numerators0_sv = fpternary( mask0_sv, absamp0_sv, fpZERO_sv ); // equivalent to "mask0_sv * absamp0_sv"
fptype_sv numerators1_sv = fpternary( mask1_sv, absamp1_sv, fpZERO_sv ); // equivalent to "mask1_sv * absamp1_sv"
#ifdef MGONGPU_CPPSIMD
//std::cout << "numerators0_sv: " << numerators0_sv << std::endl;
//std::cout << "numerators1_sv: " << numerators1_sv << std::endl;
for( int i = 0; i < neppV; i++ )
{
// Values of numerators0_sv: 10.*1 11.*0 12.*1 13.*0
if( channelids0_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators0_sv[i] == ( 10. + i ) );
else // odd channels
EXPECT_TRUE( numerators0_sv[i] == 0. );
// Values of numerators1_sv: 11.*0 12.*1 13.*0 14.*1
if( channelids1_sv[i] % 2 == 0 ) // even channels
EXPECT_TRUE( numerators1_sv[i] == ( 11. + i ) );
else // odd channels
EXPECT_TRUE( numerators1_sv[i] == 0. );
}
#else
// Values of numerators0_sv: 10.*1
EXPECT_TRUE( numerators0_sv == 10. );
// Values of numerators1_sv: 11.*0
EXPECT_TRUE( numerators1_sv == 0. );
#endif
}

//--------------------------------------------------------------------------
}
Loading

0 comments on commit 064a900

Please # to comment.