Создание векторов базовых блоков для SimPoints

Для моей докторской диссертации я пытаюсь отследить GAP Benchmark Suite, используя SimPoints, и вы, возможно, знаете, что первым шагом для этого является получение векторов базовых блоков для приложения, которое вы хотите отслеживать.

Я пытаюсь использовать несколько доступных методов, таких как экспериментальные инструменты для valgrind:

valgrind --tool=exp-bbv /bin/ls

Но я получаю такие ошибки, как эта, когда пытаюсь создать базовые векторные файлы блоков:

==177076== exp-bbv, a SimPoint basic block vector generator
==177076== NOTE: This is an Experimental-Class Valgrind Tool
==177076== Copyright (C) 2006-2015 Vince Weaver
==177076== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==177076== Command: /gpfs/scratch/bsc28/bsc28798/GAP/gapbs/pr -f /gpfs/scratch/bsc28/bsc28798/GAP/gapbs/benchmark/graphs/road.sg -i1000 -tle-4 -n16
==177076== 
vex amd64->IR: unhandled instruction bytes: 0x62 0xF1 0x7D 0x28 0xEF 0xC0 0xBF 0x0
vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=NONE
vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
==177076== valgrind: Unrecognised instruction at address 0x4cb88a4.
==177076==    at 0x4CB88A4: ??? (in /gpfs/apps/MN4/GCC/7.2.0/lib64/libstdc++.so.6.0.24)
==177076==    by 0x400ECB9: call_init.part.0 (in /lib64/ld-2.22.so)
==177076==    by 0x400EDA2: _dl_init (in /lib64/ld-2.22.so)
==177076==    by 0x4001229: ??? (in /lib64/ld-2.22.so)
==177076==    by 0x5: ???
==177076==    by 0xFFEFFEE6A: ???
==177076==    by 0xFFEFFEE94: ???
==177076==    by 0xFFEFFEE97: ???
==177076==    by 0xFFEFFEED7: ???
==177076==    by 0xFFEFFEEDE: ???
==177076==    by 0xFFEFFEEE5: ???
==177076== Your program just tried to execute an instruction that Valgrind
==177076== did not recognise.  There are two possible reasons for this.
==177076== 1. Your program has a bug and erroneously jumped to a non-code
==177076==    location.  If you are running Memcheck and you just saw a
==177076==    warning about a bad jump, it's probably your program's fault.
==177076== 2. The instruction is legitimate but Valgrind doesn't handle it,
==177076==    i.e. it's Valgrind's fault.  If you think this is the case or
==177076==    you are not sure, please let us know and we'll try to fix it.
==177076== Either way, Valgrind will now raise a SIGILL signal which will
==177076== probably kill your program.
==177076== 
==177076== Process terminating with default action of signal 4 (SIGILL)
==177076==  Illegal opcode at address 0x4CB88A4
==177076==    at 0x4CB88A4: ??? (in /gpfs/apps/MN4/GCC/7.2.0/lib64/libstdc++.so.6.0.24)
==177076==    by 0x400ECB9: call_init.part.0 (in /lib64/ld-2.22.so)
==177076==    by 0x400EDA2: _dl_init (in /lib64/ld-2.22.so)
==177076==    by 0x4001229: ??? (in /lib64/ld-2.22.so)
==177076==    by 0x5: ???
==177076==    by 0xFFEFFEE6A: ???
==177076==    by 0xFFEFFEE94: ???
==177076==    by 0xFFEFFEE97: ???
==177076==    by 0xFFEFFEED7: ???
==177076==    by 0xFFEFFEEDE: ???
==177076==    by 0xFFEFFEEE5: ???
==177076== 
==177076== 
==177076== 
==177076== # Thread 1

Я также пытался использовать различные варианты, предложенные на веб-сайте SimPoints, но пока это был тупик. Итак, я здесь, спрашиваю сообщество, знаете ли вы о способе достижения этого. :)

Примечание. Кроме того, рабочие нагрузки работают нормально сами по себе, и именно тогда, когда мы хотим отследить их, мы сталкиваемся с проблемами.


person Alexandre Valentin Jamet    schedule 27.01.2020    source источник
comment
Вывод clang asm включает базовые маркеры блоков (в виде меток или комментариев). См. этот ответ   -  person Peter Cordes    schedule 28.01.2020
comment
Вы имеете в виду, что я мог бы каким-то образом разобрать ассемблерный код из clang и таким образом получить базовые блоки?   -  person Alexandre Valentin Jamet    schedule 04.02.2020
comment
Да. Скомпилируйте с clang -O3 -S foo.c. IDK, если есть удобный способ получить это для всей программы (а не только для отдельных единиц компиляции). Может быть, есть способ заставить оптимизацию времени компоновки (LTO) выдавать один большой asm-файл вместо связанного исполняемого файла?   -  person Peter Cordes    schedule 05.02.2020