37
37
38
38
import mx
39
39
import mx_benchmark
40
- import mx_graalpython
41
40
from mx_benchmark import StdOutRule , java_vm_registry , Vm , GuestVm , VmBenchmarkSuite , AveragingBenchmarkMixin
42
41
from mx_graalpython_bench_param import HARNESS_PATH
43
42
68
67
69
68
PYTHON_VM_REGISTRY_NAME = "Python"
70
69
CONFIGURATION_DEFAULT = "default"
70
+ CONFIGURATION_DEFAULT_BC_DSL = "default-bc-dsl"
71
71
CONFIGURATION_INTERPRETER = "interpreter"
72
+ CONFIGURATION_INTERPRETER_BC_DSL = "interpreter-bc-dsl"
72
73
CONFIGURATION_NATIVE_INTERPRETER = "native-interpreter"
74
+ CONFIGURATION_NATIVE_INTERPRETER_BC_DSL = "native-interpreter-bc-dsl"
73
75
CONFIGURATION_DEFAULT_MULTI = "default-multi"
74
76
CONFIGURATION_INTERPRETER_MULTI = "interpreter-multi"
75
77
CONFIGURATION_NATIVE_INTERPRETER_MULTI = "native-interpreter-multi"
76
78
CONFIGURATION_DEFAULT_MULTI_TIER = "default-multi-tier"
77
79
CONFIGURATION_NATIVE = "native"
80
+ CONFIGURATION_NATIVE_BC_DSL = "native-bc-dsl"
78
81
CONFIGURATION_NATIVE_MULTI = "native-multi"
79
82
CONFIGURATION_NATIVE_MULTI_TIER = "native-multi-tier"
80
83
CONFIGURATION_SANDBOXED = "sandboxed"
@@ -363,18 +366,19 @@ def _remove_vm_prefix(argument):
363
366
else :
364
367
return argument
365
368
369
+ @staticmethod
370
+ def _remove_vm_prefix_for_all (arguments ):
371
+ return [GraalPythonVmBase ._remove_vm_prefix (x ) for x in arguments ]
372
+
366
373
def run (self , cwd , args ):
367
374
extra_polyglot_args = self .get_extra_polyglot_args ()
368
375
369
- if mx_graalpython .BYTECODE_DSL_INTERPRETER :
370
- args .insert (0 , "--vm.Dpython.EnableBytecodeDSLInterpreter=true" )
371
-
372
376
host_vm = self .host_vm ()
373
377
if hasattr (host_vm , 'run_lang' ): # this is a full GraalVM build
374
378
return self .run_in_graalvm (cwd , args , extra_polyglot_args , host_vm )
375
379
376
380
# 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 )
378
382
truffle_options = [
379
383
# "-Dpolyglot.engine.CompilationExceptionsAreFatal=true"
380
384
]
@@ -394,7 +398,7 @@ def run(self, cwd, args):
394
398
395
399
vm_args = mx .get_runtime_jvm_args (dists , cp_suffix = self ._cp_suffix , cp_prefix = self ._cp_prefix )
396
400
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 )
398
402
vm_args += [
399
403
"-Dorg.graalvm.language.python.home=%s" % mx .dependency ("GRAALPYTHON_GRAALVM_SUPPORT" ).get_output (),
400
404
self .launcher_class (),
@@ -408,7 +412,18 @@ def run(self, cwd, args):
408
412
if not self ._env :
409
413
self ._env = dict ()
410
414
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
412
427
413
428
def name (self ):
414
429
return VM_NAME_GRAALPYTHON
@@ -435,13 +450,20 @@ def launcher_class(self):
435
450
from mx_graalpython import GRAALPYTHON_MAIN_CLASS
436
451
return GRAALPYTHON_MAIN_CLASS
437
452
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
+
438
460
def run_in_graalvm (self , cwd , args , extra_polyglot_args , host_vm ):
439
461
with environ (self ._env or {}):
440
462
cp = self .get_classpath ()
441
463
if len (cp ) > 0 :
442
464
extra_polyglot_args .append ("--vm.classpath=" + ":" .join (cp ))
443
465
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 ) )
445
467
446
468
def get_extra_polyglot_args (self ):
447
469
return ["--experimental-options" , "-snapshot-startup" , "--python.MaxNativeMemory=%s" % (2 ** 34 )] + self ._extra_polyglot_args
@@ -1109,3 +1131,64 @@ def get_benchmark_suites(cls, benchmarks):
1109
1131
assert isinstance (benchmarks , dict ), "benchmarks must be a dict: {suite: [path, {bench: args, ... }], ...}"
1110
1132
return [cls (suite_name , suite_info [0 ], suite_info [1 ])
1111
1133
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