Skip to content

Commit 999b2b5

Browse files
committed
Add implementation
1 parent 4a9d5bc commit 999b2b5

File tree

12 files changed

+92
-7
lines changed

12 files changed

+92
-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
@@ -1087,6 +1087,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
10871087
case UR_DEVICE_INFO_GPU_SUBSLICES_PER_SLICE:
10881088
case UR_DEVICE_INFO_GPU_EU_COUNT_PER_SUBSLICE:
10891089
case UR_DEVICE_INFO_GPU_HW_THREADS_PER_EU:
1090+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP:
10901091
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
10911092

10921093
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
@@ -904,6 +904,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
904904
case UR_DEVICE_INFO_BFLOAT16:
905905
case UR_DEVICE_INFO_IL_VERSION:
906906
case UR_DEVICE_INFO_ASYNC_BARRIER:
907+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP:
907908
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
908909
case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP: {
909910
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
@@ -203,6 +204,7 @@ if(UR_BUILD_ADAPTER_L0_V2)
203204
${PROJECT_NAME}::umf
204205
LevelZeroLoader
205206
LevelZeroLoader-Headers
207+
ComputeRuntimeLevelZero-Headers
206208
)
207209

208210
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
@@ -1153,6 +1153,30 @@ ur_result_t urDeviceGetInfo(
11531153
return ReturnValue(true);
11541154
case UR_DEVICE_INFO_LOW_POWER_EVENTS_EXP:
11551155
return ReturnValue(false);
1156+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP: {
1157+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
1158+
const auto ZeDeviceBlockArrayFlags =
1159+
Device->ZeDeviceBlockArrayProperties->flags;
1160+
1161+
auto supportsFlags =
1162+
[&](ze_intel_device_block_array_exp_flags_t RequiredFlags) {
1163+
return (ZeDeviceBlockArrayFlags & RequiredFlags) == RequiredFlags;
1164+
};
1165+
1166+
ur_exp_device_2d_block_array_capability_flags_t BlockArrayCapabilities = 0;
1167+
if (supportsFlags(ZE_INTEL_DEVICE_EXP_FLAG_2D_BLOCK_LOAD)) {
1168+
BlockArrayCapabilities |=
1169+
UR_EXP_DEVICE_2D_BLOCK_ARRAY_CAPABILITY_FLAG_LOAD;
1170+
}
1171+
if (supportsFlags(ZE_INTEL_DEVICE_EXP_FLAG_2D_BLOCK_STORE)) {
1172+
BlockArrayCapabilities |=
1173+
UR_EXP_DEVICE_2D_BLOCK_ARRAY_CAPABILITY_FLAG_STORE;
1174+
}
1175+
return ReturnValue(BlockArrayCapabilities);
1176+
#else
1177+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
1178+
#endif
1179+
}
11561180
default:
11571181
logger::error("Unsupported ParamName in urGetDeviceInfo");
11581182
logger::error("ParamNameParamName={}(0x{})", ParamName,
@@ -1584,6 +1608,17 @@ ur_result_t ur_device_handle_t_::initialize(int SubSubDeviceOrdinal,
15841608
ZE_CALL_NOCHECK(zeDeviceGetProperties, (ZeDevice, &P));
15851609
};
15861610

1611+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
1612+
ZeDeviceBlockArrayProperties.Compute =
1613+
[ZeDevice](
1614+
ZeStruct<ze_intel_device_block_array_exp_properties_t> &Properties) {
1615+
ze_device_properties_t P;
1616+
P.stype = ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES;
1617+
P.pNext = &Properties;
1618+
ZE_CALL_NOCHECK(zeDeviceGetProperties, (ZeDevice, &P));
1619+
};
1620+
#endif // ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
1621+
15871622
ImmCommandListUsed = this->useImmediateCommandLists();
15881623

15891624
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,
@@ -224,6 +224,10 @@ struct ur_device_handle_t_ : _ur_object {
224224
ZeCache<struct ze_global_memsize> ZeGlobalMemSize;
225225
ZeCache<ZeStruct<ze_mutable_command_list_exp_properties_t>>
226226
ZeDeviceMutableCmdListsProperties;
227+
#ifdef ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
228+
ZeCache<ZeStruct<ze_intel_device_block_array_exp_properties_t>>
229+
ZeDeviceBlockArrayProperties;
230+
#endif // ZE_INTEL_DEVICE_BLOCK_ARRAY_EXP_NAME
227231

228232
// Map device bindless image offset to corresponding host image handle.
229233
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
@@ -1093,7 +1093,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
10931093
case UR_DEVICE_INFO_GLOBAL_MEM_FREE:
10941094
case UR_DEVICE_INFO_MEMORY_CLOCK_RATE:
10951095
case UR_DEVICE_INFO_MEMORY_BUS_WIDTH:
1096-
case UR_DEVICE_INFO_ASYNC_BARRIER: {
1096+
case UR_DEVICE_INFO_ASYNC_BARRIER:
1097+
case UR_DEVICE_INFO_2D_BLOCK_ARRAY_CAPABILITIES_EXP: {
10971098
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
10981099
}
10991100

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)