Skip to content

Commit f96a8e4

Browse files
committed
Mx benchmarks: add host VM configs for bytecode DSL interpreter
1 parent 940ccd3 commit f96a8e4

File tree

3 files changed

+64
-46
lines changed

3 files changed

+64
-46
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,7 @@ public void initialize() {
16271627
}
16281628
releaseGil();
16291629
}
1630+
PythonOptions.checkBytecodeDSLEnv();
16301631
}
16311632

16321633
public void resetPerfCounter() {
@@ -1648,6 +1649,7 @@ public void patch(Env newEnv) {
16481649
} finally {
16491650
releaseGil();
16501651
}
1652+
PythonOptions.checkBytecodeDSLEnv();
16511653
}
16521654

16531655
private void importSiteIfForced() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonOptions.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ private PythonOptions() {
9393
// no instances
9494
}
9595

96+
public static void checkBytecodeDSLEnv() {
97+
if (!ENABLE_BYTECODE_DSL_INTERPRETER && "true".equalsIgnoreCase(System.getenv("BYTECODE_DSL_INTERPRETER"))) {
98+
System.err.println("WARNING: found environment variable BYTECODE_DSL_INTERPRETER=true, but the python.EnableBytecodeDSLInterpreter Java property was not set.");
99+
}
100+
}
101+
96102
@Option(category = OptionCategory.EXPERT, help = "Set the home of Python. Equivalent of GRAAL_PYTHONHOME env variable. " +
97103
"Determines default values for the CoreHome, StdLibHome, SysBasePrefix, SysPrefix.", usageSyntax = "<path>", stability = OptionStability.STABLE) //
98104
public static final OptionKey<String> PythonHome = new OptionKey<>("");

mx.graalpython/mx_graalpython_benchmark.py

Lines changed: 56 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737

3838
import mx
3939
import mx_benchmark
40-
import mx_graalpython
4140
from mx_benchmark import StdOutRule, java_vm_registry, Vm, GuestVm, VmBenchmarkSuite, AveragingBenchmarkMixin
4241
from mx_graalpython_bench_param import HARNESS_PATH
4342

@@ -68,13 +67,17 @@
6867

6968
PYTHON_VM_REGISTRY_NAME = "Python"
7069
CONFIGURATION_DEFAULT = "default"
70+
CONFIGURATION_DEFAULT_BC_DSL = "default-bc-dsl"
7171
CONFIGURATION_INTERPRETER = "interpreter"
72+
CONFIGURATION_INTERPRETER_BC_DSL = "interpreter-bc-dsl"
7273
CONFIGURATION_NATIVE_INTERPRETER = "native-interpreter"
74+
CONFIGURATION_NATIVE_INTERPRETER_BC_DSL = "native-interpreter-bc-dsl"
7375
CONFIGURATION_DEFAULT_MULTI = "default-multi"
7476
CONFIGURATION_INTERPRETER_MULTI = "interpreter-multi"
7577
CONFIGURATION_NATIVE_INTERPRETER_MULTI = "native-interpreter-multi"
7678
CONFIGURATION_DEFAULT_MULTI_TIER = "default-multi-tier"
7779
CONFIGURATION_NATIVE = "native"
80+
CONFIGURATION_NATIVE_BC_DSL = "native-bc-dsl"
7881
CONFIGURATION_NATIVE_MULTI = "native-multi"
7982
CONFIGURATION_NATIVE_MULTI_TIER = "native-multi-tier"
8083
CONFIGURATION_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

11141136
def 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

Comments
 (0)