Skip to content

Commit

Permalink
YJIT: skip intermediate arrays in print_sorted_exit_counts (#7547)
Browse files Browse the repository at this point in the history
Early total_exits condition.
Replace Array#sort_by/first(how_many) with Array#max_by(how_many).
Replace Array#map/max with Array#max_by, match print_counters style for longest_name_length.
  • Loading branch information
Maumagnaguagno committed Mar 17, 2023
1 parent c65d7b4 commit 11f299f
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions yjit.rb
Expand Up @@ -308,23 +308,24 @@ def _print_stats # :nodoc:
end

def print_sorted_exit_counts(stats, prefix:, how_many: 20, left_pad: 4) # :nodoc:
exits = []
stats.each do |k, v|
if k.start_with?(prefix)
exits.push [k.to_s.delete_prefix(prefix), v]
end
end

exits = exits.select { |_name, count| count > 0 }.sort_by { |_name, count| -count }.first(how_many)
total_exits = total_exit_count(stats)

if total_exits > 0
exits = []
stats.each do |k, v|
if k.start_with?(prefix)
exits.push [k.to_s.delete_prefix(prefix), v]
end
end

exits = exits.select { |_name, count| count > 0 }.max_by(how_many) { |_name, count| count }

top_n_total = exits.sum { |name, count| count }
top_n_exit_pct = 100.0 * top_n_total / total_exits

$stderr.puts "Top-#{exits.size} most frequent exit ops (#{"%.1f" % top_n_exit_pct}% of exits):"

longest_insn_name_len = exits.map { |name, count| name.length }.max
longest_insn_name_len = exits.max_by { |name, count| name.length }.first.length
exits.each do |name, count|
padding = longest_insn_name_len + left_pad
padded_name = "%#{padding}s" % name
Expand Down

0 comments on commit 11f299f

Please sign in to comment.