Buse Yilmaz via llvm-dev
2017-Dec-20 02:30 UTC
[llvm-dev] how to use sampling profiler outputs with opt
Hi, I'm trying to get some information using sampling profile data to extract the program behavior. I'm using llvm 5.0.0. I followed clang's documentation. I'm compiling my sources with -g, using perf record to collect the profiling info. I also used autofdo and converted the profiling data to LLVM's format. I fed the profiling data to clang and compiled it into .ll file using -g -fprofile-sample=... I can see the profile summary. So I assume that I managed to collect the sample profiling data correctly. I somewhat figured out what the detailed summary means when I compared it against llvm-profdata's output. !4 = !{i32 1, !"ProfileSummary", !5} !5 = !{!6, !7, !8, !9, !10, !11, !12, !13} !6 = !{!"ProfileFormat", !"SampleProfile"} !7 = !{!"TotalCount", i64 269054785} !8 = !{!"MaxCount", i64 406635} !9 = !{!"MaxInternalCount", i64 0} !10 = !{!"MaxFunctionCount", i64 435366} !11 = !{!"NumCounts", i64 1538} !12 = !{!"NumFunctions", i64 13} !13 = !{!"DetailedSummary", !14} !14 = !{!15, !16, !17, !18, !19, !20, !20, !21, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30} !15 = !{i32 10000, i64 406635, i32 17} !16 = !{i32 100000, i64 406632, i32 92} !17 = !{i32 200000, i64 384936, i32 135} !18 = !{i32 300000, i64 365763, i32 223} !19 = !{i32 400000, i64 365762, i32 282} !20 = !{i32 500000, i64 365759, i32 359} !21 = !{i32 600000, i64 250328, i32 451} !22 = !{i32 700000, i64 216434, i32 569} !23 = !{i32 800000, i64 213161, i32 697} !24 = !{i32 900000, i64 196084, i32 822} !25 = !{i32 950000, i64 95056, i32 892} !26 = !{i32 990000, i64 86169, i32 1011} !27 = !{i32 999000, i64 3734, i32 1074} !28 = !{i32 999900, i64 494, i32 1271} !29 = !{i32 999990, i64 125, i32 1358} !30 = !{i32 999999, i64 12, i32 1390} !31 = !{!"clang version 3.9.0 (tags/RELEASE_390/final 289411)"} !32 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 92, type: !33, isLocal: false, isDefinition: true, scopeLine: 93, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2) !33 = !DISubroutineType(types: !2) !34 = !{!"function_entry_count", i64 0} My purpose is to see how the sample profile I collected using perf affects branch probability and block frequency info. So I used the sampling profile data with the .ll file that I compiled WITHOUT -fprofile-sample=... I invoked opt like this: opt -analyze -sample-profile-file="../bt.A.x_out" -block-freq bt.ll opt -analyze -sample-profile-file="../bt.A.x_out" -branch-prob bt.ll I see no difference in the outputs between when I use the sample profiling data and when I do the same analysis without the sample profiling data. bt is from NPB suite (Serial, class A). I'm kind of confused. I appreciate if somebody can comment on: Am I doing something wrong or should I change my benchmark since this is not representative enough? Thanks! -- Buse -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171220/58cb5ebc/attachment.html>