use of org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime in project graal by oracle.
the class StatisticsListener method printStatistics.
private void printStatistics() {
GraalTruffleRuntime rt = runtime;
long endTime = System.nanoTime();
rt.log("Truffle runtime statistics:");
printStatistic(rt, "Compilations", compilations);
printStatistic(rt, " Success", success);
printStatistic(rt, " Failed", failures);
printStatistic(rt, " Interrupted", compilations - (success + failures));
printStatistic(rt, "Invalidated", invalidations);
printStatistic(rt, "Queues", queues);
printStatistic(rt, "Dequeues", dequeues);
printStatistic(rt, "Splits", splits);
printStatistic(rt, "Compilation Accuracy", 1.0 - invalidations / (double) compilations);
printStatistic(rt, "Queue Accuracy", 1.0 - dequeues / (double) queues);
printStatistic(rt, "Compilation Utilization", compilationTime.getSum() / (double) (endTime - firstCompilation));
printStatistic(rt, "Remaining Compilation Queue", rt.getCompilationQueueSize());
printStatistic(rt, "Times defered until compilation", deferCompilations);
printStatisticTime(rt, "Time to queue", timeToQueue);
printStatisticTime(rt, "Time to compilation", timeToCompilation);
printStatisticTime(rt, "Compilation time", compilationTime);
printStatisticTime(rt, " Truffle Tier", compilationTimeTruffleTier);
printStatisticTime(rt, " Graal Tier", compilationTimeGraalTier);
printStatisticTime(rt, " Code Installation", compilationTimeCodeInstallation);
printStatistic(rt, "Truffle node count", nodeCount);
printStatistic(rt, " Trivial", nodeCountTrivial);
printStatistic(rt, " Non Trivial", nodeCountNonTrivial);
printStatistic(rt, " Monomorphic", nodeCountMonomorphic);
printStatistic(rt, " Polymorphic", nodeCountPolymorphic);
printStatistic(rt, " Megamorphic", nodeCountMegamorphic);
printStatistic(rt, "Truffle call count", callCount);
printStatistic(rt, " Indirect", callCountIndirect);
printStatistic(rt, " Direct", callCountDirect);
printStatistic(rt, " Dispatched", callCountDirectDispatched);
printStatistic(rt, " Inlined", callCountDirectInlined);
printStatistic(rt, " ----------");
printStatistic(rt, " Cloned", callCountDirectCloned);
printStatistic(rt, " Not Cloned", callCountDirectNotCloned);
printStatistic(rt, "Truffle loops", loopCount);
printStatistic(rt, "Graal node count");
printStatistic(rt, " After Truffle Tier", truffleTierNodeCount);
printStatistic(rt, " After Graal Tier", graalTierNodeCount);
printStatistic(rt, "Graal compilation result");
printStatistic(rt, " Code size", compilationResultCodeSize);
printStatistic(rt, " Total frame size", compilationResultTotalFrameSize);
printStatistic(rt, " Exception handlers", compilationResultExceptionHandlers);
printStatistic(rt, " Infopoints", compilationResultInfopoints);
compilationResultInfopointStatistics.printStatistics(rt, Function.identity());
printStatistic(rt, " Marks", compilationResultMarks);
printStatistic(rt, " Data references", compilationResultDataPatches);
if (TruffleCompilerOptions.getValue(TruffleCompilationStatisticDetails)) {
printStatistic(rt, "Truffle nodes");
nodeStatistics.printStatistics(rt, Class::getSimpleName);
printStatistic(rt, "Graal nodes after Truffle tier");
truffleTierNodeStatistics.printStatistics(rt, Function.identity());
printStatistic(rt, "Graal nodes after Graal tier");
graalTierNodeStatistics.printStatistics(rt, Function.identity());
}
}
use of org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime in project graal by oracle.
the class TransferToInterpreterTest method test.
@Test
public void test() {
RootNode rootNode = new TestRootNode();
GraalTruffleRuntime runtime = GraalTruffleRuntime.getRuntime();
OptimizedCallTarget target = (OptimizedCallTarget) runtime.createCallTarget(rootNode);
target.call(0);
Assert.assertFalse(target.isValid());
OptionValues options = TruffleCompilerOptions.getOptions();
DebugContext debug = DebugContext.create(options, DebugHandlersFactory.LOADER);
final OptimizedCallTarget compilable = target;
TruffleCompilerImpl compiler = (TruffleCompilerImpl) runtime.newTruffleCompiler();
CompilationIdentifier compilationId = compiler.getCompilationIdentifier(compilable);
TruffleInliningPlan inliningPlan = new TruffleInlining(compilable, new DefaultInliningPolicy());
compiler.compileAST(debug, compilable, inliningPlan, compilationId, null, null);
Assert.assertTrue(target.isValid());
target.call(0);
Assert.assertTrue(target.isValid());
target.call(1);
Assert.assertFalse(target.isValid());
}
use of org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime in project graal by oracle.
the class PerformanceWarningTest method testHelper.
@SuppressWarnings("try")
private static void testHelper(RootNode rootNode, boolean expectException, String... outputStrings) {
GraalTruffleRuntime runtime = GraalTruffleRuntime.getRuntime();
OptimizedCallTarget target = (OptimizedCallTarget) runtime.createCallTarget(rootNode);
// Compile and capture output to TTY.
ByteArrayOutputStream outContent = new ByteArrayOutputStream();
boolean seenException = false;
try (TTY.Filter filter = new TTY.Filter(new LogStream(outContent))) {
try (TruffleOptionsOverrideScope scope = TruffleCompilerOptions.overrideOptions(TruffleCompilerOptions.TraceTrufflePerformanceWarnings, Boolean.TRUE);
TruffleOptionsOverrideScope scope2 = TruffleCompilerOptions.overrideOptions(TruffleCompilerOptions.TrufflePerformanceWarningsAreFatal, Boolean.TRUE)) {
OptionValues options = TruffleCompilerOptions.getOptions();
DebugContext debug = DebugContext.create(options, DebugHandlersFactory.LOADER);
try (DebugCloseable d = debug.disableIntercept();
DebugContext.Scope s = debug.scope("PerformanceWarningTest")) {
final OptimizedCallTarget compilable = target;
TruffleCompilerImpl compiler = (TruffleCompilerImpl) runtime.newTruffleCompiler();
CompilationIdentifier compilationId = compiler.getCompilationIdentifier(compilable);
TruffleInliningPlan inliningPlan = new TruffleInlining(compilable, new DefaultInliningPolicy());
compiler.compileAST(debug, compilable, inliningPlan, compilationId, null, null);
}
} catch (AssertionError e) {
seenException = true;
if (!expectException) {
throw new AssertionError("Unexpected exception caught", e);
}
}
}
if (expectException && !seenException) {
Assert.assertTrue("Expected exception not caught.", false);
}
// Check output on TTY.
String output = outContent.toString();
if (outputStrings == EMPTY_PERF_WARNINGS) {
Assert.assertEquals("", output);
} else {
for (String s : outputStrings) {
Assert.assertTrue(String.format("Root node class %s: \"%s\" not found in output \"%s\"", rootNode.getClass(), s, output), output.contains(s));
}
}
}
use of org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime in project graal by oracle.
the class SLWaitForOptimizationBuiltin method waitForOptimization.
@Specialization
public SLFunction waitForOptimization(SLFunction function, long timeout) {
OptimizedCallTarget target = (OptimizedCallTarget) function.getCallTarget();
GraalTruffleRuntime runtime = ((GraalTruffleRuntime) Truffle.getRuntime());
try {
runtime.waitForCompilation(target, timeout);
} catch (ExecutionException | TimeoutException e) {
throw new RuntimeException(e);
}
return function;
}
Aggregations