[pypy-commit] pypy guard-compatible: make vtune integration work on my system
Raemi
pypy.commits at gmail.com
Thu Mar 22 11:27:36 EDT 2018
Author: Remi Meier <remi.meier at gmail.com>
Branch: guard-compatible
Changeset: r94077:fb4fbff6cb90
Date: 2018-03-22 16:26 +0100
http://bitbucket.org/pypy/pypy/changeset/fb4fbff6cb90/
Log: make vtune integration work on my system
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -39,6 +39,7 @@
from rpython.jit.codewriter import longlong
from rpython.rlib.rarithmetic import intmask, r_uint
from rpython.rlib.objectmodel import compute_unique_id
+from rpython.jit.backend.x86 import vtune
class Assembler386(BaseAssembler, VectorAssemblerMixin):
@@ -906,9 +907,7 @@
return clt.asmmemmgr_blocks
def materialize_done(self, rawstart, size, funcname):
- from rpython.jit.backend.x86.vtune import rpy_vtune_register
- with rffi.scoped_str2charp("rpyjit." + funcname) as p:
- rpy_vtune_register(p, rawstart, size)
+ vtune.register_vtune_symbol("rpyjit." + funcname, rawstart, size)
def materialize(self, mc, allblocks, funcname, gcrootmap=None):
size = mc.get_relative_pos()
diff --git a/rpython/jit/backend/x86/vtune.py b/rpython/jit/backend/x86/vtune.py
--- a/rpython/jit/backend/x86/vtune.py
+++ b/rpython/jit/backend/x86/vtune.py
@@ -1,7 +1,7 @@
"""
Support for VTune Amplifier
"""
-
+from rpython.rtyper.tool import rffi_platform
from rpython.rtyper.lltypesystem import lltype, rffi
from rpython.translator.tool.cbuild import ExternalCompilationInfo
@@ -10,19 +10,31 @@
post_include_bits=["""
RPY_EXTERN void rpy_vtune_register(char *, long, long);
"""],
- include_dirs=["/opt/intel/system_studio_2018/vtune_amplifier/include"],
- libraries=["dl"], # otherwise, iJIT_IsProfilingActive() just returns 0
- separate_module_sources=["""
-#include "/opt/intel/system_studio_2018/vtune_amplifier/sdk/src/ittnotify/jitprofiling.c"
+ libraries=["dl", "jitprofiling"],
+ library_dirs=["/opt/intel/system_studio_2018/vtune_amplifier/lib64/"],
+ separate_module_sources=[r"""
+#include "/opt/intel/system_studio_2018/vtune_amplifier/include/jitprofiling.h"
+
+RPY_EXTERN void rpy_make_dlopen_strong(char *funcname, Signed addr, Signed size)
+{
+ // make *really* sure that dlopen&Co are linked so that vtune is happy
+ dlopen(NULL, 0);
+ dlsym(NULL, NULL);
+ dlclose(NULL);
+}
RPY_EXTERN void rpy_vtune_register(char *funcname, Signed addr, Signed size)
{
iJIT_Method_Load_V2 jmethod = {0};
+ fprintf(stderr, "call vtune register\n");
+
if (iJIT_IsProfilingActive() != iJIT_SAMPLING_ON) {
return;
}
+ fprintf(stderr, "actually vtune register\n");
+
jmethod.method_id = iJIT_GetNewMethodID();
jmethod.method_name = funcname;
jmethod.method_load_address = (void *)addr;
@@ -34,10 +46,25 @@
}
"""])
-rpy_vtune_register = rffi.llexternal(
+
+
+try:
+ rffi_platform.verify_eci(eci)
+
+ rpy_vtune_register = rffi.llexternal(
"rpy_vtune_register",
[rffi.CCHARP, lltype.Signed, lltype.Signed],
lltype.Void,
compilation_info=eci,
_nowrapper=True,
sandboxsafe=True)
+
+ def register_vtune_symbol(name, start_addr, size):
+ with rffi.scoped_str2charp("JIT: " + name) as loopname:
+ rpy_vtune_register(loopname, start_addr, size)
+
+except rffi_platform.CompilationError as e:
+ print "WARNING: not using VTune integration", e
+ def register_vtune_symbol(name, start_addr, size):
+ pass
+
More information about the pypy-commit
mailing list