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
|