diff --git a/BM/pmu/apebs_tests.sh b/BM/pmu/apebs_tests.sh index e049363..fb5fcb2 100755 --- a/BM/pmu/apebs_tests.sh +++ b/BM/pmu/apebs_tests.sh @@ -26,16 +26,10 @@ usage() { __EOF } -lbr_test() { - level=$1 - perfdata="pebs.data" - logfile="temp.txt" - perf record -o "$perfdata" -b -e cycles:"$level" -a sleep 1 2> "$logfile" - sample_count=$(grep "sample" $logfile | awk '{print $10}' | tr -cd "0-9") - lbr_count=$(perf report -D -i $perfdata| grep -c "branch stack") - test_print_trc "sample_count = $sample_count; lbr_count = $lbr_count" - [[ $sample_count -eq 0 ]] && die "samples = 0!" - [[ $sample_count -eq $lbr_count ]] || die "samples does not match!" +clear_files() { + for i in "$@"; do + [[ -f $i ]] && test_print_trc "Remove file: $i" && rm "$i" + done; } lbr_test() { @@ -54,11 +48,25 @@ xmm_test() { level=$1 perfdata="pebs.data" logfile="temp.txt" - perf record -o "$perfdata" -IXMM0 -e cycles:"$level" -a sleep 1 2> "$logfile" + simdfile="simd.txt" + local reg_type=0 + perf record -I? 2>&1|tee $simdfile + grep 'XMM0-15' $simdfile > /dev/null && reg_type=0 + grep 'XMM0 XMM1' $simdfile > /dev/null && reg_type=1 + if [[ $reg_type -eq 0 ]]; then + xmm_reg="XMM" + mul=$((2 * 16)) + elif [[ $reg_type -eq 1 ]]; then + xmm_reg="XMM0" + mul=2 + fi + + perf record -o $perfdata -I${xmm_reg} -e cycles:"$level" -a sleep 1 2>&1|tee $logfile sample_count=$(grep "sample" $logfile | awk '{print $10}' | tr -cd "0-9") - count=$(perf report -D -i $perfdata| grep -c "XMM0") + count=$(perf report -D -i $perfdata| grep -c "${xmm_reg}") + clear_files $perfdata $logfile $simdfile test_print_trc "before sample_count = $sample_count; count = $count" - sample_count=$((sample_count * 2)) + sample_count=$((sample_count * mul)) test_print_trc "after sample_count = $sample_count; count = $count" [[ $sample_count -eq 0 ]] && die "samples = 0!" [[ $sample_count -eq $count ]] || die "samples does not match!" diff --git a/BM/pmu/pmu_tests.sh b/BM/pmu/pmu_tests.sh index 9389791..7390b18 100755 --- a/BM/pmu/pmu_tests.sh +++ b/BM/pmu/pmu_tests.sh @@ -215,8 +215,16 @@ arch_pebs_gp_reg_group_test() { arch_pebs_xer_group_test() { level="p" -# reg_group_test_more_option "OPMASK0" "opmask0" 1 - reg_group_test_more_option "YMMH0" "YMMH0" 2 + simdfile="simd.txt" + do_cmd "perf record -I? 2>&1|tee $simdfile" + if grep 'YMM0-15' $simdfile > /dev/null; then + # All 16 YMM registers are recorded, so 4*16=64 + reg_group_test_more_option "YMM" "YMM" 64 + clear_files $simdfile + else + clear_files $simdfile + die "SIMD sampling format is incorrect!" + fi # reg_group_test_more_option "ZMMH0" "ZMMLH0" 4 }