Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/intel-llvm-mirror-base-commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
d25d6d6919de5c15e69e5b69d848b05876da23a3
542a00b45276bd9a24ba85c041b0d5535a896593
92 changes: 92 additions & 0 deletions cmake/FetchOpenCL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Finds or fetches OpenCL Headers and the ICD loader.
if(TARGET OpenCL-Headers)
# If we already ran this module (so the OpenCL-Headers target exists),
# everything is already set up, nothing to do.
return()
endif()

# Repo URLs

set(OCL_HEADERS_REPO
"https://github.com/KhronosGroup/OpenCL-Headers.git")
set(OCL_LOADER_REPO
"https://github.com/KhronosGroup/OpenCL-ICD-Loader.git")

# Repo tags/hashes

set(OCL_HEADERS_TAG 6eabe90aa7b6cff9c67800a2fe25a0cd88d8b749)
set(OCL_LOADER_TAG ddf6c70230a79cdb8fcccfd3c775b09e6820f42e)

find_package(OpenCL 3.0 QUIET)
if(OpenCL_FOUND)
# The OpenCL-Headers CMake files don't provide granular info
# on what is and isn't supposed, just the overall OpenCL version.
# The current tag we are using happens to define an extension, so just check
# if that extension exists to make sure the system install is not
# too old.
set(OPENCL_TEST_PROGRAM "#define CL_TARGET_OPENCL_VERSION 300
#include <CL/cl_ext.h>
#ifndef cl_khr_spirv_queries
#error Unsupported header version
#endif
int main(int, char*[]) { return 0; }"
)
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_INCLUDES ${OpenCL_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LIBRARIES ${OPENCL_Library})
check_cxx_source_compiles("${OPENCL_TEST_PROGRAM}" OPENCL_HEADERS_VERSION_SUPPORTED)
if(NOT OPENCL_HEADERS_VERSION_SUPPORTED)
message(WARNING "Preinstalled OpenCL-Headers are not supported, "
"use commit ${OCL_HEADERS_TAG} or later. Will fetch OpenCL.")
set(OpenCL_FOUND FALSE CACHE BOOL "" FORCE)
endif()
endif()

# Ideally we could use the FIND_PACKAGE_ARGS argument to FetchContent_Declare to avoid
# the conditonals, but that was added in CMake 3.24 and the current minimum we require is
# 3.20.

# OpenCL Headers
if(NOT OpenCL_FOUND)
FetchContent_GetProperties(ocl-headers)

if(NOT ocl-headers_POPULATED)
message(STATUS "Will fetch OpenCL headers from ${OCL_HEADERS_REPO}")
FetchContent_Declare(ocl-headers
GIT_REPOSITORY ${OCL_HEADERS_REPO}
GIT_TAG ${OCL_HEADERS_TAG}
)
FetchContent_MakeAvailable(ocl-headers)
endif()
set(OpenCL_INCLUDE_DIR ${ocl-headers_SOURCE_DIR} CACHE PATH "" FORCE)
else()
message(STATUS "Using OpenCL headers at ${OpenCL_INCLUDE_DIR}")
endif()

# OpenCL Library (ICD Loader)

set(BUILD_SHARED_LIBS ON)

if(NOT OpenCL_FOUND)

FetchContent_GetProperties(ocl-icd)
if(NOT ocl-icd_POPULATED)
message(STATUS "Will fetch OpenCL ICD Loader from ${OCL_LOADER_REPO}")
FetchContent_Declare(ocl-icd
GIT_REPOSITORY ${OCL_LOADER_REPO}
GIT_TAG ${OCL_LOADER_TAG}
)

FetchContent_MakeAvailable(ocl-icd)
endif()
set(OpenCL_LIBRARY OpenCL::OpenCL CACHE PATH "" FORCE)
else()
message(STATUS
"Using OpenCL ICD Loader at ${OpenCL_LIBRARY}")
endif()

