Skip to content

Commit bf7eb4c

Browse files
dongkyunahn-intelromanovvladkbobrovs
authored
[SYCL][ESIMD][EMU] pi_esimd_cpu bringing up with CM library (#4011)
* [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 f57091d commit bf7eb4c

File tree

7 files changed

+1154
-619
lines changed

7 files changed

+1154
-619
lines changed

sycl/CMakeLists.txt

+13-1
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,6 @@ set( SYCL_TOOLCHAIN_DEPLOY_COMPONENTS
259259
sycl
260260
pi_opencl
261261
pi_level_zero
262-
pi_esimd_cpu
263262
libsycldevice
264263
${XPTIFW_LIBS}
265264
)
@@ -292,6 +291,19 @@ if(SYCL_BUILD_PI_ROCM)
292291
list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS libspirv-builtins pi_rocm)
293292
endif()
294293

294+
# TODO : Remove 'if (NOT MSVC)' when CM_EMU supports Windows
295+
# environment
296+
if (NOT MSVC)
297+
if (SYCL_BUILD_PI_ESIMD_CPU)
298+
list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS pi_esimd_cpu libcmrt-headers)
299+
if (MSVC)
300+
list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS libcmrt-libs libcmrt-dlls)
301+
else()
302+
list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS libcmrt-sos)
303+
endif()
304+
endif()
305+
endif()
306+
295307
# Use it as fake dependency in order to force another command(s) to execute.
296308
add_custom_command(OUTPUT __force_it
297309
COMMAND "${CMAKE_COMMAND}" -E echo

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/CMakeLists.txt

+6-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ endif()
1515
add_subdirectory(opencl)
1616
add_subdirectory(level_zero)
1717

18-
if (SYCL_BUILD_PI_ESIMD_CPU)
19-
add_subdirectory(esimd_cpu)
18+
# TODO : Remove 'if (NOT MSVC)' when CM_EMU supports Windows
19+
# environment
20+
if (NOT MSVC)
21+
if (SYCL_BUILD_PI_ESIMD_CPU)
22+
add_subdirectory(esimd_cpu)
23+
endif()
2024
endif()

sycl/plugins/esimd_cpu/CMakeLists.txt

+114-7
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,90 @@
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+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build)
14+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install)
15+
16+
if (MSVC)
17+
set(LIBCM ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/libcm${CMAKE_STATIC_LIBRARY_SUFFIX})
18+
set(LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/igfxcmrt64_emu${CMAKE_STATIC_LIBRARY_SUFFIX})
19+
else()
20+
set(LIBCM ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/libcm${CMAKE_SHARED_LIBRARY_SUFFIX})
21+
set(LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/lib/libigfxcmrt_emu${CMAKE_SHARED_LIBRARY_SUFFIX})
22+
endif()
23+
24+
if (DEFINED CM_LOCAL_SOURCE_DIR)
25+
# Using local CM directory for online building without downloading
26+
if (MSVC)
27+
ExternalProject_Add(cm-emu
28+
DOWNLOAD_COMMAND ""
29+
SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
30+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build
31+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
32+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
33+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
34+
)
35+
else()
36+
ExternalProject_Add(cm-emu
37+
DOWNLOAD_COMMAND ""
38+
SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
39+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_build
40+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
41+
CMAKE_ARGS -DLIBVA_INSTALL_PATH=/usr
42+
-D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
43+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
44+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
45+
)
46+
endif()
47+
else ()
48+
# Downloading pre-built CM Package
49+
if (NOT DEFINED CM_PACKAGE_URL)
50+
if (MSVC)
51+
message(FATAL_ERROR "ESIMD_CPU is not supported under Windows environment yet")
52+
else()
53+
# FIXME/TODO : Use 'generic' package instead of 'u18.04'
54+
set (CM_PACKAGE_URL "https://github.com/intel/cm-cpu-emulation/releases/download/v2021-07-21/intel-cmemu-1.0.1.u18.04-release.x86_64.tar.xz")
55+
endif()
56+
endif()
57+
file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install)
58+
ExternalProject_Add(cm-emu
59+
URL ${CM_PACKAGE_URL}
60+
CONFIGURE_COMMAND ""
61+
BUILD_COMMAND ""
62+
UPDATE_COMMAND ""
63+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
64+
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/cm-emu-prefix/src/cm-emu/ <INSTALL_DIR>
65+
BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
66+
)
67+
endif ()
68+
ExternalProject_Add_Step(cm-emu llvminstall
69+
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
70+
COMMENT "Installing cm-emu into the LLVM binary directory"
71+
DEPENDEES install
72+
)
73+
74+
include_directories(${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/include/igfxcmrt_emu)
75+
include_directories(${LLVM_BINARY_DIR}/pi_esimd_cpu_deps/include/libcm/cm)
76+
77+
# Compilation flag to exclude lines in header files imported from CM
78+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__SYCL_EXPLICIT_SIMD_PLUGIN__")
79+
80+
set(CMAKE_CXX_STANDARD 17)
81+
82+
# Compilation option modification to prevent build termination caused by
83+
# warnings from CM-imported files
84+
if (MSVC)
85+
string(REPLACE "/W4" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
86+
else()
87+
string(REPLACE "-pedantic" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
88+
endif()
889

990
add_library(pi_esimd_cpu SHARED
1091
"${sycl_inc_dir}/CL/sycl/detail/pi.h"
@@ -31,16 +112,42 @@ else()
31112
)
32113
endif()
33114

115+
add_dependencies(pi_esimd_cpu OpenCL-Headers)
116+
add_dependencies(pi_esimd_cpu cm-emu)
34117
add_dependencies(sycl-toolchain pi_esimd_cpu)
35118

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

42122
add_common_options(pi_esimd_cpu)
43123

44124
install(TARGETS pi_esimd_cpu
45-
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT pi_esimd_cpu
46-
RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
125+
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT pi_esimd_cpu
126+
RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
127+
128+
# Copy CM Header files to $(INSTALL)/include/sycl/CL/
129+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/include/libcm/cm/
130+
DESTINATION ${SYCL_INCLUDE_DIR}/CL
131+
COMPONENT libcmrt-headers
132+
FILES_MATCHING PATTERN "*.h"
133+
)
134+
135+
# Copy '.so' files to '$(INSTALL)/lib'
136+
if (MSVC)
137+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/lib/
138+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
139+
COMPONENT libcmrt-libs
140+
FILES_MATCHING PATTERN "*.lib"
141+
)
142+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/bin/
143+
DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
144+
COMPONENT libcmrt-dlls
145+
FILES_MATCHING PATTERN "*.dll"
146+
)
147+
else()
148+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install/lib/
149+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
150+
COMPONENT libcmrt-sos
151+
FILES_MATCHING PATTERN "*.so"
152+
)
153+
endif()

0 commit comments

Comments
 (0)