From 915c46d8ae93b1980f3dde4beb8fb90d9089b8b1 Mon Sep 17 00:00:00 2001 From: Steven Johnson Date: Thu, 20 Jul 2023 13:35:03 -0700 Subject: [PATCH 1/6] Add CMake build rules for (some) of the generator jit tests Amazingly, these have been TODO for ~ever. This adds two of them; registration_test and rungen_test will be added subsequently (assuming this PR works). --- cmake/HalideGeneratorHelpers.cmake | 13 +++++++--- src/Generator.cpp | 1 + test/generator/CMakeLists.txt | 38 +++++++++++++++++++++++++----- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/cmake/HalideGeneratorHelpers.cmake b/cmake/HalideGeneratorHelpers.cmake index f62da88b1f7b..a1592533c4b8 100644 --- a/cmake/HalideGeneratorHelpers.cmake +++ b/cmake/HalideGeneratorHelpers.cmake @@ -92,9 +92,15 @@ function(add_halide_generator TARGET) # TODO: what do we need to do for PACKAGE_NAME PACKAGE_NAMESPACE EXPORT_FILE in this case? else () - add_executable(${TARGET} ${ARG_SOURCES}) + # Make a library of the Generator that can be used for (e.g.) cpp_stub. + add_library("${TARGET}_lib" OBJECT ${ARG_SOURCES}) + target_link_libraries("${TARGET}_lib" PRIVATE Halide::Halide ${ARG_LINK_LIBRARIES}) + target_include_directories("${TARGET}_lib" INTERFACE "$") + + add_executable(${TARGET} "$") + target_link_libraries("${TARGET}" PRIVATE Halide::Generator) + add_executable(${gen} ALIAS ${TARGET}) - target_link_libraries(${TARGET} PRIVATE Halide::Generator ${ARG_LINK_LIBRARIES}) if (NOT ARG_NO_DEFAULT_FLAGS AND NOT Halide_NO_DEFAULT_FLAGS) # For crosscompiling builds, the Halide headers will be included using -isystem, @@ -182,11 +188,11 @@ function(add_halide_library TARGET) # - `c_source` is selected by C_BACKEND # - `object` is selected for CMake-target-compile # - `static_library` is selected for cross-compile - # - `cpp_stub` is not available set(extra_output_names ASSEMBLY BITCODE COMPILER_LOG + CPP_STUB FEATURIZATION FUNCTION_INFO_HEADER LLVM_ASSEMBLY @@ -201,6 +207,7 @@ function(add_halide_library TARGET) set(ASSEMBLY_extension ".s") set(BITCODE_extension ".bc") set(COMPILER_LOG_extension ".halide_compiler_log") + set(CPP_STUB_extension ".stub.h") set(FEATURIZATION_extension ".featurization") set(FUNCTION_INFO_HEADER_extension ".function_info.h") set(LLVM_ASSEMBLY_extension ".ll") diff --git a/src/Generator.cpp b/src/Generator.cpp index 0ae8afbb2549..2170ef831c2f 100644 --- a/src/Generator.cpp +++ b/src/Generator.cpp @@ -1582,6 +1582,7 @@ bool GeneratorBase::emit_cpp_stub(const std::string &stub_file_path) { GeneratorParamInfo &pi = param_info(); std::ofstream file(stub_file_path); StubEmitter emit(file, generator_registered_name, generator_stub_name, pi.generator_params(), pi.inputs(), pi.outputs()); + debug(1) << "GeneratorBase::emit_cpp_stub(): generating cpp_stub at " << stub_file_path << "\n"; emit.emit(); return true; } diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index 7b525cb70ec4..890f7589e41b 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -64,6 +64,7 @@ function(_add_halide_libraries TARGET) FEATURES "${args_FEATURES}" PARAMS "${args_PARAMS}" PLUGINS "${args_PLUGINS}" + CPP_STUB cpp_stub_out FUNCTION_INFO_HEADER function_info_header_out) if (args_EXTERNS) target_link_libraries(${TARGET} INTERFACE ${args_EXTERNS}) @@ -225,12 +226,6 @@ endif () _add_halide_libraries(acquire_release) _add_halide_aot_tests(acquire_release) -# TODO: what are these? -# configure_jittest.cpp -# example_jittest.cpp -# registration_test.cpp -# rungen_test.cpp - # alias_aottest.cpp # alias_generator.cpp set(EXTRA_ALIAS_LIBS alias_with_offset_42 alias_Adams2019 alias_Li2018 alias_Mullapudi2016) @@ -606,3 +601,34 @@ _add_halide_aot_tests(variable_num_threads # Requires threading support, not yet available for wasm tests ENABLE_IF NOT ${_USING_WASM} GROUPS multithreaded) + + +## +# Create targets for the JIT tests +## + +function(_add_halide_jit_test NAME) + set(options "") + set(oneValueArgs "") + set(multiValueArgs GROUPS) + cmake_parse_arguments(args "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(TARGET "generator_jit_${NAME}") + set(SRCS "${NAME}_jittest.cpp") + + add_executable("${TARGET}" "${SRCS}") + target_link_libraries("${TARGET}" PRIVATE "${NAME}.generator_lib" Halide::Test Halide::TerminateHandler) + + # Some of the jit tests require the cpp_stub file from the Generator, so ensure it's built first: + add_dependencies("${TARGET}" "${NAME}") + + add_halide_test(${TARGET} GROUPS generator ${args_GROUPS}) + +endfunction() + +_add_halide_jit_test(configure) +_add_halide_jit_test(example GROUPS multithreaded) + +# TODO: +# registration_test.cpp +# rungen_test.cpp From a9d1af2201e9cb1655d40b4f4756a6320f77238d Mon Sep 17 00:00:00 2001 From: Steven Johnson Date: Thu, 20 Jul 2023 13:37:32 -0700 Subject: [PATCH 2/6] Update CMakeLists.txt --- test/generator/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index 890f7589e41b..abeec241e98a 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -626,7 +626,12 @@ function(_add_halide_jit_test NAME) endfunction() +# configure_jittest.cpp +# configure_generator.cpp _add_halide_jit_test(configure) + +# example_jittest.cpp +# example_generator.cpp _add_halide_jit_test(example GROUPS multithreaded) # TODO: From 472766063974242393d1ec970f48bf64cd0eba90 Mon Sep 17 00:00:00 2001 From: Steven Johnson Date: Mon, 24 Jul 2023 16:07:48 -0700 Subject: [PATCH 3/6] Update CMakeLists.txt --- test/generator/CMakeLists.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index abeec241e98a..e615bb7072d1 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -607,6 +607,16 @@ _add_halide_aot_tests(variable_num_threads # Create targets for the JIT tests ## +if (TARGET_WEBASSEMBLY AND Halide_TARGET MATCHES "wasm_threads") + message(STATUS "Skipping Generator JIT tests under wasm_webgpu") + return() +endif () + +if (TARGET_WEBASSEMBLY AND Halide_TARGET MATCHES "wasm_webgpu") + message(STATUS "Skipping Generator JIT tests under wasm_webgpu") + return() +endif () + function(_add_halide_jit_test NAME) set(options "") set(oneValueArgs "") From d3d40caf2f4a5ee01c49b768171774b58302c9f2 Mon Sep 17 00:00:00 2001 From: Steven Johnson Date: Tue, 25 Jul 2023 12:24:59 -0700 Subject: [PATCH 4/6] Fix JIT skipping --- test/generator/CMakeLists.txt | 10 ---------- test/generator/configure_jittest.cpp | 8 +++++++- test/generator/example_jittest.cpp | 9 ++++++++- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index e615bb7072d1..abeec241e98a 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -607,16 +607,6 @@ _add_halide_aot_tests(variable_num_threads # Create targets for the JIT tests ## -if (TARGET_WEBASSEMBLY AND Halide_TARGET MATCHES "wasm_threads") - message(STATUS "Skipping Generator JIT tests under wasm_webgpu") - return() -endif () - -if (TARGET_WEBASSEMBLY AND Halide_TARGET MATCHES "wasm_webgpu") - message(STATUS "Skipping Generator JIT tests under wasm_webgpu") - return() -endif () - function(_add_halide_jit_test NAME) set(options "") set(oneValueArgs "") diff --git a/test/generator/configure_jittest.cpp b/test/generator/configure_jittest.cpp index 8854fc0daeda..a7cbe07067f7 100644 --- a/test/generator/configure_jittest.cpp +++ b/test/generator/configure_jittest.cpp @@ -16,7 +16,13 @@ void verify(const Buffer &img, float compiletime_factor, float runti } int main(int argc, char **argv) { - GeneratorContext context(get_jit_target_from_environment()); + Target t = get_jit_target_from_environment(); + if (t.has_feature(Target::WebGPU) || t.has_feature(Target::WasmThreads)) { + printf("[SKIP] This test does not support WebGPU or WasmThreads.\n"); + return 0; + } + + GeneratorContext context(t); Buffer input(kSize, kSize, 3); input.for_each_element([&](int x, int y, int c) { diff --git a/test/generator/example_jittest.cpp b/test/generator/example_jittest.cpp index 7596c4c27b68..cb6698f0882d 100644 --- a/test/generator/example_jittest.cpp +++ b/test/generator/example_jittest.cpp @@ -16,7 +16,14 @@ void verify(const Buffer &img, float compiletime_factor, float runti } int main(int argc, char **argv) { - GeneratorContext context(get_jit_target_from_environment()); + Target t = get_jit_target_from_environment(); + if (t.has_feature(Target::WebGPU) || t.has_feature(Target::WasmThreads)) { + printf("[SKIP] This test does not support WebGPU or WasmThreads.\n"); + return 0; + } + + GeneratorContext context(t); + const float runtime_factor = 4.5f; // Demonstrate (and test) various ways to use a Stub to invoke a Generator with the JIT. From ca6a774ac0eba089c3ae0f1cabb45a288e82e922 Mon Sep 17 00:00:00 2001 From: Steven Johnson Date: Mon, 18 Sep 2023 15:41:21 -0700 Subject: [PATCH 5/6] Update cmake/HalideGeneratorHelpers.cmake Co-authored-by: Alex Reinking --- cmake/HalideGeneratorHelpers.cmake | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cmake/HalideGeneratorHelpers.cmake b/cmake/HalideGeneratorHelpers.cmake index a1592533c4b8..80df703cfa03 100644 --- a/cmake/HalideGeneratorHelpers.cmake +++ b/cmake/HalideGeneratorHelpers.cmake @@ -92,14 +92,15 @@ function(add_halide_generator TARGET) # TODO: what do we need to do for PACKAGE_NAME PACKAGE_NAMESPACE EXPORT_FILE in this case? else () - # Make a library of the Generator that can be used for (e.g.) cpp_stub. - add_library("${TARGET}_lib" OBJECT ${ARG_SOURCES}) - target_link_libraries("${TARGET}_lib" PRIVATE Halide::Halide ${ARG_LINK_LIBRARIES}) - target_include_directories("${TARGET}_lib" INTERFACE "$") - - add_executable(${TARGET} "$") - target_link_libraries("${TARGET}" PRIVATE Halide::Generator) + add_executable(${TARGET} ${ARG_SOURCES}) + target_link_libraries("${TARGET}" PRIVATE Halide::Generator ${ARG_LINK_LIBRARIES}) + target_include_directories("${TARGET}" PRIVATE "$") + # Make a library of the Generator that can be used for (e.g.) cpp_stub. + add_library(${TARGET}.objs INTERFACE) + target_sources(${TARGET}.objs INTERFACE "$,EXCLUDE,/GenGen.cpp.o(bj)?$>") + target_link_libraries("${TARGET}.objs" INTERFACE Halide::Halide ${ARG_LINK_LIBRARIES}) + target_include_directories("${TARGET}.objs" INTERFACE "$") add_executable(${gen} ALIAS ${TARGET}) if (NOT ARG_NO_DEFAULT_FLAGS AND NOT Halide_NO_DEFAULT_FLAGS) From 29ce2cfd3776d1491ffc7be93c19381ea0f339cc Mon Sep 17 00:00:00 2001 From: Steven Johnson Date: Mon, 18 Sep 2023 15:41:34 -0700 Subject: [PATCH 6/6] Update test/generator/CMakeLists.txt Co-authored-by: Alex Reinking --- test/generator/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index e66f5ba6ac1b..15a6caa5465d 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -633,7 +633,7 @@ function(_add_halide_jit_test NAME) set(SRCS "${NAME}_jittest.cpp") add_executable("${TARGET}" "${SRCS}") - target_link_libraries("${TARGET}" PRIVATE "${NAME}.generator_lib" Halide::Test Halide::TerminateHandler) + target_link_libraries("${TARGET}" PRIVATE "${NAME}.generator.objs" Halide::Test Halide::TerminateHandler) # Some of the jit tests require the cpp_stub file from the Generator, so ensure it's built first: add_dependencies("${TARGET}" "${NAME}")