add_library(OpenCL-Headers INTERFACE)
target_include_directories(OpenCL-Headers INTERFACE ${OpenCL_INCLUDE_DIR})
target_compile_definitions(OpenCL-Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=300 -DCL_USE_DEPRECATED_OPENCL_1_2_APIS=1)

set(OpenCL_FOUND ${OpenCL_FOUND} CACHE BOOL INTERNAL)
20 changes: 20 additions & 0 deletions source/adapters/level_zero/v2/queue_create.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ ur_result_t urQueueCreateWithNativeHandle(

bool ownNativeHandle = pProperties ? pProperties->isNativeHandleOwned : false;
ur_queue_flags_t flags = 0;
bool isNativeHandleImmediate = true;

if (pProperties) {
void *pNext = pProperties->pNext;
Expand All @@ -104,11 +105,30 @@ ur_result_t urQueueCreateWithNativeHandle(
const ur_queue_properties_t *pUrProperties =
reinterpret_cast<const ur_queue_properties_t *>(extendedProperties);
flags = pUrProperties->flags;
} else if (extendedProperties->stype ==
UR_STRUCTURE_TYPE_QUEUE_NATIVE_DESC) {
const ur_queue_native_desc_t *pUrNativeDesc =
reinterpret_cast<const ur_queue_native_desc_t *>(
extendedProperties);
if (pUrNativeDesc->pNativeData) {
// The pNativeData has value if if the native handle is an immediate
// command list.
isNativeHandleImmediate =
*(reinterpret_cast<int32_t *>((pUrNativeDesc->pNativeData))) == 1;
}
}
pNext = extendedProperties->pNext;
}
}

if (!isNativeHandleImmediate) {
UR_LOG(ERR, "urQueueCreateWithNativeHandle: "
"Native handle is not an immediate command "
"list; only immediate command lists are "
"supported.");
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
}

ze_bool_t isImmediate = false;
ZE2UR_CALL(
zeCommandListIsImmediate,
Expand Down
67 changes: 67 additions & 0 deletions source/adapters/offload/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,13 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
}
// Unimplemented features
case UR_DEVICE_INFO_PROGRAM_SET_SPECIALIZATION_CONSTANTS:
case UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS:
case UR_DEVICE_INFO_USM_POOL_SUPPORT:
case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP:
case UR_DEVICE_INFO_IMAGE_SUPPORT:
case UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT:
case UR_DEVICE_INFO_MEM_CHANNEL_SUPPORT:
case UR_DEVICE_INFO_HOST_PIPE_READ_WRITE_SUPPORT:
// TODO: Atomic queries in Offload
case UR_DEVICE_INFO_ATOMIC_64:
case UR_DEVICE_INFO_IMAGE_SRGB:
Expand All @@ -134,6 +136,71 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
}
return UR_RESULT_SUCCESS;
}
case UR_DEVICE_INFO_PARTITION_MAX_SUB_DEVICES: {
return ReturnValue(0u);
}
case UR_DEVICE_INFO_PARTITION_AFFINITY_DOMAIN: {
return ReturnValue(0u);
}
case UR_DEVICE_INFO_PARTITION_TYPE: {
if (pPropSizeRet) {
*pPropSizeRet = 0;
}
return UR_RESULT_SUCCESS;
}
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_CHAR: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_SHORT: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_INT: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_LONG: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_FLOAT: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_DOUBLE: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE: {
return ReturnValue(1u);
}
case UR_DEVICE_INFO_SINGLE_FP_CONFIG:
case UR_DEVICE_INFO_DOUBLE_FP_CONFIG: {
// This minimal set of flags will at least signal to sycl that we support
// the basic FP types.
ur_device_fp_capability_flags_t SupportedFlags =
UR_DEVICE_FP_CAPABILITY_FLAG_INF_NAN |
UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST;
return ReturnValue(SupportedFlags);
}
case UR_DEVICE_INFO_AVAILABLE: {
return ReturnValue(ur_bool_t{true});
}
case UR_DEVICE_INFO_BUILT_IN_KERNELS: {
// An empty string is returned if no built-in kernels are supported by the
// device.
return ReturnValue("");
}
default:
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
}
Expand Down
52 changes: 6 additions & 46 deletions source/adapters/opencl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

