Author: Remi Meier <remi.me...@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 + _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit