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
@@ -1109,3 +1131,64 @@ def get_benchmark_suites(cls, benchmarks):
11091131 assert isinstance (benchmarks , dict ), "benchmarks must be a dict: {suite: [path, {bench: args, ... }], ...}"
11101132 return [cls (suite_name , suite_info [0 ], suite_info [1 ])
11111133 for suite_name , suite_info in benchmarks .items ()]
1134+
1135+
1136+ def register_vms (suite , sandboxed_options ):
1137+ # Other Python VMs:
1138+ python_vm_registry .add_vm (CPythonVm (config_name = CONFIGURATION_DEFAULT ), suite )
1139+ python_vm_registry .add_vm (PyPyVm (config_name = CONFIGURATION_DEFAULT ), suite )
1140+ python_vm_registry .add_vm (JythonVm (config_name = CONFIGURATION_DEFAULT ), suite )
1141+
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' )
1167+
1168+ # java embedding driver
1169+ python_java_embedding_vm_registry .add_vm (
1170+ GraalPythonJavaDriverVm (config_name = CONFIGURATION_JAVA_EMBEDDING_MULTI ,
1171+ extra_polyglot_args = ['-multi-context' ]), suite , 10 )
1172+ python_java_embedding_vm_registry .add_vm (
1173+ GraalPythonJavaDriverVm (config_name = CONFIGURATION_JAVA_EMBEDDING_MULTI_SHARED ,
1174+ extra_polyglot_args = ['-multi-context' , '-shared-engine' ]), suite , 10 )
1175+ python_java_embedding_vm_registry .add_vm (
1176+ GraalPythonJavaDriverVm (config_name = CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI ,
1177+ extra_polyglot_args = ['-multi-context' , '-interpreter' ]), suite , 10 )
1178+ python_java_embedding_vm_registry .add_vm (
1179+ GraalPythonJavaDriverVm (config_name = CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI_SHARED ,
1180+ extra_polyglot_args = ['-multi-context' , '-interpreter' , '-shared-engine' ]), suite , 10 )
1181+
1182+
1183+ def register_suites ():
1184+ from mx_graalpython_bench_param import BENCHMARKS , JAVA_DRIVER_BENCHMARKS , WARMUP_BENCHMARKS , HEAP_BENCHMARKS
1185+
1186+ for py_bench_suite in PythonBenchmarkSuite .get_benchmark_suites (BENCHMARKS ):
1187+ mx_benchmark .add_bm_suite (py_bench_suite )
1188+ for py_bench_suite in PythonJavaEmbeddingBenchmarkSuite .get_benchmark_suites (JAVA_DRIVER_BENCHMARKS ):
1189+ mx_benchmark .add_bm_suite (py_bench_suite )
1190+ for py_bench_suite in PythonVmWarmupBenchmarkSuite .get_benchmark_suites (WARMUP_BENCHMARKS ):
1191+ mx_benchmark .add_bm_suite (py_bench_suite )
1192+ mx_benchmark .add_bm_suite (PythonJMHDistMxBenchmarkSuite ())
1193+ for py_bench_suite in PythonHeapBenchmarkSuite .get_benchmark_suites (HEAP_BENCHMARKS ):
1194+ mx_benchmark .add_bm_suite (py_bench_suite )
0 commit comments