Ok, thanks for the tip of the flag. You would also need to pass "-use_lbr=false" to create a gcov file for a device that does not have LBR support. We tried this on ARM collected profiles and we got the same speedup as x86 collected profiles on linpack.
Sebastian On Tue, Apr 21, 2015 at 3:53 PM, Dehao Chen <de...@google.com> wrote: > That's correct. For trunk, gcov_version is 0x1. We defined this as a > flag so that you can actually change it via --gcov_version=0x1 instead > of changing the code. > > Dehao > > On Tue, Apr 21, 2015 at 1:47 PM, Sebastian Pop <seb...@gmail.com> wrote: >> We also needed to adjust the gcov_version in autofdo/gcov.cc to read >> 0x1 for dev branches of gcc (instead of the current 0x3430372a for >> some released version of GCC): >> >> -DEFINE_uint64(gcov_version, 0x3430372a, >> +DEFINE_uint64(gcov_version, 0x1, >> >> Sebastian >> >> On Tue, Apr 21, 2015 at 3:33 PM, Aditya K <hiradi...@msn.com> wrote: >>> After patching linux perf. This script collects creates a coverage file >>> (e.g., for linpack) which can be used for fdo. >>> >>> >>> gcov=linpack-x86.gcov >>> MAKE='make' >>> >>> >>> # x86 >>> x86() { >>> CC=/usr/bin/gcc >>> CXX=/usr/bin/g++ >>> >>> export CFLAGS="-Ofast -g3 -static" >>> export CPPFLAGS=$CFLAGS >>> >>> $MAKE -C $SRC/SingleSource/Benchmarks/Linpack clean >>> >>> $MAKE -C $SRC/SingleSource/Benchmarks/Linpack -k TEST=simple >>> TARGET_LLVMGCC=$CC TARGET_CXX=$CXX LLI_OPTFLAGS= TARGET_CC=$CC >>> TARGET_LLVMGXX=$CXX CC_UNDER_TEST_IS_GCC=1 TARGET_FLAGS= >>> USE_REFERENCE_OUTPUT=1 CC_UNDER_TEST_TARGET_IS_AARCH64=1 OPTFLAGS= >>> LLC_OPTFLAGS= ENABLE_OPTIMIZED=1 ARCH=x86_64 ENABLE_HASHED_PROGRAM_OUTPUT=1 >>> DISABLE_JIT=1 >>> >>> perfdata=autofdo-linpack/perf-x86.data >>> >>> perf record -b -e branch-instructions -o $perfdata >>> $SRC/SingleSource/Benchmarks/Linpack/Output/linpack-pc.simple >>> >>> autofdo/usr/bin/create_gcov >>> --binary=$SRC/SingleSource/Benchmarks/Linpack/Output/linpack-pc.simple >>> --profile=$perfdata --gcov=$gcov >>> >>> } >>> >>> >>> hth, >>> -Aditya >>> >>> ---------------------------------------- >>>> From: a...@firstfloor.org >>>> To: i.palac...@samsung.com >>>> CC: dnovi...@google.com; gcc@gcc.gnu.org; davi...@google.com; >>>> hubi...@ucw.cz; seb...@gmail.com; de...@google.com; v.bari...@samsung.com >>>> Subject: Re: AutoFDO profile toolchain is open-sourced >>>> Date: Tue, 21 Apr 2015 07:25:10 -0700 >>>> >>>> Ilya Palachev <i.palac...@samsung.com> writes: >>>>> >>>>> But why create_gcov does not inform about that (no branch events were >>>>> found)? It creates empty gcov file and says nothing :( >>>>> >>>>> Moreover, in the mentioned README it is said that perf should also be >>>>> executed with option -e BR_INST_RETIRED:TAKEN. >>>> >>>> Standard perf doesn't have a full event list >>>> This assumes a perf patched with the libpfm patch. >>>> >>>> Also I suspect it really wants to use PEBS events, so pp should be added. >>>> >>>> Alternatively you can use ocperf (from >>>> http://github.com/andikleen/pmu-tools) which is just a wrapper: >>>> >>>> ocperf.py record -e br_inst_retired.near_taken:pp -b ... >>>> >>>> or specify the event manually (depending on your CPU, like) >>>> >>>> perf record -e >>>> cpu/event=0xc4,umask=0x20,name=br_inst_retired_near_taken,period=400009/pp >>>> -b ... >>>> >>>> BTW the biggest problem with autofdo currently is that it is >>>> quite bitrotten and supports only several years old perf. >>>> So all of this above will only work with old distributions, >>>> unless you compile an old perf utility first. >>>> >>>> -Andi >>>> >>>> -- >>>> a...@linux.intel.com -- Speaking for myself only >>>