Skip to content

Commit 1de600c

Browse files
dongkyunahn-intelromanovvladkbobrovs
committed
[SYCL][ESIMD][EMU] pi_esimd_cpu bringing up with CM library
- This PR is for a change set that invokes CM functionalities for ESIMD_CPU - initializing CM_EMU module, launching kernel, and accessing CM-managed resources like buffer, etc. CM_EMU library is built online downloading opensource CM_EMU hosted in github (https://github.com/intel/cm-cpu-emulation.git) under Linux environment Co-authored-by: Romanov Vlad <[email protected]> Co-authored-by: kbobrovs <[email protected]>
1 parent 2af0599 commit 1de600c

File tree

5 files changed

+1154
-621
lines changed

5 files changed

+1154
-621
lines changed

sycl/include/sycl/ext/intel/experimental/esimd/emu/detail/esimd_emu_functions_v1.h

+4
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,7 @@ void (*cm_fence_ptr)(void);
4444
char *(*sycl_get_surface_base_addr_ptr)(int);
4545
char *(*__cm_emu_get_slm_ptr)(void);
4646
void (*cm_slm_init_ptr)(size_t);
47+
void (*sycl_get_cm_buffer_params_ptr)(void *, char **, uint32_t *,
48+
std::mutex **);
49+
void (*sycl_get_cm_image_params_ptr)(void *, char **, uint32_t *, uint32_t *,
50+
uint32_t *, std::mutex **);

sycl/include/sycl/ext/intel/experimental/esimd/emu/detail/esimdcpu_device_interface.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// pointer table file ('esimd_emu_functions_v1.h') included in 'struct
2525
// ESIMDDeviceInterface' definition.
2626
#include <cstdint>
27+
#include <mutex>
2728

2829
__SYCL_INLINE_NAMESPACE(cl) {
2930
namespace sycl {

sycl/plugins/esimd_cpu/CMakeLists.txt

+144-7
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,120 @@
22
# PI Esimd CPU library
33
# Create Shared library for libpi_esimd_cpu.so.
44

5+
include(ExternalProject)
6+
57
include_directories("${sycl_inc_dir}")
8+
# FIXME/TODO: 'pi.h' is included in 'pi_esimd_cpu.cpp', and CL_*_INTEL
9+
# and CL_*_KHR definitions in 'pi.h' are from
10+
# ${OPENCL_INCLUDE}. Remove build dependency on OpenCL
611
include_directories(${OpenCL_INCLUDE_DIR})
7-
include_directories(${LIBCMRT_INCLUDE})
12+
13+
if (NOT MSVC)
14+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libva_build)
15+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libva_install)
16+
ExternalProject_Add(libva
17+
GIT_REPOSITORY https://github.com/intel/libva.git
18+
GIT_TAG bef69c5f380a27b6908d6daea0fc18ce50e33bb9
19+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libva_build
20+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libva_install
21+
CONFIGURE_COMMAND cd ${CMAKE_CURRENT_BINARY_DIR}/libva-prefix/src/libva && ./autogen.sh --prefix=${CMAKE_CURRENT_BINARY_DIR}/libva_install
22+
BUILD_COMMAND cd ${CMAKE_CURRENT_BINARY_DIR}/libva-prefix/src/libva && make -j
23+
INSTALL_COMMAND cd ${CMAKE_CURRENT_BINARY_DIR}/libva-prefix/src/libva && make install
24+
)
25+
ExternalProject_Add_Step(libva llvminstall
26+
COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps && ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/ ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps
27+
COMMENT "Installing libva into the LLVM binary directory"
28+
DEPENDEES install
29+
)
30+
endif()
31+
32+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build)
33+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install)
34+
35+
if (MSVC)
36+
set(LIBCM ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/libcm${CMAKE_STATIC_LIBRARY_SUFFIX})
37+
set(LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/igfxcmrt64_emu${CMAKE_STATIC_LIBRARY_SUFFIX})
38+
else()
39+
set(LIBCM ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/libcm${CMAKE_SHARED_LIBRARY_SUFFIX})
40+
set(LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/libigfxcmrt_emu${CMAKE_SHARED_LIBRARY_SUFFIX})
41+
endif()
42+
43+
if (DEFINED CM_LOCAL_SOURCE_DIR)
44+
# Using local CM directory for online building without downloading
45+
if (MSVC)
46+
ExternalProject_Add(cm-emu
47+
DOWNLOAD_COMMAND ""
48+
SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
49+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build
50+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
51+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
52+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
53+
)
54+
else()
55+
ExternalProject_Add(cm-emu
56+
DOWNLOAD_COMMAND ""
57+
SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
58+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build
59+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
60+
CMAKE_ARGS -DLIBVA_INSTALL_PATH=${CMAKE_CURRENT_BINARY_DIR}/libva_install
61+
-D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
62+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
63+
DEPENDS libva
64+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
65+
)
66+
endif()
67+
else ()
68+
if (DEFINED CM_PACKAGE_URL)
69+
# Downloading pre-built CM Package
70+
file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install)
71+
ExternalProject_Add(cm-emu
72+
URL ${CM_PACKAGE_URL}
73+
CONFIGURE_COMMAND ""
74+
BUILD_COMMAND ""
75+
UPDATE_COMMAND ""
76+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
77+
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/cm-emu-prefix/src/cm-emu/ <INSTALL_DIR>
78+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
79+
)
80+
else()
81+
# Build from CM source tree fetched from github
82+
if (MSVC)
83+
message(FATAL_ERROR "Online-building of CM_EMU library is not supported under Windows environment")
84+
else()
85+
ExternalProject_Add(cm-emu
86+
GIT_REPOSITORY https://github.com/intel/cm-cpu-emulation.git
87+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build
88+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
89+
CMAKE_ARGS -DLIBVA_INSTALL_PATH=${CMAKE_CURRENT_BINARY_DIR}/libva_install
90+
-D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
91+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
92+
DEPENDS libva
93+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
94+
)
95+
endif()
96+
endif()
97+
endif ()
98+
ExternalProject_Add_Step(cm-emu llvminstall
99+
COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps && ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/ ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps
100+
COMMENT "Installing cm-emu into the LLVM binary directory"
101+
DEPENDEES install
102+
)
103+
104+
include_directories(${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/include/igfxcmrt_emu)
105+
include_directories(${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/include/libcm/cm)
106+
107+
# Compilation flag to exclude lines in header files imported from CM
108+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__SYCL_EXPLICIT_SIMD_PLUGIN__")
109+
110+
set(CMAKE_CXX_STANDARD 17)
111+
112+
# Compilation option modification to prevent build termination caused by
113+
# warnings from CM-imported files
114+
if (MSVC)
115+
string(REPLACE "/W4" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
116+
else()
117+
string(REPLACE "-pedantic" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
118+
endif()
8119

9120
add_library(pi_esimd_cpu SHARED
10121
"${sycl_inc_dir}/CL/sycl/detail/pi.h"
@@ -31,16 +142,42 @@ else()
31142
)
32143
endif()
33144

145+
add_dependencies(pi_esimd_cpu OpenCL-Headers)
146+
add_dependencies(pi_esimd_cpu cm-emu)
34147
add_dependencies(sycl-toolchain pi_esimd_cpu)
35148

36-
add_dependencies(pi_esimd_cpu
37-
OpenCL-Headers)
38-
39-
target_link_libraries(pi_esimd_cpu PRIVATE sycl)
149+
target_link_libraries(pi_esimd_cpu PRIVATE sycl ${LIBCM} ${LIBIGFXCMRT_EMU})
40150
set_target_properties(pi_esimd_cpu PROPERTIES LINKER_LANGUAGE CXX)
41151

42152
add_common_options(pi_esimd_cpu)
43153

44154
install(TARGETS pi_esimd_cpu
45-
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT pi_esimd_cpu
46-
RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
155+
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT pi_esimd_cpu
156+
RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
157+
158+
# Copy CM Header files to $(INSTALL)/include/sycl/CL/
159+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/include/libcm/cm/
160+
DESTINATION ${SYCL_INCLUDE_DIR}/CL
161+
COMPONENT libcmrt-headers
162+
FILES_MATCHING PATTERN "*.h"
163+
)
164+
165+
# Copy '.so' files to '$(INSTALL)/lib'
166+
if (MSVC)
167+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/lib/
168+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
169+
COMPONENT libcmrt-libs
170+
FILES_MATCHING PATTERN "*.lib"
171+
)
172+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/bin/
173+
DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
174+
COMPONENT libcmrt-dlls
175+
FILES_MATCHING PATTERN "*.dll"
176+
)
177+
else()
178+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/lib/
179+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
180+
COMPONENT libcmrt-sos
181+
FILES_MATCHING PATTERN "*.so"
182+
)
183+
endif()

0 commit comments

Comments
 (0)