File: MaxGRFTables.h

package info (click to toggle)
intel-graphics-compiler2 2.16.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 106,644 kB
  • sloc: cpp: 805,640; lisp: 287,672; ansic: 16,414; python: 3,952; yacc: 2,588; lex: 1,666; pascal: 313; sh: 186; makefile: 35
file content (50 lines) | stat: -rw-r--r-- 1,415 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*========================== begin_copyright_notice ============================

Copyright (C) 2025 Intel Corporation

SPDX-License-Identifier: MIT

============================= end_copyright_notice ===========================*/

#pragma once

#include "../common/Types.hpp"
#include "CISACodeGen/Platform.hpp"

#include <stdint.h>
#include <vector>

using namespace IGC;
namespace IGC {
enum class HWLocalId : unsigned char { VALUE0 = 0, VALUE1, EITHER };

// Define a struct to represent each row
struct MaxGRFEntry {
  uint16_t GRF;
  SIMDMode SIMT;
  HWLocalId HWLID; // HW local-id generation
  uint16_t Workitems;
};

// Singleton class to create only one instance
class MaxGRFTable {
public:
  // Static method to access the singleton instance
  static MaxGRFTable &GetInstance(const CPlatform &platform) {
    static MaxGRFTable grfTable(platform);
    return grfTable;
  }

  // Delete copy constructor and assignment operator to prevent copying
  MaxGRFTable(MaxGRFTable &) = delete;
  MaxGRFTable &operator=(const MaxGRFTable &) = delete;
  MaxGRFTable(const CPlatform &platform) : m_platform(platform) { LoadTable(platform); }
  uint16_t GetMaxGRF(SIMDMode simt, HWLocalId hwlid, uint witems);

private:
  const CPlatform &m_platform;
  llvm::ArrayRef<MaxGRFEntry> table;
  void LoadTable(const CPlatform &platform);
  bool MatchHWLocalID(HWLocalId fromTable, HWLocalId target);
};
} // namespace IGC