From 7b0328c7c8c4ce57e1e6135c4686d8fd356db5b7 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 20 Jun 2022 15:56:59 +0300 Subject: [PATCH 1/6] [NFC] Sort tests in `tests()` invocations alphabetically --- test/correctness/CMakeLists.txt | 7 +++---- test/error/CMakeLists.txt | 8 ++++---- test/failing_with_issue/CMakeLists.txt | 2 +- test/performance/CMakeLists.txt | 4 ++-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/test/correctness/CMakeLists.txt b/test/correctness/CMakeLists.txt index a19b1728656e..20fc10e217fa 100644 --- a/test/correctness/CMakeLists.txt +++ b/test/correctness/CMakeLists.txt @@ -19,8 +19,8 @@ tests(GROUPS correctness bitwise_ops.cpp bool_compute_root_vectorize.cpp bound.cpp - bound_storage.cpp bound_small_allocations.cpp + bound_storage.cpp boundary_conditions.cpp bounds.cpp bounds_inference.cpp @@ -85,8 +85,8 @@ tests(GROUPS correctness div_by_zero.cpp dynamic_allocation_in_gpu_kernel.cpp dynamic_reduction_bounds.cpp - embed_bitcode.cpp early_out.cpp + embed_bitcode.cpp erf.cpp exception.cpp explicit_inline_reductions.cpp @@ -245,9 +245,9 @@ tests(GROUPS correctness parallel_gpu_nested.cpp parallel_nested.cpp parallel_nested_1.cpp - parallel_scatter.cpp parallel_reductions.cpp parallel_rvar.cpp + parallel_scatter.cpp param.cpp param_map.cpp parameter_constraints.cpp @@ -406,4 +406,3 @@ set_target_properties(correctness_async correctness_sliding_window correctness_storage_folding PROPERTIES ENABLE_EXPORTS TRUE) - diff --git a/test/error/CMakeLists.txt b/test/error/CMakeLists.txt index c0959e92bcf2..1ee8d83595a7 100644 --- a/test/error/CMakeLists.txt +++ b/test/error/CMakeLists.txt @@ -9,8 +9,8 @@ tests(GROUPS error auto_schedule_no_parallel.cpp auto_schedule_no_reorder.cpp autodiff_unbounded.cpp - bad_bound_storage.cpp bad_bound.cpp + bad_bound_storage.cpp bad_compute_at.cpp bad_compute_with.cpp bad_compute_with_invalid_specialization.cpp @@ -55,16 +55,16 @@ tests(GROUPS error func_tuple_update_types_mismatch.cpp implicit_args.cpp impossible_constraints.cpp - init_def_should_be_all_vars.cpp incomplete_target.cpp + init_def_should_be_all_vars.cpp inspect_loop_level.cpp lerp_float_weight_out_of_range.cpp lerp_mismatch.cpp lerp_signed_weight.cpp memoize_different_compute_store.cpp memoize_redefine_eviction_key.cpp - metal_vector_too_large.cpp metal_threads_too_large.cpp + metal_vector_too_large.cpp missing_args.cpp no_default_device.cpp nonexistent_update_stage.cpp @@ -98,11 +98,11 @@ tests(GROUPS error undefined_pipeline_realize.cpp undefined_rdom_dimension.cpp unknown_target.cpp + vector_tile.cpp vectorize_dynamic.cpp vectorize_too_little.cpp vectorize_too_much.cpp vectorized_extern.cpp - vector_tile.cpp wrap_custom_after_shared.cpp wrap_frozen.cpp wrapper_never_used.cpp diff --git a/test/failing_with_issue/CMakeLists.txt b/test/failing_with_issue/CMakeLists.txt index 9ce6e26082ce..fa015e4d9e94 100644 --- a/test/failing_with_issue/CMakeLists.txt +++ b/test/failing_with_issue/CMakeLists.txt @@ -4,4 +4,4 @@ tests(GROUPS failing_with_issue 3293_storage_folding_async.cpp 3357_vectorize_pred.cpp 4283_store_at_gpu.cpp - ) \ No newline at end of file + ) diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index c317326fbe40..a6fc94b5da51 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -1,6 +1,5 @@ tests(GROUPS performance SOURCES - tiled_matmul.cpp async_gpu.cpp block_transpose.cpp boundary_conditions.cpp @@ -25,9 +24,10 @@ tests(GROUPS performance realize_overhead.cpp rfactor.cpp rgb_interleaved.cpp - stack_vs_heap.cpp sort.cpp + stack_vs_heap.cpp thread_safe_jit.cpp + tiled_matmul.cpp vectorize.cpp wrap.cpp ) From d3c34472a75d3badf0ece9644da4c1a62509ddc5 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 20 Jun 2022 16:23:27 +0300 Subject: [PATCH 2/6] [CMake] Add all tests that call `halide_spawn_thread()` into `multithreaded` group --- src/autoschedulers/adams2019/CMakeLists.txt | 2 +- src/autoschedulers/li2018/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 + test/auto_schedule/CMakeLists.txt | 8 ++- test/correctness/CMakeLists.txt | 80 +++++++++++---------- test/generator/CMakeLists.txt | 40 +++++++---- test/performance/CMakeLists.txt | 24 ++++--- tutorial/CMakeLists.txt | 20 +++--- 8 files changed, 101 insertions(+), 77 deletions(-) diff --git a/src/autoschedulers/adams2019/CMakeLists.txt b/src/autoschedulers/adams2019/CMakeLists.txt index db3d51343df9..a2df8ed6251d 100644 --- a/src/autoschedulers/adams2019/CMakeLists.txt +++ b/src/autoschedulers/adams2019/CMakeLists.txt @@ -117,7 +117,7 @@ if (BUILD_SHARED_LIBS) COMMAND test_apps_autoscheduler $) set_tests_properties(test_apps_autoscheduler PROPERTIES - LABELS Adams2019 + LABELS "Adams2019 multithreaded" ENVIRONMENT "LD_LIBRARY_PATH=$:$ENV{LD_LIBRARY_PATH};HL_TARGET=${Halide_TARGET}") endif () diff --git a/src/autoschedulers/li2018/CMakeLists.txt b/src/autoschedulers/li2018/CMakeLists.txt index 809689012b35..faa98e6cbca1 100644 --- a/src/autoschedulers/li2018/CMakeLists.txt +++ b/src/autoschedulers/li2018/CMakeLists.txt @@ -19,7 +19,7 @@ target_link_libraries(demo_gradient_autoscheduler PRIVATE demo_gradient Halide:: add_test(NAME demo_gradient_autoscheduler COMMAND demo_gradient_autoscheduler --benchmarks=all --benchmark_min_time=1 --estimate_all) -set_tests_properties(demo_gradient_autoscheduler PROPERTIES LABELS Li2018) +set_tests_properties(demo_gradient_autoscheduler PROPERTIES LABELS "Li2018 multithreaded") ## diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c5147af5adc7..4130f8fddaf3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,3 +38,5 @@ option(WITH_TEST_GENERATOR "Build generator tests" ON) if (WITH_TEST_GENERATOR) add_subdirectory(generator) endif () + +# FIXME: failing_with_issue is dead code :) diff --git a/test/auto_schedule/CMakeLists.txt b/test/auto_schedule/CMakeLists.txt index 668175d51ab5..e4dc2b8e671b 100644 --- a/test/auto_schedule/CMakeLists.txt +++ b/test/auto_schedule/CMakeLists.txt @@ -1,9 +1,14 @@ if (TARGET Halide::Mullapudi2016) tests(GROUPS auto_schedule + SOURCES + extern.cpp + param.cpp + ARGS $) + + tests(GROUPS auto_schedule multithreaded SOURCES cost_function.cpp data_dependent.cpp - extern.cpp fibonacci.cpp histogram.cpp large_window.cpp @@ -11,7 +16,6 @@ if (TARGET Halide::Mullapudi2016) max_filter.cpp multi_output.cpp overlap.cpp - param.cpp reorder.cpp small_pure_update.cpp tile_vs_inline.cpp diff --git a/test/correctness/CMakeLists.txt b/test/correctness/CMakeLists.txt index 20fc10e217fa..c7195fb92483 100644 --- a/test/correctness/CMakeLists.txt +++ b/test/correctness/CMakeLists.txt @@ -7,12 +7,7 @@ tests(GROUPS correctness SOURCES align_bounds.cpp argmax.cpp - assertion_failure_in_parallel_for.cpp - async.cpp - async_copy_chain.cpp async_device_copy.cpp - atomic_tuples.cpp - atomics.cpp autodiff.cpp bad_likely.cpp bit_counting.cpp @@ -51,8 +46,6 @@ tests(GROUPS correctness compute_at_reordered_update_stage.cpp compute_at_split_rvar.cpp compute_inside_guard.cpp - compute_outermost.cpp - compute_with.cpp compute_with_in.cpp compute_with_inlined.cpp computed_index.cpp @@ -60,7 +53,6 @@ tests(GROUPS correctness constant_expr.cpp constant_type.cpp constraints.cpp - convolution.cpp convolution_multiple_kernels.cpp cross_compilation.cpp cse_nan.cpp @@ -92,14 +84,12 @@ tests(GROUPS correctness explicit_inline_reductions.cpp extern_bounds_inference.cpp extern_consumer.cpp - extern_consumer_tiled.cpp extern_error.cpp extern_output_expansion.cpp extern_partial.cpp extern_producer.cpp extern_reorder_storage.cpp extern_sort.cpp - extern_stage.cpp extern_stage_on_device.cpp external_code.cpp failed_unroll.cpp @@ -113,10 +103,8 @@ tests(GROUPS correctness float16_t_neon_op_check.cpp for_each_element.cpp force_onto_stack.cpp - func_clone.cpp func_lifetime.cpp func_lifetime_2.cpp - func_wrapper.cpp fuse.cpp fuse_gpu_threads.cpp fused_where_inner_extent_is_zero.cpp @@ -171,7 +159,6 @@ tests(GROUPS correctness host_alignment.cpp image_io.cpp image_of_lists.cpp - image_wrapper.cpp implicit_args.cpp implicit_args_tests.cpp in_place.cpp @@ -185,7 +172,6 @@ tests(GROUPS correctness interleave.cpp interleave_rgb.cpp interleave_x.cpp - interpreter.cpp interval.cpp intrinsics.cpp introspection.cpp @@ -197,7 +183,6 @@ tests(GROUPS correctness lazy_convolution.cpp leak_device_memory.cpp left_shift_negative.cpp - legal_race_condition.cpp lerp.cpp let_in_rdom_bound.cpp likely.cpp @@ -206,7 +191,6 @@ tests(GROUPS correctness loop_invariant_extern_calls.cpp loop_level_generator_param.cpp lossless_cast.cpp - lots_of_dimensions.cpp lots_of_loop_invariants.cpp make_struct.cpp many_dimensions.cpp @@ -214,40 +198,25 @@ tests(GROUPS correctness many_updates.cpp math.cpp median3x3.cpp - memoize.cpp memoize_cloned.cpp min_extent.cpp mod.cpp mul_div_mod.cpp multi_output_pipeline_with_bad_sizes.cpp - multi_pass_reduction.cpp multi_splits_with_diff_tail_strategies.cpp multi_way_select.cpp multipass_constraints.cpp multiple_outputs.cpp - multiple_outputs_extern.cpp - multiple_scatter.cpp mux.cpp - named_updates.cpp - nested_shiftinwards.cpp nested_tail_strategies.cpp newtons_method.cpp non_nesting_extern_bounds_query.cpp non_vector_aligned_embeded_buffer.cpp obscure_image_references.cpp - oddly_sized_output.cpp out_constraint.cpp out_of_memory.cpp output_larger_than_two_gigs.cpp - parallel.cpp - parallel_alloc.cpp - parallel_fork.cpp parallel_gpu_nested.cpp - parallel_nested.cpp - parallel_nested_1.cpp - parallel_reductions.cpp - parallel_rvar.cpp - parallel_scatter.cpp param.cpp param_map.cpp parameter_constraints.cpp @@ -267,19 +236,16 @@ tests(GROUPS correctness pseudostack_shares_slots.cpp python_extension_gen.cpp pytorch.cpp - random.cpp realize_larger_than_two_gigs.cpp realize_over_shifted_domain.cpp reduction_chain.cpp reduction_non_rectangular.cpp reduction_schedule.cpp register_shuffle.cpp - reorder_rvars.cpp reorder_storage.cpp require.cpp reschedule.cpp reuse_stack_alloc.cpp - rfactor.cpp round.cpp saturating_casts.cpp scatter.cpp @@ -312,7 +278,6 @@ tests(GROUPS correctness stmt_to_html.cpp storage_folding.cpp store_in.cpp - stream_compaction.cpp strict_float.cpp strict_float_bounds.cpp strided_load.cpp @@ -325,20 +290,17 @@ tests(GROUPS correctness tracing_stack.cpp transitive_bounds.cpp trim_no_ops.cpp - truncated_pyramid.cpp tuple_partial_update.cpp tuple_reduction.cpp tuple_select.cpp tuple_undef.cpp tuple_update_ops.cpp - tuple_vector_reduce.cpp two_vector_args.cpp typed_func.cpp undef.cpp uninitialized_read.cpp unique_func_image.cpp unroll_dynamic_loop.cpp - unroll_huge_mux.cpp unrolled_reduction.cpp unsafe_dedup_lets.cpp unsafe_promises.cpp @@ -363,6 +325,48 @@ tests(GROUPS correctness widening_reduction.cpp ) +tests(GROUPS correctness multithreaded + SOURCES + assertion_failure_in_parallel_for.cpp + async.cpp + async_copy_chain.cpp + atomic_tuples.cpp + atomics.cpp + compute_outermost.cpp + compute_with.cpp + convolution.cpp + extern_consumer_tiled.cpp + extern_stage.cpp + func_clone.cpp + func_wrapper.cpp + image_wrapper.cpp + interpreter.cpp + legal_race_condition.cpp + lots_of_dimensions.cpp + memoize.cpp + multi_pass_reduction.cpp + multiple_outputs_extern.cpp + multiple_scatter.cpp + named_updates.cpp + nested_shiftinwards.cpp + oddly_sized_output.cpp + parallel.cpp + parallel_alloc.cpp + parallel_fork.cpp + parallel_nested.cpp + parallel_nested_1.cpp + parallel_reductions.cpp + parallel_rvar.cpp + parallel_scatter.cpp + random.cpp + reorder_rvars.cpp + rfactor.cpp + stream_compaction.cpp + truncated_pyramid.cpp + tuple_vector_reduce.cpp + unroll_huge_mux.cpp + ) + # Make sure the test that needs image_io has it target_link_libraries(correctness_image_io PRIVATE Halide::ImageIO) diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index dad9be40457a..89f01b1a2701 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -5,7 +5,7 @@ function(halide_define_aot_test NAME) set(options OMIT_DEFAULT_GENERATOR) set(oneValueArgs FUNCTION_NAME) - set(multiValueArgs GEN_DEPS EXTRA_LIBS ENABLE_IF FEATURES PARAMS GEN_TARGET) + set(multiValueArgs GEN_DEPS EXTRA_LIBS ENABLE_IF FEATURES PARAMS GEN_TARGET GROUPS) cmake_parse_arguments(args "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (args_ENABLE_IF AND NOT (${args_ENABLE_IF})) @@ -37,7 +37,7 @@ function(halide_define_aot_test NAME) "${Halide_SOURCE_DIR}/tools" "${CMAKE_CURRENT_BINARY_DIR}") - add_wasm_halide_test("${TARGET}" GROUPS generator) + add_wasm_halide_test("${TARGET}" GROUPS generator "${args_GROUPS}") else () add_executable("${TARGET}" "${NAME}_aottest.cpp") target_include_directories("${TARGET}" PRIVATE @@ -60,7 +60,7 @@ function(halide_define_aot_test NAME) if ("${Halide_TARGET}" MATCHES "cuda") target_compile_definitions("${TARGET}" PRIVATE TEST_CUDA) endif () - add_halide_test("${TARGET}" GROUPS generator) + add_halide_test("${TARGET}" GROUPS generator "${args_GROUPS}") endif () endfunction() @@ -157,11 +157,13 @@ halide_define_aot_test(argvcall) # async_parallel_generator.cpp halide_define_aot_test(async_parallel # Requires threading support, not yet available for wasm tests - ENABLE_IF NOT ${USING_WASM}) + ENABLE_IF NOT ${USING_WASM} + GROUPS multithreaded) # autograd_aottest.cpp # autograd_generator.cpp -halide_define_aot_test(autograd ENABLE_IF TARGET Halide::Mullapudi2016 AND NOT ${USING_WASM}) +halide_define_aot_test(autograd ENABLE_IF TARGET Halide::Mullapudi2016 AND NOT ${USING_WASM} + GROUPS multithreaded) if (TARGET generator_aot_autograd) add_halide_library(autograd_grad GRADIENT_DESCENT @@ -249,11 +251,13 @@ halide_define_aot_test(error_codes) # example_aottest.cpp # example_generator.cpp -halide_define_aot_test(example) +halide_define_aot_test(example + GROUPS multithreaded) # extern_output_aottest.cpp # extern_output_generator.cpp -halide_define_aot_test(extern_output) +halide_define_aot_test(extern_output + GROUPS multithreaded) # external_code_aottest.cpp # external_code_generator.cpp @@ -304,14 +308,16 @@ halide_define_aot_test(image_from_array) # mandelbrot_aottest.cpp # mandelbrot_generator.cpp -halide_define_aot_test(mandelbrot) +halide_define_aot_test(mandelbrot + GROUPS multithreaded) # memory_profiler_mandelbrot_aottest.cpp # memory_profiler_mandelbrot_generator.cpp halide_define_aot_test(memory_profiler_mandelbrot # Requires profiler support (which requires threading), not yet available for wasm tests ENABLE_IF NOT ${USING_WASM} - FEATURES profile) + FEATURES profile + GROUPS multithreaded) # metadata_tester_aottest.cpp # metadata_tester_generator.cpp @@ -358,7 +364,8 @@ add_halide_library(metadata_tester_ucon # msan_aottest.cpp # msan_generator.cpp -halide_define_aot_test(msan FEATURES msan) +halide_define_aot_test(msan FEATURES msan + GROUPS multithreaded) # (Doesn't build/link properly on windows / under wasm) if (NOT Halide_TARGET MATCHES "windows" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT Halide_TARGET MATCHES "wasm") @@ -402,7 +409,8 @@ halide_define_aot_test(output_assign) # pyramid_aottest.cpp # pyramid_generator.cpp -halide_define_aot_test(pyramid PARAMS levels=10) +halide_define_aot_test(pyramid PARAMS levels=10 + GROUPS multithreaded) # rdom_input_aottest.cpp # rdom_input_generator.cpp @@ -435,15 +443,17 @@ halide_define_aot_test(tiled_blur EXTRA_LIBS blur2x2) # user_context_aottest.cpp # user_context_generator.cpp -halide_define_aot_test(user_context FEATURES user_context) +halide_define_aot_test(user_context FEATURES user_context + GROUPS multithreaded) # user_context_insanity_aottest.cpp # user_context_insanity_generator.cpp -halide_define_aot_test(user_context_insanity FEATURES user_context) +halide_define_aot_test(user_context_insanity FEATURES user_context + GROUPS multithreaded) # variable_num_threads_aottest.cpp # variable_num_threads_generator.cpp halide_define_aot_test(variable_num_threads # Requires threading support, not yet available for wasm tests - ENABLE_IF NOT ${USING_WASM}) - + ENABLE_IF NOT ${USING_WASM} + GROUPS multithreaded) diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index a6fc94b5da51..875a7a45595a 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -5,33 +5,37 @@ tests(GROUPS performance boundary_conditions.cpp clamped_vector_load.cpp const_division.cpp - fan_in.cpp fast_inverse.cpp fast_pow.cpp fast_sine_cosine.cpp gpu_half_throughput.cpp - inner_loop_parallel.cpp jit_stress.cpp lots_of_inputs.cpp - lots_of_small_allocations.cpp - matrix_multiplication.cpp memcpy.cpp - memory_profiler.cpp nested_vectorization_gemm.cpp packed_planar_fusion.cpp - parallel_performance.cpp - profiler.cpp realize_overhead.cpp - rfactor.cpp rgb_interleaved.cpp - sort.cpp - stack_vs_heap.cpp thread_safe_jit.cpp tiled_matmul.cpp vectorize.cpp wrap.cpp ) +tests(GROUPS performance multithreaded + SOURCES + fan_in.cpp + inner_loop_parallel.cpp + lots_of_small_allocations.cpp + matrix_multiplication.cpp + memory_profiler.cpp + parallel_performance.cpp + profiler.cpp + rfactor.cpp + sort.cpp + stack_vs_heap.cpp + ) + # Make sure that performance tests do not run in parallel with other tests, # since doing so might make them flaky. set_tests_properties(${TEST_NAMES} PROPERTIES RUN_SERIAL TRUE) diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 7d3226d957bb..5964e8ef3cf3 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -4,7 +4,7 @@ configure_file(images/rgb.png images/rgb.png COPYONLY) function(add_tutorial source_file) set(options WITH_IMAGE_IO WITH_OPENMP) set(oneValueArgs) - set(multiValueArgs SRCS) + set(multiValueArgs SRCS GROUPS) cmake_parse_arguments(args "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) get_filename_component(name "${source_file}" NAME_WE) @@ -17,7 +17,7 @@ function(add_tutorial source_file) set_tests_properties(tutorial_${name} PROPERTIES ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET}" - LABELS tutorial) + LABELS "tutorial ${args_GROUPS}") if (args_WITH_IMAGE_IO) target_link_libraries(${name} PRIVATE Halide::ImageIO) @@ -40,12 +40,12 @@ endfunction() add_tutorial(lesson_01_basics.cpp) add_tutorial(lesson_02_input_image.cpp WITH_IMAGE_IO) add_tutorial(lesson_03_debugging_1.cpp) -add_tutorial(lesson_04_debugging_2.cpp) -add_tutorial(lesson_05_scheduling_1.cpp) +add_tutorial(lesson_04_debugging_2.cpp GROUPS multithreaded) +add_tutorial(lesson_05_scheduling_1.cpp GROUPS multithreaded) add_tutorial(lesson_06_realizing_over_shifted_domains.cpp) add_tutorial(lesson_07_multi_stage_pipelines.cpp WITH_IMAGE_IO) -add_tutorial(lesson_08_scheduling_2.cpp WITH_IMAGE_IO WITH_OPENMP) -add_tutorial(lesson_09_update_definitions.cpp WITH_IMAGE_IO WITH_OPENMP) +add_tutorial(lesson_08_scheduling_2.cpp WITH_IMAGE_IO WITH_OPENMP GROUPS multithreaded) +add_tutorial(lesson_09_update_definitions.cpp WITH_IMAGE_IO WITH_OPENMP GROUPS multithreaded) if (TARGET_NVPTX) if (TARGET_WEBASSEMBLY AND Halide_TARGET MATCHES "wasm") @@ -85,12 +85,12 @@ if (TARGET_NVPTX) target_include_directories(lesson_10_aot_compilation_run PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") add_test(NAME tutorial_lesson_10_aot_compilation_run COMMAND lesson_10_aot_compilation_run) - set_tests_properties(tutorial_lesson_10_aot_compilation_run PROPERTIES LABELS tutorial) + set_tests_properties(tutorial_lesson_10_aot_compilation_run PROPERTIES LABELS "tutorial multithreaded") endif () endif () add_tutorial(lesson_11_cross_compilation.cpp) -add_tutorial(lesson_12_using_the_gpu.cpp WITH_IMAGE_IO) +add_tutorial(lesson_12_using_the_gpu.cpp WITH_IMAGE_IO GROUPS multithreaded) add_tutorial(lesson_13_tuples.cpp) add_tutorial(lesson_14_types.cpp) @@ -183,7 +183,7 @@ endif () # Lessons 17 - 20 add_tutorial(lesson_17_predicated_rdom.cpp) -add_tutorial(lesson_18_parallel_associative_reductions.cpp) +add_tutorial(lesson_18_parallel_associative_reductions.cpp GROUPS multithreaded) add_tutorial(lesson_19_wrapper_funcs.cpp) add_tutorial(lesson_20_cloning_funcs.cpp) @@ -205,5 +205,5 @@ if (TARGET Halide::Mullapudi2016) auto_schedule_false auto_schedule_true Halide::Tools) add_test(NAME tutorial_lesson_21_auto_scheduler_run COMMAND lesson_21_auto_scheduler_run) - set_tests_properties(tutorial_lesson_21_auto_scheduler_run PROPERTIES LABELS tutorial) + set_tests_properties(tutorial_lesson_21_auto_scheduler_run PROPERTIES LABELS "tutorial multithreaded") endif () From 55107424d760b105363e31d40c7e66788dfbe1b6 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 20 Jun 2022 17:08:17 +0300 Subject: [PATCH 3/6] [CMake] Add tests that use `std::thread` into `multithreaded` group --- test/correctness/CMakeLists.txt | 2 +- test/performance/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/correctness/CMakeLists.txt b/test/correctness/CMakeLists.txt index c7195fb92483..7866f0b7ead4 100644 --- a/test/correctness/CMakeLists.txt +++ b/test/correctness/CMakeLists.txt @@ -282,7 +282,6 @@ tests(GROUPS correctness strict_float_bounds.cpp strided_load.cpp target.cpp - thread_safety.cpp tiled_matmul.cpp tracing.cpp tracing_bounds.cpp @@ -362,6 +361,7 @@ tests(GROUPS correctness multithreaded reorder_rvars.cpp rfactor.cpp stream_compaction.cpp + thread_safety.cpp truncated_pyramid.cpp tuple_vector_reduce.cpp unroll_huge_mux.cpp diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index 875a7a45595a..0e462530ff9b 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -16,7 +16,6 @@ tests(GROUPS performance packed_planar_fusion.cpp realize_overhead.cpp rgb_interleaved.cpp - thread_safe_jit.cpp tiled_matmul.cpp vectorize.cpp wrap.cpp @@ -34,6 +33,7 @@ tests(GROUPS performance multithreaded rfactor.cpp sort.cpp stack_vs_heap.cpp + thread_safe_jit.cpp ) # Make sure that performance tests do not run in parallel with other tests, From 27dfec318a42e9d1f11e1ac0bc19489b82a7cf02 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 20 Jun 2022 19:24:07 +0300 Subject: [PATCH 4/6] [CMake] Set HL_NUM_THREADS=1 for non-multithreaded tests This actually prevents bit-rot for the new tests. --- cmake/HalideTestHelpers.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/HalideTestHelpers.cmake b/cmake/HalideTestHelpers.cmake index 3ec36a1851a9..a10d0a1b3460 100644 --- a/cmake/HalideTestHelpers.cmake +++ b/cmake/HalideTestHelpers.cmake @@ -49,9 +49,15 @@ function(add_halide_test TARGET) COMMAND ${args_COMMAND} ${args_ARGS} WORKING_DIRECTORY "${args_WORKING_DIRECTORY}") + # If the test is not marked as being multi-threaded, + # limit it to one thread, as requested. + if (NOT "multithreaded" IN_LIST args_GROUPS) + set(MAYBE_FORCE_NO_THREADING "HL_NUM_THREADS=1") + endif() + set_tests_properties(${TARGET} PROPERTIES LABELS "${args_GROUPS}" - ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET}" + ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET};${MAYBE_FORCE_NO_THREADING}" PASS_REGULAR_EXPRESSION "Success!" SKIP_REGULAR_EXPRESSION "\\[SKIP\\]" WILL_FAIL ${args_EXPECT_FAILURE}) From 1833a1d683502e6e5c52143ad8d5139b489da35a Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Thu, 23 Jun 2022 22:01:36 +0300 Subject: [PATCH 5/6] [CMake] Separate labels with `;` instead of ` ` --- src/autoschedulers/adams2019/CMakeLists.txt | 2 +- src/autoschedulers/li2018/CMakeLists.txt | 2 +- tutorial/CMakeLists.txt | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/autoschedulers/adams2019/CMakeLists.txt b/src/autoschedulers/adams2019/CMakeLists.txt index a2df8ed6251d..f391c34ce95b 100644 --- a/src/autoschedulers/adams2019/CMakeLists.txt +++ b/src/autoschedulers/adams2019/CMakeLists.txt @@ -117,7 +117,7 @@ if (BUILD_SHARED_LIBS) COMMAND test_apps_autoscheduler $) set_tests_properties(test_apps_autoscheduler PROPERTIES - LABELS "Adams2019 multithreaded" + LABELS "Adams2019;multithreaded" ENVIRONMENT "LD_LIBRARY_PATH=$:$ENV{LD_LIBRARY_PATH};HL_TARGET=${Halide_TARGET}") endif () diff --git a/src/autoschedulers/li2018/CMakeLists.txt b/src/autoschedulers/li2018/CMakeLists.txt index faa98e6cbca1..c767ddf3b78b 100644 --- a/src/autoschedulers/li2018/CMakeLists.txt +++ b/src/autoschedulers/li2018/CMakeLists.txt @@ -19,7 +19,7 @@ target_link_libraries(demo_gradient_autoscheduler PRIVATE demo_gradient Halide:: add_test(NAME demo_gradient_autoscheduler COMMAND demo_gradient_autoscheduler --benchmarks=all --benchmark_min_time=1 --estimate_all) -set_tests_properties(demo_gradient_autoscheduler PROPERTIES LABELS "Li2018 multithreaded") +set_tests_properties(demo_gradient_autoscheduler PROPERTIES LABELS "Li2018;multithreaded") ## diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 5964e8ef3cf3..7d86ae5d6ae3 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -17,7 +17,7 @@ function(add_tutorial source_file) set_tests_properties(tutorial_${name} PROPERTIES ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET}" - LABELS "tutorial ${args_GROUPS}") + LABELS "tutorial;${args_GROUPS}") if (args_WITH_IMAGE_IO) target_link_libraries(${name} PRIVATE Halide::ImageIO) @@ -85,7 +85,7 @@ if (TARGET_NVPTX) target_include_directories(lesson_10_aot_compilation_run PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") add_test(NAME tutorial_lesson_10_aot_compilation_run COMMAND lesson_10_aot_compilation_run) - set_tests_properties(tutorial_lesson_10_aot_compilation_run PROPERTIES LABELS "tutorial multithreaded") + set_tests_properties(tutorial_lesson_10_aot_compilation_run PROPERTIES LABELS "tutorial;multithreaded") endif () endif () @@ -205,5 +205,5 @@ if (TARGET Halide::Mullapudi2016) auto_schedule_false auto_schedule_true Halide::Tools) add_test(NAME tutorial_lesson_21_auto_scheduler_run COMMAND lesson_21_auto_scheduler_run) - set_tests_properties(tutorial_lesson_21_auto_scheduler_run PROPERTIES LABELS "tutorial multithreaded") + set_tests_properties(tutorial_lesson_21_auto_scheduler_run PROPERTIES LABELS "tutorial;multithreaded") endif () From 9d088f7c02334bdfac07fd1d4ccb0fa33e927d89 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Fri, 24 Jun 2022 17:15:51 +0300 Subject: [PATCH 6/6] Revert "[CMake] Set HL_NUM_THREADS=1 for non-multithreaded tests" I *do* believe that should be done, but clearly that is not the opinion that the upstream shares. This reverts commit 27dfec318a42e9d1f11e1ac0bc19489b82a7cf02. --- cmake/HalideTestHelpers.cmake | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/cmake/HalideTestHelpers.cmake b/cmake/HalideTestHelpers.cmake index a10d0a1b3460..3ec36a1851a9 100644 --- a/cmake/HalideTestHelpers.cmake +++ b/cmake/HalideTestHelpers.cmake @@ -49,15 +49,9 @@ function(add_halide_test TARGET) COMMAND ${args_COMMAND} ${args_ARGS} WORKING_DIRECTORY "${args_WORKING_DIRECTORY}") - # If the test is not marked as being multi-threaded, - # limit it to one thread, as requested. - if (NOT "multithreaded" IN_LIST args_GROUPS) - set(MAYBE_FORCE_NO_THREADING "HL_NUM_THREADS=1") - endif() - set_tests_properties(${TARGET} PROPERTIES LABELS "${args_GROUPS}" - ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET};${MAYBE_FORCE_NO_THREADING}" + ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET}" PASS_REGULAR_EXPRESSION "Success!" SKIP_REGULAR_EXPRESSION "\\[SKIP\\]" WILL_FAIL ${args_EXPECT_FAILURE})