Skip to content
Draft
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
33 changes: 32 additions & 1 deletion unified-runtime/source/adapters/offload/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ add_ur_adapter(${TARGET_NAME}

set(UR_OFFLOAD_INSTALL_DIR "" CACHE PATH "Path to the directory containing libomptarget.so etc")
set(UR_OFFLOAD_INCLUDE_DIR "" CACHE PATH "Path to the directory containing LLVM headers")
set(UR_OFFLOAD_BUILD_FROM_SOURCE OFF)
if (UR_OFFLOAD_INSTALL_DIR STREQUAL "" OR UR_OFFLOAD_INCLUDE_DIR STREQUAL "")
set(UR_OFFLOAD_BUILD_FROM_SOURCE ON)
include(ExternalProject)
set(LLVM_PROJECT_SOURCE_DIR ${CMAKE_BINARY_DIR}/llvm-src-offload)
set(LLVM_PROJECT_TAG 32beea0605f37ea7a6429375d41b19ee78ddfe7d)
Expand Down Expand Up @@ -132,12 +134,41 @@ if (CUDA_cuda_driver_LIBRARY)
target_compile_definitions(${TARGET_NAME} PRIVATE UR_CUDA_ENABLED)
endif()

if(UR_OFFLOAD_BUILD_FROM_SOURCE)
set(UR_OFFLOAD_LLVMOFFLOAD_LIBRARY
"${UR_OFFLOAD_INSTALL_DIR}/lib/libLLVMOffload${CMAKE_SHARED_LIBRARY_SUFFIX}")
else()
find_library(UR_OFFLOAD_LLVMOFFLOAD_LIBRARY
NAMES LLVMOffload
HINTS "${UR_OFFLOAD_INSTALL_DIR}"
PATH_SUFFIXES
"${CMAKE_INSTALL_LIBDIR}"
lib
lib64
NO_DEFAULT_PATH
)
Comment on lines +137 to +149
if(NOT UR_OFFLOAD_LLVMOFFLOAD_LIBRARY)
file(GLOB UR_OFFLOAD_LLVMOFFLOAD_LIBRARY_CANDIDATES
"${UR_OFFLOAD_INSTALL_DIR}/lib*/libLLVMOffload${CMAKE_SHARED_LIBRARY_SUFFIX}"
"${UR_OFFLOAD_INSTALL_DIR}/lib*/*/libLLVMOffload${CMAKE_SHARED_LIBRARY_SUFFIX}"
)
if(UR_OFFLOAD_LLVMOFFLOAD_LIBRARY_CANDIDATES)
list(SORT UR_OFFLOAD_LLVMOFFLOAD_LIBRARY_CANDIDATES)
list(GET UR_OFFLOAD_LLVMOFFLOAD_LIBRARY_CANDIDATES 0 UR_OFFLOAD_LLVMOFFLOAD_LIBRARY)
endif()
Comment on lines +155 to +158
endif()
if(NOT UR_OFFLOAD_LLVMOFFLOAD_LIBRARY)
message(FATAL_ERROR
"Failed to find libLLVMOffload in ${UR_OFFLOAD_INSTALL_DIR}")
endif()
endif()

target_link_libraries(${TARGET_NAME} PRIVATE
${PROJECT_NAME}::headers
${PROJECT_NAME}::common
${PROJECT_NAME}::umf
ur_common
${UR_OFFLOAD_INSTALL_DIR}/lib/libLLVMOffload.so
${UR_OFFLOAD_LLVMOFFLOAD_LIBRARY}
${ADDITIONAL_LINK_LIBS}
)

Expand Down
14 changes: 10 additions & 4 deletions unified-runtime/source/adapters/offload/enqueue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include "ur2offload.hpp"

namespace {
constexpr ol_event_flags_t OL_DEFAULT_EVENT_FLAGS = 0;

ol_result_t waitOnEvents(ol_queue_handle_t Queue,
const ur_event_handle_t *UrEvents, size_t NumEvents) {
if (NumEvents) {
Expand All @@ -41,7 +43,8 @@ ol_result_t makeEvent(ur_command_t Type, ol_queue_handle_t OlQueue,
ur_queue_handle_t UrQueue, ur_event_handle_t *UrEvent) {
if (UrEvent) {
auto *Event = new ur_event_handle_t_(Type, UrQueue);
if (auto Res = olCreateEvent(OlQueue, &Event->OffloadEvent)) {
if (auto Res = olCreateEvent(OlQueue, OL_DEFAULT_EVENT_FLAGS,
&Event->OffloadEvent)) {
delete Event;
return Res;
};
Expand Down Expand Up @@ -84,7 +87,8 @@ ur_result_t doWait(ur_queue_handle_t hQueue, uint32_t numEventsInWaitList,
if (Q == TargetQueue) {
continue;
}
OL_RETURN_ON_ERR(olCreateEvent(Q, &OffloadHandles.emplace_back()));
OL_RETURN_ON_ERR(olCreateEvent(Q, OL_DEFAULT_EVENT_FLAGS,
&OffloadHandles.emplace_back()));
}
OL_RETURN_ON_ERR(olWaitEvents(TargetQueue, OffloadHandles.data(),
OffloadHandles.size()));
Expand Down Expand Up @@ -202,7 +206,8 @@ static ur_result_t urEnqueueKernelLaunch(

OL_RETURN_ON_ERR(olLaunchKernel(
Queue, hQueue->OffloadDevice, hKernel->OffloadKernel,
hKernel->Args.getStorage(), hKernel->Args.getStorageSize(), &LaunchArgs));
hKernel->Args.getStorage(), hKernel->Args.getStorageSize(), &LaunchArgs,
nullptr));

OL_RETURN_ON_ERR(makeEvent(UR_COMMAND_KERNEL_LAUNCH, Queue, hQueue, phEvent));
return UR_RESULT_SUCCESS;
Expand Down Expand Up @@ -261,7 +266,8 @@ ur_result_t doMemcpy(ur_command_t Command, ur_queue_handle_t hQueue,
olMemcpy(Queue, DestPtr, DestDevice, SrcPtr, SrcDevice, size));
if (phEvent) {
auto *Event = new ur_event_handle_t_(Command, hQueue);
if (auto Res = olCreateEvent(Queue, &Event->OffloadEvent)) {
if (auto Res = olCreateEvent(Queue, OL_DEFAULT_EVENT_FLAGS,
&Event->OffloadEvent)) {
delete Event;
return offloadResultToUR(Res);
};
Expand Down
Loading