Yes, I expected to compile with -t option. Will also refine the gbe_bin_generator usage information.
-----Original Message----- From: Zhigang Gong [mailto:[email protected]] Sent: Wednesday, January 07, 2015 10:40 AM To: Guo, Yejun Cc: [email protected] Subject: Re: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with offline compiler On Wed, Jan 07, 2015 at 03:25:14AM +0000, Guo, Yejun wrote: > Yes, I'm talking about test_load_program_from_bin_file. During build time, > the source kernel is built into binary "compiler_ceil.bin" with the > standalone compiler. During run time, the binary file is loaded and > executed, no compiler is needed at this time. By default, compiler_ceil.bin will be a llvm binary rather than a gen binary. Thus it still requires compiler when use it on the target system. Please also refine the gbe_bin_generator usage information, current information is incomplete: if (argc < 2) { cout << "Usage: kernel_path [-pbuild_parameter]\n[-obin_path]" << endl; return 0; } We need to add a -t option which is used to specify the gen target pci id. And if it is not provided, the gbe_bin_generator will generate llvm bitcode rather than gen binary. If we want to make this test workable on target system which doesn't have gbe compiler, we must set the -t pci_id options when invoke the gbe_bin_generator to create the compiler_ceil.bin. > > > -----Original Message----- > From: Zhigang Gong [mailto:[email protected]] > Sent: Wednesday, January 07, 2015 11:11 AM > To: Guo, Yejun > Cc: [email protected] > Subject: RE: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with > offline compiler > > > -----Original Message----- > > From: Beignet [mailto:[email protected]] On > > Behalf Of Guo, Yejun > > Sent: Wednesday, January 7, 2015 10:54 AM > > To: Zhigang Gong > > Cc: [email protected] > > Subject: Re: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with > > offline compiler > > > > Thanks for your nice comments, it would be much clear and user friendly. > > > > Could you review the third patch of this patch set? It is not > > relative to the stand alone compiler, it is about to enable rtti > > compile option, it is needed for some old stl version. > > I will review it latter. > > > > > For the profile discussion, agree that the > > CL_DEVICE_COMPILER_AVAILABLE could be true if we provide the stand > > alone compiler. Just to clarify that the current implementation is > > to report false if unable to load libgbe.so, we can add the stand > > alone compiler into consideration, anyway, it can be discussed in a > > separate thread. > > Sure, that's next step. We could discuss it after this series laned. > > > > > For the test case demo, there is a utest case shows how to use the > > binary kernel, which is prebuilt by the standalone compiler, I'll > > modify them to make it clearer. > > I just checked both binary load test cases: > test_load_program_from_bin_file > test_load_program_from_gen_bin > > None of them could work on target system without compiler. Is there any other > cases I missed? > > > > > > For the CMake option name USE_STANDALONE_GBE_COMPILER, > > STANDALONE_GBE_COMPILER_DIR, BUILD_STANDALONE_GBE_COMPILER, and > > utest disable, and the document, do not object your comments, and > > will modify accordingly. > > OK, thanks. > > > > > -----Original Message----- > > From: Beignet [mailto:[email protected]] On > > Behalf Of Zhigang Gong > > Sent: Wednesday, January 07, 2015 8:31 AM > > To: Guo, Yejun > > Cc: [email protected] > > Subject: Re: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with > > offline compiler > > > > Thanks for the patchset. > > > > I have the following comments as below: > > > > 1. It's better to use USE_STANDALONE_GBE_COMPILER rather than define a > > STATIC_GBE_COMPILER_PATH to indicate we will use that standalone > > gbe compiler. So we use USE_STANDALONE_GBE_COMPILER to control > > whether > > we will use a standalone compiler, then at configuration stage, we > > need to write a new CMake script to find the > > STANDALONE_GBE_COMPILER_DIR. > > It may search from some default path and prefer to find it from the > > environment variable GBE_BIN_GENERATER_PATH if possible. > > > > 2. If we set BUILD_STANDALONE_GBE_COMPILER, We'd better to write a > > new cmake > > target to generate such a standalone tarball includes: > > beignet/beignet.bc > > beignet/beignet.pch > > beignet/include/ocl_xxx.h > > beignet/gbe_bin_generator > > Then user just need to untar this file to a standard path, such > > as /usr/local/lib > > or /usr/lib. Then on target system, user just need to set > > USE_STANDALONE_GBE_COMPILER > > and without set any other environment variables as the cmake script will > > search that directory. If user want to put it in a customized place, then > > user need to specify GBE_BIN_GENERATER_PATH. > > > > 3. As to the CL_EMBEDDED_PROFILE profile, I know you are talking about the > > CL_DEVICE_COMPILER_AVAILABLE which must be true for full profile and > > could be false for embedded profile. But other than that, we are comply > > with full profile even on target system. And if the standalone compiler > > could work, we even can make the compiler avialable, right? We need to > > document the detail difference rather than say we support > > CL_EMBEDDED_PROFILE, > > and I also don't see you change the: > > DECL_INFO_STRING(profile, "FULL_PROFILE") > > I agree not to change that. > > > > 4. We need to disable all the unit test cases which require compiler. > > > > 5. We need to add some test cases to demostrate how to build gen > > kernel binary > > and how to load and run the gen kernel binary on target system. > > > > 6. We need a new document to specify the detail instructions of how to use > > this > > new function. > > > > Thanks, > > Zhigang Gong. > > > > On Wed, Dec 31, 2014 at 03:35:19PM +0800, Guo Yejun wrote: > > > At some platforms with old c/c++ environment, only > > > CL_EMBEDDED_PROFILE is supported, but the offline compiler > > > (gbe_bin_generater and some other files) is still needed during > > > the build. So, add a CMAKE option STATIC_GBE_COMPILER_PATH as the > > > path to the already built offline > > compiler. > > > Once this option is given, all the compiler relative code will not > > > be built any more, only libcl.so and libgebinterp.so will be built. > > > > > > The process looks like: > > > 1. build beignet with option BUILD_STATIC_GBE_COMPILER=true inside > > > mainstream c/c++ environment. The built files under the build > > > directory that we cared here are: > > > backend/src/libocl//usr/local/lib/beignet//beignet.bc > > > backend/src/libocl//usr/local/lib/beignet//beignet.pch > > > backend/src/libocl//usr/local/lib/beignet//include/* > > > backend/src/gbe_bin_generater > > > > > > 2. copy these files to /your_path_to_compiler inside old > > > environment The files under /your_path_to_compiler looks like: > > > beignet.bc beignet.pch gbe_bin_generater include > > > > > > 3. Within old environment, build with > > > STATIC_GBE_COMPILER_PATH=/your_path_to_compiler > > > libcl.so and libgbeinterp.so will be built here, libgbe.so and > > > gbe_bin_generater will not be built here. > > > > > > Signed-off-by: Guo Yejun <[email protected]> > > > --- > > > CMakeLists.txt | 3 +++ > > > backend/CMakeLists.txt | 20 +++++++++++++++++--- > > > backend/src/CMakeLists.txt | 24 +++++++++++++++++------- > > > src/CMakeLists.txt | 5 +++-- > > > utests/CMakeLists.txt | 5 +++-- > > > 5 files changed, 43 insertions(+), 14 deletions(-) > > > > > > diff --git a/CMakeLists.txt b/CMakeLists.txt index > > > 4da3561..5cb31c2 > > > 100644 > > > --- a/CMakeLists.txt > > > +++ b/CMakeLists.txt > > > @@ -76,9 +76,12 @@ set (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g > > -DGBE_DEBUG=1") > > > set (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG > > -DGBE_DEBUG=0") > > > set (CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG > > -DGBE_DEBUG=0") > > > > > > +# Do not involve llvm if the offline compiler is given IF(NOT > > > +STATIC_GBE_COMPILER_PATH) > > > # Front end stuff we need > > > #INCLUDE(CMake/FindLLVM.cmake) > > > Find_Package(LLVM 3.3) > > > +ENDIF(NOT STATIC_GBE_COMPILER_PATH) > > > > > > set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined > > ${LLVM_LDFLAGS}") > > > > > > diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt index > > > bf96baf..36b6beb 100644 > > > --- a/backend/CMakeLists.txt > > > +++ b/backend/CMakeLists.txt > > > @@ -36,14 +36,28 @@ include_directories > > (${CMAKE_CURRENT_BINARY_DIR}) > > > # Project source code > > > ############################################################## > > > add_subdirectory (src) > > > + > > > +if (STATIC_GBE_COMPILER_PATH) > > > +set(LOCAL_OCL_BITCODE_BIN > > ${STATIC_GBE_COMPILER_PATH}/beignet.bc) > > > +set(LOCAL_OCL_HEADER_DIR ${STATIC_GBE_COMPILER_PATH}/include) > > > +set(LOCAL_OCL_PCH_OBJECT > > ${STATIC_GBE_COMPILER_PATH}/beignet.pch) > > > +endif (STATIC_GBE_COMPILER_PATH) > > > + > > > set(LOCAL_OCL_BITCODE_BIN "${LOCAL_OCL_BITCODE_BIN}" > > PARENT_SCOPE) > > > set(LOCAL_OCL_HEADER_DIR "${LOCAL_OCL_HEADER_DIR}" > > PARENT_SCOPE) > > > set(LOCAL_OCL_PCH_OBJECT "${LOCAL_OCL_PCH_OBJECT}" > > PARENT_SCOPE) > > > - > > > set(LOCAL_GBE_OBJECT_DIR ${LOCAL_GBE_OBJECT_DIR} > > PARENT_SCOPE) > > > set(LOCAL_INTERP_OBJECT_DIR ${LOCAL_INTERP_OBJECT_DIR} > > PARENT_SCOPE) > > > > > > set (GBE_BIN_GENERATER > > > - env OCL_BITCODE_LIB_PATH=${LOCAL_OCL_BITCODE_BIN} > > OCL_HEADER_FILE_DIR=${LOCAL_OCL_HEADER_DIR} > > OCL_PCH_PATH=${LOCAL_OCL_PCH_OBJECT} > > LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/src > > ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater > > > - PARENT_SCOPE) > > > + env OCL_BITCODE_LIB_PATH=${LOCAL_OCL_BITCODE_BIN} > > > + OCL_HEADER_FILE_DIR=${LOCAL_OCL_HEADER_DIR} > > > + OCL_PCH_PATH=${LOCAL_OCL_PCH_OBJECT}) > > > > > > +if (STATIC_GBE_COMPILER_PATH) > > > +set (GBE_BIN_GENERATER > > > + ${GBE_BIN_GENERATER} > > ${STATIC_GBE_COMPILER_PATH}/gbe_bin_generater > > > + PARENT_SCOPE) > > > +else (STATIC_GBE_COMPILER_PATH) > > > +set (GBE_BIN_GENERATER > > > + ${GBE_BIN_GENERATER} > > LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/src > > ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater > > > + PARENT_SCOPE) > > > +endif (STATIC_GBE_COMPILER_PATH) > > > diff --git a/backend/src/CMakeLists.txt > > > b/backend/src/CMakeLists.txt index 118a745..81cf7b8 100644 > > > --- a/backend/src/CMakeLists.txt > > > +++ b/backend/src/CMakeLists.txt > > > @@ -9,15 +9,19 @@ configure_file ( > > > "GBEConfig.h" > > > ) > > > > > > +#do not involve libocl if the offline compiler is given, #since > > > +we will not build the online compiler if (NOT > > > +STATIC_GBE_COMPILER_PATH) > > > add_subdirectory(libocl) > > > +add_dependencies(beignet_bitcode libocl) endif () > > > + > > > set (LOCAL_GBE_OBJECT_DIR > > "${CMAKE_CURRENT_BINARY_DIR}/libgbe.so" > > > PARENT_SCOPE) set (LOCAL_INTERP_OBJECT_DIR > > > "${CMAKE_CURRENT_BINARY_DIR}/libgbeinterp.so" PARENT_SCOPE) set > > > (LOCAL_OCL_BITCODE_BIN "${OCL_OBJECT_DIR}/beignet.bc" > > PARENT_SCOPE) > > > set (LOCAL_OCL_HEADER_DIR "${OCL_OBJECT_DIR}/include/" > > PARENT_SCOPE) > > > set (LOCAL_OCL_PCH_OBJECT "${OCL_OBJECT_DIR}/beignet.local.pch" > > > PARENT_SCOPE) > > > > > > -add_dependencies(beignet_bitcode libocl) > > > - > > > set (GBE_SRC > > > ${ocl_blob_file} > > > sys/vector.hpp > > > @@ -130,14 +134,16 @@ set (GBE_LINK_LIBRARIES include_directories > > > (.) link_directories (${LLVM_LIBRARY_DIRS} ${DRM_LIBDIR}) > > > include_directories(${LLVM_INCLUDE_DIRS}) > > > -add_library (gbe SHARED ${GBE_SRC}) > > > > > > +#don't build libgbe (the online compiler) if the offline compiler > > > +is given if (NOT STATIC_GBE_COMPILER_PATH) add_library (gbe > > > +SHARED > > > +${GBE_SRC}) > > > target_link_libraries(gbe ${GBE_LINK_LIBRARIES}) > > > +add_dependencies(gbe beignet_bitcode) endif (NOT > > > +STATIC_GBE_COMPILER_PATH) > > > > > > add_library(gbeinterp SHARED gbe_bin_interpreter.cpp) > > > > > > -add_dependencies(gbe beignet_bitcode) > > > - > > > if (LLVM_VERSION_NODOT VERSION_EQUAL 34) > > > find_library(TERMINFO NAMES tinfo ncurses) > > > if (${TERMINFO} STREQUAL TERMINFO-NOTFOUND) @@ -150,6 +156,9 > > @@ > > > endif(LLVM_VERSION_NODOT VERSION_EQUAL 34) > > > > > > link_directories (${LLVM_LIBRARY_DIR} ${DRM_LIBDIR}) > > > > > > + > > > +#if the offline compiler is given, do not build/install it > > > +anymore if (NOT STATIC_GBE_COMPILER_PATH) > > > if (BUILD_STATIC_GBE_COMPILER STREQUAL "true") > > macro(remove_cxx_flag > > > flag) > > > string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS > > "${CMAKE_CXX_FLAGS}") > > > @@ -164,9 +173,10 @@ ADD_EXECUTABLE(gbe_bin_generater > > > gbe_bin_generater.cpp) TARGET_LINK_LIBRARIES(gbe_bin_generater > > > gbe) endif (BUILD_STATIC_GBE_COMPILER STREQUAL "true") > > > > > > - > > > install (TARGETS gbe LIBRARY DESTINATION ${BEIGNET_INSTALL_DIR}) > > > -install (TARGETS gbeinterp LIBRARY DESTINATION > > > ${BEIGNET_INSTALL_DIR}) install (FILES > > > ${OCL_OBJECT_DIR}/beignet.bc DESTINATION ${BEIGNET_INSTALL_DIR}) > > > install (FILES ${OCL_OBJECT_DIR}/beignet.pch DESTINATION > > > ${BEIGNET_INSTALL_DIR}) install (FILES ${OCL_HEADER_FILES} > > > DESTINATION > > > ${BEIGNET_INSTALL_DIR}/include) > > > +endif (NOT STATIC_GBE_COMPILER_PATH) > > > + > > > +install (TARGETS gbeinterp LIBRARY DESTINATION > > > +${BEIGNET_INSTALL_DIR}) > > > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index > > > 7182bad..a55f84d 100644 > > > --- a/src/CMakeLists.txt > > > +++ b/src/CMakeLists.txt > > > @@ -10,18 +10,19 @@ foreach (KF ${KERNEL_FILES}) > > > set (input_file ${KERNEL_PATH}/${KF}.cl) > > > set (output_file ${KERNEL_PATH}/${KF}_str.c) > > > list (APPEND KERNEL_STR_FILES ${output_file}) > > > + list (GET GBE_BIN_GENERATER -1 GBE_BIN_FILE) > > > if(GEN_PCI_ID) > > > add_custom_command( > > > OUTPUT ${output_file} > > > COMMAND rm -rf ${output_file} > > > COMMAND ${GBE_BIN_GENERATER} -s ${input_file} > > > -o${output_file} > > -t${GEN_PCI_ID} > > > - DEPENDS ${input_file} > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater) > > > + DEPENDS ${input_file} ${GBE_BIN_FILE}) > > > else(GEN_PCI_ID) > > > add_custom_command( > > > OUTPUT ${output_file} > > > COMMAND rm -rf ${output_file} > > > COMMAND ${GBE_BIN_GENERATER} -s ${input_file} > > -o${output_file} > > > - DEPENDS ${input_file} > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater) > > > + DEPENDS ${input_file} ${GBE_BIN_FILE}) > > > endif(GEN_PCI_ID) > > > endforeach (KF) > > > endmacro (MakeKernelBinStr) > > > diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index > > > 5b29c0b..9623dc1 100644 > > > --- a/utests/CMakeLists.txt > > > +++ b/utests/CMakeLists.txt > > > @@ -219,16 +219,17 @@ endif (X11_FOUND) > > > > > > SET (kernel_bin > > ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/compiler_ceil) > > > > > > +list (GET GBE_BIN_GENERATER -1 GBE_BIN_FILE) > > > if(GEN_PCI_ID) > > > ADD_CUSTOM_COMMAND( > > > OUTPUT ${kernel_bin}.bin > > > COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl > > > -o${kernel_bin}.bin -t${GEN_PCI_ID} > > > - DEPENDS > > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater > > > ${kernel_bin}.cl) > > > + DEPENDS ${GBE_BIN_FILE} ${kernel_bin}.cl) > > > else(GEN_PCI_ID) > > > ADD_CUSTOM_COMMAND( > > > OUTPUT ${kernel_bin}.bin > > > COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl > > > -o${kernel_bin}.bin > > > - DEPENDS > > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater > > > ${kernel_bin}.cl) > > > + DEPENDS ${GBE_BIN_FILE} ${kernel_bin}.cl) > > > endif(GEN_PCI_ID) > > > > > > ADD_CUSTOM_TARGET(kernel_bin.bin > > > -- > > > 1.9.1 > > > > > > _______________________________________________ > > > Beignet mailing list > > > [email protected] > > > http://lists.freedesktop.org/mailman/listinfo/beignet > > _______________________________________________ > > Beignet mailing list > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/beignet > > _______________________________________________ > > Beignet mailing list > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/beignet > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
