[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