mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
148 lines
6.4 KiB
C++
148 lines
6.4 KiB
C++
/*
|
|
* Copyright (C) 2025 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "shared/source/xe3p_core/hw_cmds_base.h"
|
|
|
|
namespace NEO {
|
|
|
|
inline uint32_t computeSlmValuesXe3p(uint32_t slmSize) {
|
|
using SHARED_LOCAL_MEMORY_SIZE = typename Xe3pCoreFamily::INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE;
|
|
|
|
UNRECOVERABLE_IF(slmSize > 384u * MemoryConstants::kiloByte);
|
|
|
|
if (slmSize > 320u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_384K;
|
|
}
|
|
if (slmSize > 256u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_320K;
|
|
}
|
|
if (slmSize > 192u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_256K;
|
|
}
|
|
if (slmSize > 128u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_192K;
|
|
}
|
|
if (slmSize > 96u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_128K;
|
|
}
|
|
if (slmSize > 64u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_96K;
|
|
}
|
|
if (slmSize > 48u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_64K;
|
|
}
|
|
if (slmSize > 32u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_48K;
|
|
}
|
|
if (slmSize > 24u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_32K;
|
|
}
|
|
if (slmSize > 16u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_24K;
|
|
}
|
|
if (slmSize > 8u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_16K;
|
|
}
|
|
if (slmSize > 4u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_8K;
|
|
}
|
|
if (slmSize > 2u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_4K;
|
|
}
|
|
if (slmSize > 1u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_2K;
|
|
}
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_1K;
|
|
}
|
|
|
|
inline uint32_t computeSlmValuesXe3pHeapless(uint32_t slmSize) {
|
|
using SHARED_LOCAL_MEMORY_SIZE = typename Xe3pCoreFamily::INTERFACE_DESCRIPTOR_DATA_2::SHARED_LOCAL_MEMORY_SIZE;
|
|
|
|
UNRECOVERABLE_IF(slmSize > 384u * MemoryConstants::kiloByte);
|
|
|
|
if (slmSize > 320u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_384K;
|
|
}
|
|
if (slmSize > 256u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_320K;
|
|
}
|
|
if (slmSize > 192u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_256K;
|
|
}
|
|
if (slmSize > 128u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_192K;
|
|
}
|
|
if (slmSize > 96u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_128K;
|
|
}
|
|
if (slmSize > 64u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_96K;
|
|
}
|
|
if (slmSize > 48u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_64K;
|
|
}
|
|
if (slmSize > 32u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_48K;
|
|
}
|
|
if (slmSize > 24u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_32K;
|
|
}
|
|
if (slmSize > 16u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_24K;
|
|
}
|
|
if (slmSize > 15u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_16K;
|
|
}
|
|
if (slmSize > 14u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_15K;
|
|
}
|
|
if (slmSize > 13u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_14K;
|
|
}
|
|
if (slmSize > 12u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_13K;
|
|
}
|
|
if (slmSize > 11u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_12K;
|
|
}
|
|
if (slmSize > 10u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_11K;
|
|
}
|
|
if (slmSize > 9u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_10K;
|
|
}
|
|
if (slmSize > 8u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_9K;
|
|
}
|
|
if (slmSize > 7u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_8K;
|
|
}
|
|
if (slmSize > 6u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_7K;
|
|
}
|
|
if (slmSize > 5u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_6K;
|
|
}
|
|
if (slmSize > 4u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_5K;
|
|
}
|
|
if (slmSize > 3u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_4K;
|
|
}
|
|
if (slmSize > 2u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_3K;
|
|
}
|
|
if (slmSize > 1u * MemoryConstants::kiloByte) {
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_2K;
|
|
}
|
|
return SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_SLM_ENCODES_1K;
|
|
}
|
|
|
|
} // namespace NEO
|