brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 9d2f71c Raw
98 lines · c
1//===--------------------- SchedulerStatistics.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 defines class SchedulerStatistics. Class SchedulerStatistics is a11/// View that listens to instruction issue events in order to print general12/// statistics related to the hardware schedulers.13///14/// Example:15/// ========16///17/// Schedulers - number of cycles where we saw N instructions issued:18/// [# issued], [# cycles]19///  0,          6  (2.9%)20///  1,          106  (50.7%)21///  2,          97  (46.4%)22///23/// Scheduler's queue usage:24/// [1] Resource name.25/// [2] Average number of used buffer entries.26/// [3] Maximum number of used buffer entries.27/// [4] Total number of buffer entries.28///29///  [1]            [2]        [3]        [4]30/// JALU01           0          0          2031/// JFPU01           15         18         1832/// JLSAGU           0          0          1233//34//===----------------------------------------------------------------------===//35 36#ifndef LLVM_TOOLS_LLVM_MCA_SCHEDULERSTATISTICS_H37#define LLVM_TOOLS_LLVM_MCA_SCHEDULERSTATISTICS_H38 39#include "llvm/ADT/SmallVector.h"40#include "llvm/MC/MCSubtargetInfo.h"41#include "llvm/MCA/View.h"42#include <map>43 44namespace llvm {45namespace mca {46 47class SchedulerStatistics final : public View {48  const llvm::MCSchedModel &SM;49  unsigned LQResourceID;50  unsigned SQResourceID;51 52  unsigned NumIssued;53  unsigned NumCycles;54 55  unsigned MostRecentLoadDispatched;56  unsigned MostRecentStoreDispatched;57 58  // Tracks the usage of a scheduler's queue.59  struct BufferUsage {60    unsigned SlotsInUse;61    unsigned MaxUsedSlots;62    uint64_t CumulativeNumUsedSlots;63  };64 65  using Histogram = std::map<unsigned, unsigned>;66  Histogram IssueWidthPerCycle;67 68  std::vector<BufferUsage> Usage;69 70  void updateHistograms();71  void printSchedulerStats(llvm::raw_ostream &OS) const;72  void printSchedulerUsage(llvm::raw_ostream &OS) const;73 74public:75  SchedulerStatistics(const llvm::MCSubtargetInfo &STI);76  void onEvent(const HWInstructionEvent &Event) override;77  void onCycleBegin() override { NumCycles++; }78  void onCycleEnd() override { updateHistograms(); }79 80  // Increases the number of used scheduler queue slots of every buffered81  // resource in the Buffers set.82  void onReservedBuffers(const InstRef &IR,83                         llvm::ArrayRef<unsigned> Buffers) override;84 85  // Decreases by one the number of used scheduler queue slots of every86  // buffered resource in the Buffers set.87  void onReleasedBuffers(const InstRef &IR,88                         llvm::ArrayRef<unsigned> Buffers) override;89 90  void printView(llvm::raw_ostream &OS) const override;91  StringRef getNameAsString() const override { return "SchedulerStatistics"; }92  bool isSerializable() const override { return false; }93};94} // namespace mca95} // namespace llvm96 97#endif98