3737
3838import mx
3939import mx_benchmark
40- import mx_graalpython
4140from mx_benchmark import StdOutRule , java_vm_registry , Vm , GuestVm , VmBenchmarkSuite , AveragingBenchmarkMixin
4241from mx_graalpython_bench_param import HARNESS_PATH
4342
6867
6968PYTHON_VM_REGISTRY_NAME = "Python"
7069CONFIGURATION_DEFAULT = "default"
70+ CONFIGURATION_DEFAULT_BC_DSL = "default-bc-dsl"
7171CONFIGURATION_INTERPRETER = "interpreter"
72+ CONFIGURATION_INTERPRETER_BC_DSL = "interpreter-bc-dsl"
7273CONFIGURATION_NATIVE_INTERPRETER = "native-interpreter"
74+ CONFIGURATION_NATIVE_INTERPRETER_BC_DSL = "native-interpreter-bc-dsl"
7375CONFIGURATION_DEFAULT_MULTI = "default-multi"
7476CONFIGURATION_INTERPRETER_MULTI = "interpreter-multi"
7577CONFIGURATION_NATIVE_INTERPRETER_MULTI = "native-interpreter-multi"
7678CONFIGURATION_DEFAULT_MULTI_TIER = "default-multi-tier"
7779CONFIGURATION_NATIVE = "native"
80+ CONFIGURATION_NATIVE_BC_DSL = "native-bc-dsl"
7881CONFIGURATION_NATIVE_MULTI = "native-multi"
7982CONFIGURATION_NATIVE_MULTI_TIER = "native-multi-tier"
8083CONFIGURATION_SANDBOXED = "sandboxed"
@@ -363,18 +366,19 @@ def _remove_vm_prefix(argument):
363366 else :
364367 return argument
365368
369+ @staticmethod
370+ def _remove_vm_prefix_for_all (arguments ):
371+ return [GraalPythonVmBase ._remove_vm_prefix (x ) for x in arguments ]
372+
366373 def run (self , cwd , args ):
367374 extra_polyglot_args = self .get_extra_polyglot_args ()
368375
369- if mx_graalpython .BYTECODE_DSL_INTERPRETER :
370- args .insert (0 , "--vm.Dpython.EnableBytecodeDSLInterpreter=true" )
371-
372376 host_vm = self .host_vm ()
373377 if hasattr (host_vm , 'run_lang' ): # this is a full GraalVM build
374378 return self .run_in_graalvm (cwd , args , extra_polyglot_args , host_vm )
375379
376380 # Otherwise, we're running from the source tree
377- args = [ self ._remove_vm_prefix ( x ) for x in args ]
381+ args = self ._remove_vm_prefix_for_all ( args )
378382 truffle_options = [
379383 # "-Dpolyglot.engine.CompilationExceptionsAreFatal=true"
380384 ]
@@ -394,7 +398,7 @@ def run(self, cwd, args):
394398
395399 vm_args = mx .get_runtime_jvm_args (dists , cp_suffix = self ._cp_suffix , cp_prefix = self ._cp_prefix )
396400 if isinstance (self ._extra_vm_args , list ):
397- vm_args += self ._extra_vm_args
401+ vm_args += self ._remove_vm_prefix_for_all ( self . _extra_vm_args )
398402 vm_args += [
399403 "-Dorg.graalvm.language.python.home=%s" % mx .dependency ("GRAALPYTHON_GRAALVM_SUPPORT" ).get_output (),
400404 self .launcher_class (),
@@ -408,7 +412,18 @@ def run(self, cwd, args):
408412 if not self ._env :
409413 self ._env = dict ()
410414 with environ (self ._env ):
411- return host_vm .run (cwd , cmd )
415+ return self ._validate_output (* host_vm .run (cwd , cmd ))
416+
417+ def is_bytecode_dsl_config (self ):
418+ return self ._extra_vm_args and '--vm.Dpython.EnableBytecodeDSLInterpreter=true' in self ._extra_vm_args
419+
420+ def _validate_output (self , code , out , dims ):
421+ is_bytecode_dsl_config = self .is_bytecode_dsl_config ()
422+ if code == 0 and not f"using bytecode DSL interpreter: { is_bytecode_dsl_config } " in out :
423+ print (f"ERROR: host VM config does not match what the the harness reported. "
424+ f"Expected Bytecode DSL interpreter = { is_bytecode_dsl_config } . Harness output:\n { out } " , file = sys .stderr )
425+ return 1 , out , dims
426+ return code , out , dims
412427
413428 def name (self ):
414429 return VM_NAME_GRAALPYTHON
@@ -435,13 +450,20 @@ def launcher_class(self):
435450 from mx_graalpython import GRAALPYTHON_MAIN_CLASS
436451 return GRAALPYTHON_MAIN_CLASS
437452
453+ def run (self , cwd , args ):
454+ if os .environ .get ('BYTECODE_DSL_INTERPRETER' , '' ).lower () == 'true' and not self .is_bytecode_dsl_config ():
455+ print ("Found environment variable BYTECODE_DSL_INTERPRETER, but the guest vm config is not Bytecode DSL config." )
456+ print ("Did you want to use, e.g., `mx benchmark ... -- --host-vm-config=default-bc-dsl`?" )
457+ sys .exit (1 )
458+ return super ().run (cwd , args )
459+
438460 def run_in_graalvm (self , cwd , args , extra_polyglot_args , host_vm ):
439461 with environ (self ._env or {}):
440462 cp = self .get_classpath ()
441463 if len (cp ) > 0 :
442464 extra_polyglot_args .append ("--vm.classpath=" + ":" .join (cp ))
443465 launcher_name = 'graalpy'
444- return host_vm .run_launcher (launcher_name , extra_polyglot_args + args , cwd )
466+ return self . _validate_output ( * host_vm .run_launcher (launcher_name , extra_polyglot_args + args , cwd ) )
445467
446468 def get_extra_polyglot_args (self ):
447469 return ["--experimental-options" , "-snapshot-startup" , "--python.MaxNativeMemory=%s" % (2 ** 34 )] + self ._extra_polyglot_args
@@ -1112,48 +1134,36 @@ def get_benchmark_suites(cls, benchmarks):
11121134
11131135
11141136def register_vms (suite , sandboxed_options ):
1115- # cpython
1137+ # Other Python VMs:
11161138 python_vm_registry .add_vm (CPythonVm (config_name = CONFIGURATION_DEFAULT ), suite )
1117-
1118- # pypy
11191139 python_vm_registry .add_vm (PyPyVm (config_name = CONFIGURATION_DEFAULT ), suite )
1120-
1121- # jython
11221140 python_vm_registry .add_vm (JythonVm (config_name = CONFIGURATION_DEFAULT ), suite )
11231141
1124- # graalpython
1125- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_DEFAULT ), suite , 10 )
1126- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_INTERPRETER , extra_polyglot_args = [
1127- '--experimental-options' , '--engine.Compilation=false'
1128- ]), suite , 10 )
1129- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_DEFAULT_MULTI , extra_polyglot_args = [
1130- '--experimental-options' , '-multi-context' ,
1131- ]), suite , 10 )
1132- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_INTERPRETER_MULTI , extra_polyglot_args = [
1133- '--experimental-options' , '-multi-context' , '--engine.Compilation=false'
1134- ]), suite , 10 )
1135- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_DEFAULT_MULTI_TIER , extra_polyglot_args = [
1136- '--experimental-options' , '--engine.MultiTier=true' ,
1137- ]), suite , 10 )
1138- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_SANDBOXED , extra_polyglot_args = sandboxed_options ), suite , 10 )
1139- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_NATIVE , extra_polyglot_args = [
1140- ]), suite , 10 )
1141- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_NATIVE_INTERPRETER , extra_polyglot_args = [
1142- '--experimental-options' , '--engine.Compilation=false' ]), suite , 10 )
1143- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_SANDBOXED_MULTI , extra_polyglot_args = [
1144- '--experimental-options' , '-multi-context' ] + sandboxed_options ), suite , 10 )
1145- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_NATIVE_MULTI , extra_polyglot_args = [
1146- '--experimental-options' , '-multi-context'
1147- ]), suite , 10 )
1148- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_NATIVE_INTERPRETER_MULTI , extra_polyglot_args = [
1149- '--experimental-options' , '-multi-context' , '--engine.Compilation=false'
1150- ]), suite , 10 )
1151- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_NATIVE_MULTI_TIER , extra_polyglot_args = [
1152- '--experimental-options' , '--engine.MultiTier=true'
1153- ]), suite , 10 )
1154- python_vm_registry .add_vm (GraalPythonVm (config_name = CONFIGURATION_PANAMA , extra_polyglot_args = [
1155- '--experimental-options' , '--python.UsePanama=true'
1156- ]), suite , 10 )
1142+ def add_graalpy_vm (name , * extra_polyglot_args , extra_vm_args = None ):
1143+ python_vm_registry .add_vm (GraalPythonVm (config_name = name , extra_vm_args = extra_vm_args , extra_polyglot_args = extra_polyglot_args ), suite , 10 )
1144+
1145+ def add_graalpy_bc_dsl_vm (name , * extra_polyglot_args ):
1146+ assert 'bc-dsl' in name
1147+ add_graalpy_vm (name , extra_vm_args = ['--vm.Dpython.EnableBytecodeDSLInterpreter=true' ], * extra_polyglot_args )
1148+
1149+ # GraalPy VMs:
1150+ add_graalpy_vm (CONFIGURATION_DEFAULT )
1151+ add_graalpy_bc_dsl_vm (CONFIGURATION_DEFAULT_BC_DSL )
1152+ add_graalpy_vm (CONFIGURATION_INTERPRETER , '--experimental-options' , '--engine.Compilation=false' )
1153+ add_graalpy_bc_dsl_vm (CONFIGURATION_INTERPRETER_BC_DSL , '--experimental-options' , '--engine.Compilation=false' )
1154+ add_graalpy_vm (CONFIGURATION_DEFAULT_MULTI , '--experimental-options' , '-multi-context' )
1155+ add_graalpy_vm (CONFIGURATION_INTERPRETER_MULTI , '--experimental-options' , '-multi-context' , '--engine.Compilation=false' )
1156+ add_graalpy_vm (CONFIGURATION_DEFAULT_MULTI_TIER , '--experimental-options' , '--engine.MultiTier=true' )
1157+ add_graalpy_vm (CONFIGURATION_SANDBOXED , * sandboxed_options )
1158+ add_graalpy_vm (CONFIGURATION_NATIVE )
1159+ add_graalpy_bc_dsl_vm (CONFIGURATION_NATIVE_BC_DSL )
1160+ add_graalpy_vm (CONFIGURATION_NATIVE_INTERPRETER , '--experimental-options' , '--engine.Compilation=false' )
1161+ add_graalpy_bc_dsl_vm (CONFIGURATION_NATIVE_INTERPRETER_BC_DSL , '--experimental-options' , '--engine.Compilation=false' )
1162+ add_graalpy_vm (CONFIGURATION_SANDBOXED_MULTI , '--experimental-options' , '-multi-context' , * sandboxed_options )
1163+ add_graalpy_vm (CONFIGURATION_NATIVE_MULTI , '--experimental-options' , '-multi-context' )
1164+ add_graalpy_vm (CONFIGURATION_NATIVE_INTERPRETER_MULTI , '--experimental-options' , '-multi-context' , '--engine.Compilation=false' )
1165+ add_graalpy_vm (CONFIGURATION_NATIVE_MULTI_TIER , '--experimental-options' , '--engine.MultiTier=true' )
1166+ add_graalpy_vm (CONFIGURATION_PANAMA , '--experimental-options' , '--python.UsePanama=true' )
11571167
11581168 # java embedding driver
11591169 python_java_embedding_vm_registry .add_vm (
0 commit comments