Skip to content

Commit 10d1bd2

Browse files
committed
Add implementation
1 parent 5fb16be commit 10d1bd2

File tree

12 files changed

+91
-7
lines changed

12 files changed

+91
-7
lines changed

cmake/FetchLevelZero.cmake

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ set(UR_LEVEL_ZERO_LOADER_LIBRARY "" CACHE FILEPATH "Path of the Level Zero Loade
77
set(UR_LEVEL_ZERO_INCLUDE_DIR "" CACHE FILEPATH "Directory containing the Level Zero Headers")
88
set(UR_LEVEL_ZERO_LOADER_REPO "" CACHE STRING "Github repo to get the Level Zero loader sources from")
99
set(UR_LEVEL_ZERO_LOADER_TAG "" CACHE STRING " GIT tag of the Level Loader taken from github repo")
10+
set(UR_COMPUTE_RUNTIME_REPO "" CACHE STRING "Github repo to get the compute runtime sources from")
11+
set(UR_COMPUTE_RUNTIME_TAG "" CACHE STRING " GIT tag of the compute runtime taken from github repo")
1012

1113
# Copy Level Zero loader/headers locally to the build to avoid leaking their path.
1214
set(LEVEL_ZERO_COPY_DIR ${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader)
@@ -87,8 +89,31 @@ target_link_libraries(LevelZeroLoader
8789
INTERFACE "${LEVEL_ZERO_LIB_NAME}"
8890
)
8991

92+
file(GLOB LEVEL_ZERO_LOADER_API_HEADERS "${LEVEL_ZERO_INCLUDE_DIR}/*.h")
93+
file(COPY ${LEVEL_ZERO_LOADER_API_HEADERS} DESTINATION ${LEVEL_ZERO_INCLUDE_DIR}/level_zero)
9094
add_library(LevelZeroLoader-Headers INTERFACE)
9195
target_include_directories(LevelZeroLoader-Headers
92-
INTERFACE "$<BUILD_INTERFACE:${LEVEL_ZERO_INCLUDE_DIR}>"
96+
INTERFACE "$<BUILD_INTERFACE:${LEVEL_ZERO_INCLUDE_DIR};${LEVEL_ZERO_INCLUDE_DIR}/level_zero>"
97+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
98+
)
99+
100+
if (UR_COMPUTE_RUNTIME_REPO STREQUAL "")
101+
set(UR_COMPUTE_RUNTIME_REPO "https://github.com/intel/compute-runtime.git")
102+
endif()
103+
if (UR_COMPUTE_RUNTIME_TAG STREQUAL "")
104+
set(UR_COMPUTE_RUNTIME_TAG 24.39.31294.12)
105+
endif()
106+
include(FetchContent)
107+
# Sparse fetch only the dir with level zero headers to avoid pulling in the entire compute-runtime.
108+
FetchContentSparse_Declare(compute-runtime-level-zero-headers ${UR_COMPUTE_RUNTIME_REPO} "${UR_COMPUTE_RUNTIME_TAG}" "level_zero/include")
109+
FetchContent_GetProperties(compute-runtime-level-zero-headers)
110+
if(NOT compute-runtime-level-zero-headers_POPULATED)
111+
FetchContent_Populate(compute-runtime-level-zero-headers)
112+
endif()
113+
add_library(ComputeRuntimeLevelZero-Headers INTERFACE)
114+
set(COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE "${compute-runtime-level-zero-headers_SOURCE_DIR}/../..")
115+
message(STATUS "Level Zero Adapter: Using Level Zero headers from ${COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE}")
116+
target_include_directories(ComputeRuntimeLevelZero-Headers
117+
INTERFACE "$<BUILD_INTERFACE:${COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE}>"
93118
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
94119
)

source/adapters/cuda/device.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
10851085
case UR_DEVICE_INFO_GPU_SUBSLICES_PER_SLICE:
10861086
case UR_DEVICE_INFO_GPU_EU_COUNT_PER_SUBSLICE:
10871087
case UR_DEVICE_INFO_GPU_HW_THREADS_PER_EU:
1088+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP:
10881089
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
10891090

10901091
case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP:

source/adapters/hip/device.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
902902
case UR_DEVICE_INFO_BFLOAT16:
903903
case UR_DEVICE_INFO_IL_VERSION:
904904
case UR_DEVICE_INFO_ASYNC_BARRIER:
905+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP:
905906
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
906907
case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP: {
907908
int DriverVersion = 0;

source/adapters/level_zero/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ if(UR_BUILD_ADAPTER_L0)
109109
${PROJECT_NAME}::umf
110110
LevelZeroLoader
111111
LevelZeroLoader-Headers
112+
ComputeRuntimeLevelZero-Headers
112113
)
113114

114115
target_include_directories(ur_adapter_level_zero PRIVATE
@@ -202,6 +203,7 @@ if(UR_BUILD_ADAPTER_L0_V2)
202203
${PROJECT_NAME}::umf
203204
LevelZeroLoader
204205
LevelZeroLoader-Headers
206+
ComputeRuntimeLevelZero-Headers
205207
)
206208

207209
target_include_directories(ur_adapter_level_zero_v2 PRIVATE

source/adapters/level_zero/common.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "common.hpp"
1212
#include "logger/ur_logger.hpp"
1313
#include "usm.hpp"
14+
#include <level_zero/include/ze_intel_gpu.h>
1415

1516
ur_result_t ze2urResult(ze_result_t ZeResult) {
1617
if (ZeResult == ZE_RESULT_SUCCESS)
@@ -330,6 +331,14 @@ template <> zes_structure_type_t getZesStructureType<zes_mem_properties_t>() {
330331
return ZES_STRUCTURE_TYPE_MEM_PROPERTIES;
331332
}
332333

334+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
335+
template <>
336+
ze_structure_type_t
337+
getZeStructureType<ze_intel_device_block_array_exp_properties_t>() {
338+
return ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_PROPERTIES;
339+
}
340+
#endif // ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
341+
333342
// Global variables for ZER_EXT_RESULT_ADAPTER_SPECIFIC_ERROR
334343
thread_local ur_result_t ErrorMessageCode = UR_RESULT_SUCCESS;
335344
thread_local char ErrorMessage[MaxMessageSize];

source/adapters/level_zero/device.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,6 +1155,30 @@ ur_result_t urDeviceGetInfo(
11551155
return ReturnValue(false);
11561156
case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT:
11571157
return ReturnValue(true);
1158+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP: {
1159+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
1160+
const auto ZeDeviceBlockArrayFlags =
1161+
Device->ZeDeviceBlockArrayProperties->flags;
1162+
1163+
auto supportsFlags =
1164+
[&](ze_intel_device_block_array_exp_flags_t RequiredFlags) {
1165+
return (ZeDeviceBlockArrayFlags & RequiredFlags) == RequiredFlags;
1166+
};
1167+
1168+
ur_exp_device_2d_block_array_capability_flags_t BlockArrayCapabilities = 0;
1169+
if (supportsFlags(ZE_INTEL_DEVICE_EXP_FLAG_2D_BLOCK_LOAD)) {
1170+
BlockArrayCapabilities |=
1171+
UR_EXP_DEVICE_2D_BLOCK_ARRAY_CAPABILITY_FLAG_LOAD;
1172+
}
1173+
if (supportsFlags(ZE_INTEL_DEVICE_EXP_FLAG_2D_BLOCK_STORE)) {
1174+
BlockArrayCapabilities |=
1175+
UR_EXP_DEVICE_2D_BLOCK_ARRAY_CAPABILITY_FLAG_STORE;
1176+
}
1177+
return ReturnValue(BlockArrayCapabilities);
1178+
#else
1179+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
1180+
#endif
1181+
}
11581182
default:
11591183
logger::error("Unsupported ParamName in urGetDeviceInfo");
11601184
logger::error("ParamNameParamName={}(0x{})", ParamName,
@@ -1563,6 +1587,17 @@ ur_result_t ur_device_handle_t_::initialize(int SubSubDeviceOrdinal,
15631587
ZE_CALL_NOCHECK(zeDeviceGetProperties, (ZeDevice, &P));
15641588
};
15651589

1590+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
1591+
ZeDeviceBlockArrayProperties.Compute =
1592+
[ZeDevice](
1593+
ZeStruct<ze_intel_device_block_array_exp_properties_t> &Properties) {
1594+
ze_device_properties_t P;
1595+
P.stype = ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES;
1596+
P.pNext = &Properties;
1597+
ZE_CALL_NOCHECK(zeDeviceGetProperties, (ZeDevice, &P));
1598+
};
1599+
#endif // ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
1600+
15661601
ImmCommandListUsed = this->useImmediateCommandLists();
15671602

15681603
uint32_t numQueueGroups = 0;

source/adapters/level_zero/device.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
#include <unordered_map>
1919
#include <vector>
2020

21+
#include "adapters/level_zero/platform.hpp"
22+
#include "common.hpp"
23+
#include <level_zero/include/ze_intel_gpu.h>
2124
#include <ur/ur.hpp>
2225
#include <ur_ddi.h>
2326
#include <ze_api.h>
2427
#include <zes_api.h>
2528

26-
#include "adapters/level_zero/platform.hpp"
27-
#include "common.hpp"
28-
2929
enum EventsScope {
3030
// All events are created host-visible.
3131
AllHostVisible,
@@ -223,6 +223,10 @@ struct ur_device_handle_t_ : _ur_object {
223223
ZeCache<struct ze_global_memsize> ZeGlobalMemSize;
224224
ZeCache<ZeStruct<ze_mutable_command_list_exp_properties_t>>
225225
ZeDeviceMutableCmdListsProperties;
226+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
227+
ZeCache<ZeStruct<ze_intel_device_block_array_exp_properties_t>>
228+
ZeDeviceBlockArrayProperties;
229+
#endif // ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
226230

227231
// Map device bindless image offset to corresponding host image handle.
228232
std::unordered_map<ur_exp_image_native_handle_t, ze_image_handle_t>

source/adapters/native_cpu/device.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
366366
case UR_DEVICE_INFO_MEMORY_CLOCK_RATE:
367367
case UR_DEVICE_INFO_MEMORY_BUS_WIDTH:
368368
return UR_RESULT_ERROR_INVALID_VALUE;
369+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP:
370+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
369371
case UR_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: {
370372
// Currently for Native CPU fences are implemented using OCK
371373
// builtins, so we have different capabilities than atomic operations

source/adapters/opencl/device.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1067,7 +1067,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
10671067
case UR_DEVICE_INFO_GLOBAL_MEM_FREE:
10681068
case UR_DEVICE_INFO_MEMORY_CLOCK_RATE:
10691069
case UR_DEVICE_INFO_MEMORY_BUS_WIDTH:
1070-
case UR_DEVICE_INFO_ASYNC_BARRIER: {
1070+
case UR_DEVICE_INFO_ASYNC_BARRIER:
1071+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP: {
10711072
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
10721073
}
10731074

test/adapters/level_zero/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ if(UR_BUILD_ADAPTER_L0)
2929
target_link_libraries(test-adapter-level_zero PRIVATE
3030
LevelZeroLoader
3131
LevelZeroLoader-Headers
32+
ComputeRuntimeLevelZero-Headers
3233
)
3334

3435
target_include_directories(test-adapter-level_zero PRIVATE

0 commit comments

Comments
 (0)