brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · c99905d Raw
90 lines · c
1//===--------------------- SummaryView.h ------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8/// \file9///10/// This file implements the summary view.11///12/// The goal of the summary view is to give a very quick overview of the13/// performance throughput. Below is an example of summary view:14///15///16/// Iterations:        30017/// Instructions:      90018/// Total Cycles:      61019/// Dispatch Width:    220/// IPC:               1.4821/// Block RThroughput: 2.022///23/// The summary view collects a few performance numbers. The two main24/// performance indicators are 'Total Cycles' and IPC (Instructions Per Cycle).25///26//===----------------------------------------------------------------------===//27 28#ifndef LLVM_TOOLS_LLVM_MCA_SUMMARYVIEW_H29#define LLVM_TOOLS_LLVM_MCA_SUMMARYVIEW_H30 31#include "llvm/MC/MCSchedule.h"32#include "llvm/MCA/View.h"33#include "llvm/Support/raw_ostream.h"34 35namespace llvm {36namespace mca {37 38/// A view that collects and prints a few performance numbers.39class SummaryView : public View {40  const llvm::MCSchedModel &SM;41  llvm::ArrayRef<llvm::MCInst> Source;42  const unsigned DispatchWidth;43  unsigned LastInstructionIdx;44  unsigned TotalCycles;45  // The total number of micro opcodes contributed by a block of instructions.46  unsigned NumMicroOps;47 48  struct DisplayValues {49    unsigned Instructions;50    unsigned Iterations;51    unsigned TotalInstructions;52    unsigned TotalCycles;53    unsigned DispatchWidth;54    unsigned TotalUOps;55    double IPC;56    double UOpsPerCycle;57    double BlockRThroughput;58  };59 60  // For each processor resource, this vector stores the cumulative number of61  // resource cycles consumed by the analyzed code block.62  llvm::SmallVector<unsigned, 8> ProcResourceUsage;63 64  // Each processor resource is associated with a so-called processor resource65  // mask. This vector allows to correlate processor resource IDs with processor66  // resource masks. There is exactly one element per each processor resource67  // declared by the scheduling model.68  llvm::SmallVector<uint64_t, 8> ProcResourceMasks;69 70  // Used to map resource indices to actual processor resource IDs.71  llvm::SmallVector<unsigned, 8> ResIdx2ProcResID;72 73  /// Compute the data we want to print out in the object DV.74  void collectData(DisplayValues &DV) const;75 76public:77  SummaryView(const llvm::MCSchedModel &Model, llvm::ArrayRef<llvm::MCInst> S,78              unsigned Width);79 80  void onCycleEnd() override { ++TotalCycles; }81  void onEvent(const HWInstructionEvent &Event) override;82  void printView(llvm::raw_ostream &OS) const override;83  StringRef getNameAsString() const override { return "SummaryView"; }84  json::Value toJSON() const override;85};86} // namespace mca87} // namespace llvm88 89#endif90