@@ -30,15 +30,17 @@ def compile(self, *args, **opts):
3030 import multiprocessing
3131 if not self .options ['nb_core' ] or self .options ['nb_core' ] == 'None' :
3232 self .options ['nb_core' ] = multiprocessing .cpu_count ()
33- if args and args [0 ][0 ] == 'madevent' and hasattr (self , 'run_card' ):
34- import pathlib
35- import os
36- pjoin = os .path .join
37- if 'cwd' in opts :
38- path = pjoin (opts ['cwd' ], os .pardir , os .pardir , 'Source' , 'make_opts' )
39- common_run_interface .CommonRunCmd .update_make_opts_full (
40- path ,
41- {'FPTYPE' : self .run_card ['floating_type' ]})
33+
34+ if 'cwd' in opts and os .path .basename (opts ['cwd' ]) == 'Source' :
35+ path = pjoin (opts ['cwd' ], 'make_opts' )
36+ avx_type = self .run_card ['avx_type' ] if self .run_card ['avx_type' ] != 'auto' else ''
37+ common_run_interface .CommonRunCmd .update_make_opts_full (path ,
38+ {'FPTYPE' : self .run_card ['floating_type' ],
39+ 'AVX' : avx_type })
40+ misc .sprint ('FPTYPE checked' )
41+
42+
43+ if args and args [0 ][0 ] == 'madevent' and hasattr (self , 'run_card' ):
4244 cudacpp_backend = self .run_card ['cudacpp_backend' ].upper () # the default value is defined in banner.py
4345 logger .info ("Building madevent in madevent_interface.py with '%s' matrix elements" % cudacpp_backend )
4446 if cudacpp_backend == 'FORTRAN' :
@@ -53,7 +55,26 @@ def compile(self, *args, **opts):
5355 else :
5456 return misc .compile (nb_core = self .options ['nb_core' ], * args , ** opts )
5557
58+
59+ # Phase-Space Optimization ------------------------------------------------------------------------------------
60+ template_on = \
61+ """#*********************************************************************
62+ # SIMD/GPU Parametrization
63+ #*********************************************************************
64+ %(floating_type)s = floating_type ! single precision(f), double precision (d), mixed (m) [double for amplitude, single for color]
65+ %(avx_type)s = avx_type ! for SIMD, technology to use for the vectorization
66+ %(cudacpp_backend)s = cudacpp_backend ! Fortran/CPP/CUDA switch mode to use
67+ """
68+
69+ template_off = ''
70+
71+ plugin_block = banner_mod .RunBlock ('simd' , template_on = template_on , template_off = template_off )
72+
73+
5674class CPPRunCard (banner_mod .RunCardLO ):
75+
76+ blocks = banner_mod .RunCardLO .blocks + [plugin_block ]
77+
5778 def reset_simd (self , old_value , new_value , name ):
5879 if not hasattr (self , 'path' ):
5980 logger .warning ('WARNING! CPPRunCard instance has no attribute path' )
@@ -67,12 +88,17 @@ def reset_simd(self, old_value, new_value, name):
6788
6889 def reset_makeopts (self , old_value , new_value , name ):
6990
70- misc .sprint ("PASS IN RESET MAKEOPTS" , old_value , new_value , name )
7191 if not hasattr (self , 'path' ):
7292 raise Exception
7393
94+ avx_value = self ['avx_type' ] if self ['avx_type' ] != 'auto' else ''
95+
7496 if name == 'floating_type' :
75- common_run_interface .CommonRunCmd .update_make_opts_full ({'FPTYPE' : new_value })
97+ common_run_interface .CommonRunCmd .update_make_opts_full ({'FPTYPE' : new_value , 'AVX' : avx_value })
98+ elif name == 'avx_type' :
99+ if new_value == 'Auto' :
100+ new_value = ''
101+ common_run_interface .CommonRunCmd .update_make_opts_full ({'FPTYPE' : self ['floating_type' ], 'AVX' : new_value })
76102 else :
77103 raise Exception
78104
@@ -84,9 +110,22 @@ def plugin_input(self, finput):
84110
85111 def default_setup (self ):
86112 super ().default_setup ()
87- self .add_param ('cudacpp_backend' , 'CPP' , include = False , hidden = False )
88113 self .add_param ('floating_type' , 'd' , include = False , hidden = False ,
89- fct_mod = (self .reset_makeopts ,(),{}))
114+ fct_mod = (self .reset_makeopts ,(),{}),
115+ allowed = ['m' ,'d' ,'f' ])
116+ self .add_param ('avx_type' , 'auto' , include = False , hidden = False ,
117+ fct_mod = (self .reset_makeopts ,(),{}),
118+ allowed = ['auto' , 'none' , 'sse4' , 'avx2' ,'512y' ,'512z' ])
119+ self .add_param ('cudacpp_backend' , 'CPP' , include = False , hidden = False ,
120+ allowed = ['Fortan' , 'CPP' , 'CUDA' ])
121+ self ['vector_size' ] = 16 # already setup in default class (just change value)
122+ self ['aloha_flag' ] = '--fast-math'
123+ self ['matrix_flag' ] = '-O3'
124+ self .display_block .append ('simd' )
125+ self .display_block .append ('psoptim' )
126+
127+
128+ > >> >> >> 746 f16476 (better formatting for the card from the start and adding the possiblitity to choose avx )
90129
91130 def write_one_include_file (self , output_dir , incname , output_file = None ):
92131 """write one include file at the time"""
@@ -104,10 +143,13 @@ def check_validity(self):
104143 self ['hel_recycling' ] = False
105144
106145class GPURunCard (CPPRunCard ):
146+
107147 def default_setup (self ):
108- super (CPPRunCard , self ).default_setup ()
109- self .add_param ('cudacpp_backend' , 'CUDA' , include = False , hidden = False )
110- self .add_param ('floating_type' , 'd' , include = False , hidden = False )
148+
149+ super ().default_setup ()
150+ # change default value:
151+ self ['cudacpp_backend' ] = 'CUDA'
152+ self ['vector_size' ] = 16384 # already setup in default class (just change value)
111153
112154
113155MEINTERFACE = CPPMEInterface
0 commit comments