set(OPENCL_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "OpenCL adapter directory")

set(UR_OPENCL_INCLUDE_DIR "" CACHE PATH "Directory containing the OpenCL Headers")
set(UR_OPENCL_ICD_LOADER_LIBRARY "" CACHE FILEPATH "Path of the OpenCL ICD Loader library")
include(FetchOpenCL)

find_package(Threads REQUIRED)

Expand Down Expand Up @@ -53,52 +52,12 @@ set_target_properties(${TARGET_NAME} PROPERTIES
SOVERSION "${PROJECT_VERSION_MAJOR}"
)

if(UR_OPENCL_INCLUDE_DIR)
set(OpenCLIncludeDirectory ${UR_OPENCL_INCLUDE_DIR})
else()
FetchContent_Declare(OpenCL-Headers
GIT_REPOSITORY "https://github.com/KhronosGroup/OpenCL-Headers.git"
GIT_TAG 6eabe90aa7b6cff9c67800a2fe25a0cd88d8b749
)
FetchContent_MakeAvailable(OpenCL-Headers)
FetchContent_GetProperties(OpenCL-Headers
SOURCE_DIR OpenCLIncludeDirectory
)
# https://github.com/intel/llvm/issues/19648
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND LLVM_ENABLE_PEDANTIC)
target_compile_options(ur_adapter_opencl PRIVATE -std=gnu++17)
endif()

# The OpenCL target can be set manually on upstream cmake to avoid using
# find_package().
if(UR_OPENCL_ICD_LOADER_LIBRARY)
set(OpenCLICDLoaderLibrary ${UR_OPENCL_ICD_LOADER_LIBRARY})
else()
find_package(OpenCL 3.0)
if(NOT OpenCL_FOUND)
FetchContent_Declare(OpenCL-ICD-Loader
GIT_REPOSITORY "https://github.com/KhronosGroup/OpenCL-ICD-Loader.git"
GIT_TAG main
)
FetchContent_MakeAvailable(OpenCL-ICD-Loader)
endif()
set(OpenCLICDLoaderLibrary OpenCL::OpenCL)
endif()

# Make interface library use within the project.
add_library(OpenCLICDLoader INTERFACE)
target_link_libraries(OpenCLICDLoader INTERFACE "${OpenCLICDLoaderLibrary}")
target_include_directories(OpenCLICDLoader INTERFACE ${OpenCLIncludeDirectory})

message(STATUS "OpenCL Include Directory: ${OpenCLIncludeDirectory}")
message(STATUS "OpenCL ICD Loader Library: ${OpenCLICDLoaderLibrary}")

# Suppress a compiler message about undefined CL_TARGET_OPENCL_VERSION.
# Define all symbols up to OpenCL 3.0.
target_compile_definitions(ur_adapter_opencl PRIVATE
CL_TARGET_OPENCL_VERSION=300
CL_USE_DEPRECATED_OPENCL_1_2_APIS
)

target_include_directories(${TARGET_NAME} PRIVATE
${OpenCLIncludeDirectory}
"${CMAKE_CURRENT_SOURCE_DIR}/../../"
)

Expand All @@ -107,5 +66,6 @@ target_link_libraries(${TARGET_NAME} PRIVATE
${PROJECT_NAME}::common
${PROJECT_NAME}::umf
Threads::Threads
${OpenCLICDLoaderLibrary}
OpenCL-Headers
${OpenCL_LIBRARY}
)
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ endif()

if (UR_BUILD_ADAPTER_OPENCL)
target_sources(exp_command_buffer-test PRIVATE "append_native_opencl.cpp")
target_compile_definitions(exp_command_buffer-test PRIVATE CL_TARGET_OPENCL_VERSION=300)
target_link_libraries(exp_command_buffer-test PRIVATE OpenCLICDLoader)
target_link_libraries(exp_command_buffer-test PRIVATE ${OpenCL_LIBRARY} OpenCL-Headers)
endif()